전체 보기
🔵

개발 서버와 운영 서버 분리, 배포 성공!(With AWS)

작성일자
2023/03/04
태그
INFRA
프로젝트
Atties
책 종류
1 more property

운영 서버를 main 브랜치로

Atties 프로젝트를 본격적으로 운영하며, 개발서버와 운영서버를 분리하기로 결정했다. 운영서버는 main 브랜치에서, 개발서버는 develop 브랜치에서 build 해서 배포자동화를 하기로 했다.
기존에 develop 브랜치에서 배포하던 설정을 그대로 main 브랜치로 옮겨줬고, develop 브랜치 배포 환경은 새로 만들어줘야 했다. 이는 내가 맡아 하기로 했다.
AWS ec2 인스턴스를 만들고, rds 인스턴스도 만들고, s3 스토리지도 파고, https 적용까지 해주면 끝!이 아니고, docker+github actions를 이용한 배포 자동화까지 해줘야 한다! 그 모든 과정은 여기다가 정리하겠다. 이 내용으로 초보자분들도 따라하실 만한 포스팅을 한 번 올리고 싶었어서, 여기다가 먼저 세세하게 정리해보겠다. 참고로 윈도우 기준으로 작성할 겁니다!

개발 서버 환경 설정 (ec2, rds, s3)

1.
AWS ec2 인스턴스 만들기
AWS EC2: 가상 컴퓨터를 임대 받아 그 위에 자신만의 컴퓨터 애플리케이션을 실행할 수 있게 한다.
b.
우측 상단에 지역으로 서울 선택
c.
인스턴스 시작 클릭
d.
아래와 같이 설정
원하는 이름 지정
OS로 Ubuntu 선택
AMI는 Ubuntu 18.04 LTS로 선택
인스턴스 유형은 t2.micro 선택 (꼭 프리티어로 선택해야 함!)
새 키 페어 생성 클릭 해 키 페어 생성 후 원하는 위치에 저장
네트워크 설정 아래와 같이 선택
인스턴스 시작 버튼 클릭
Putty 실행해 아래와 같이 입력
session에 hostname에 ubuntu@퍼블릭 IPv4 DNS 입력
퍼블릭 IPv4 DNS는 ec2 인스턴스 페이지에 있습니다
category-connection-ssh-auth에 private key file for authentication 항목에 아까 다운 받은 .ppk 키페어를 지정
open 클릭→ (인스턴스에 처음 연결한 경우) Accept 클릭→ EC2 ubuntu 접속 성공!
보안그룹
왼쪽 메뉴 - 네트워크 및 보안 - 보안그룹 클릭 - 인바운드 규칙 편집 클릭
접속할 포트 추가
탄력적 IP 할당
왼쪽 메뉴 - 네트워크 및 보안 - 탄력적 IP 클릭 - 탄력적 IP 주소 할당 클릭
별다른 설정할 필요 없이 바로 할당 누르시면 됩니다.
(중요) 방금 생성한 탄력적 IP와 방금 생성한 EC2 주소 연결
우측 상단에 작업 - 탄력적 IP 주소 연결 - 인스턴스 택함
탄력적 IP는 생성하고 EC2 서버에 연결하지 않으면 비용이 발생합니다. 위의 과정을 빼먹지 말아주세요!
여기까지 완료했다면 아까 Putty 실행을 다시 해보세요!
대신, 이번엔 session에 hostname에 ubuntu@퍼블릭 IPv4 DNS 입력하지 말고 ubuntu@탄력적IP 로 입력해보세요! 똑같이 접속 됩니다:)
2.
AWS rds 인스턴스 만들기
RDS - 데이터베이스 생성
아래와 같이 설정 후 완료 버튼 클릭해 생성
엔진 옵션 : MySQL
엔진 버전 : MySQL 8.0.28
템플릿 : 프리 티어
인스턴스 : db.t2.micro
스토리지 - 할당된 스토리지 : 20 GIB
스토리지 - 자동 조정 활성화 체크 해제
네트워크
EC2 컴퓨팅 리소스에 연결 안 함에 체크
퍼블릭 액세스 로 체크 → mysql workbrench 사용 위함
데이터베이스 옵션
초기 데이터베이스 이름 지정해서 db 생성
파라미터 설정
왼쪽 - 파라미터 그룹 - 파라미터 그룹 생성
생성된 파리미터 그룹 클릭 - 파리미터 편집 클릭 - 아래 설정 후 변경 사항 저장 클릭
time_zone : Asia/Seoul
character_set 으로 검색해서 나오는 것들 : utf8mb4
collation 검색해서 나오는 것들 : utf8mb4_general_ci
max_connections : 150
파라미터 그룹을 db에 연결
왼쪽 - 데이터베이스 - 인스턴스 체크 - 수정
DB 파라미터 그룹을 default에서 방금 생성한 것으로 변경
계속 클릭
즉시 적용 선택 후 DB 인스턴스 수정 클릭
작업 - 재부팅 클릭 (선택사항)
PC에서 RDS 접속 테스트
왼쪽 - EC2 - 네트워크 및 보안 - 보안 그룹
EC2에 사용된 보안 그룹 ID, 보안 그룹 이름 복사
왼쪽 - 데이터베이스 - 연결&보안 - VPC 보안 그룹 선택
인바운드 규칙 - 인바운드 규칙 편집
복사한 EC2 보안 그룹 ID와 본인 IP를 RDS 보안 그룹의 인바운드로 추가
MySQL Workbench
더하기 버튼 클릭 - 설정 후 OK 클릭
Hostname에 endpoint 내용 넣어주기
username과 password는 아까 설정했던 대로 넣어주기
3.
s3 스토리지 만들기
s3 - 버킷 - 버킷 만들기
모든 퍼블릭 액세스 차단 체크 해제 후 버킷 만들기 클릭
버킷 정책 생성
버킷 - 권한 탭 - 버킷 정책 - 편집
버킷 ARN 복사해두기
정책 생성기 클릭
Select Type of Policy : S3 Bucket Policy
Effect : Allow
Principal : *
AWS Service : Amazon S3
Actions : GetObject, PutObject (이거 안넣어서 springboot에서 업로드 계속 실패했었음ㅠㅠㅠㅠㅠ 내 에러의 주 원인,,,,,,,,,)
Amazon Resource Name (ARN) : 복사한값/*
ex) arn:aws:s3:::bucket-name/*
Add Statement - Generate 후 생성된 버킷 정책 JSON을 복사해두기
복사한 JSON을 정책 페이지에 붙여넣은 후 변경 사항 저장 클릭
사진처럼 되면 성공임
이미지 파일 직접 업로드해서 테스트해보기
업로드 후, 클릭해 객체 URL로 들어가보기.
생성한 S3에 IAM을 설정하기
IAM - 사용자 - 사용자 추가
이름 짓고 다음 클릭
직접 정책 연결 클릭 후 amazons3full이라고 검색
검색해서 나오는 AmazonS3FullAccess 체크하고 만들기
만든 정책 클릭 - 보안 자격 증명 탭 - 액세스 키 만들기 - AWS 외부에서 실행되는 애플리케이션 - 다음 클릭 - 액세스 키 만들기 클릭 → access key와 secret key 복사해서 저장해두기. (외부에 공개 절대 하면 안됨)
참고

배포!!! (4,5일 매일 도전하고 실패하다 3월 6일 드디어 성공해서 이어서 작성함,, 배포 처음 해보는 것도 아닌데, 유독 잔에러가 많았던,, 배포)

에러 (토글을 열면 굉장히 긴 에러 로그가 있어요!)
해결)
토글 속 긴~ 에러는 하루 지나서 겨우 알앗다,,,ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
바로,, ddl-auto가 none이라서 db 테이블들이 없어서 발생한 에러였음,,,, 애꿎은 redis 탓했던 나,,
나는 바보… 아니 왜 어제 밤엔 안 보였을까?? 로그가 너무 길었어서 발견을 못했다,, 맨 끝쪽에 있는 table이 없단 에러를,,, 말똥한 정신으로 다시 찬찬히 로그를 뜯어보고 발견할 수 있었다.
이렇게 해결 못 하던 거 이유 찾으면 ,, 비록 허무한 이유였어도 너무 신나!! 이 맛에 개발하지요
ddl-auto를 create으로 하는 건 바람직하지 않지만,,
첫 배포고,
테이블을 직접 다 만드는 건 dba가 없는 상황에서,
시간 관계 상 불필요하다 생각되어,
또한, 운영서버가 아니고 개발서버이기에,,, (개발서버라도 create은 바람직하지 않지만)
토이플젝이기도하고,,
결론) 주저리주저리 이유가 길지만, 그냥 create으로 배포해줬다^^
정말 너무나 반가운 JVM running ,,,,,
히히 접속 너무 잘된당 진짜 이거 안돼서 4일동안 매일 자기 전마다 도전하고 실패해서 쓸쓸하게 잠들었는데, 드디어 돼서 너무 신난다! 이제 CICD랑 https만 적용해주면 끗!
배포는 이전에 여러 번 해봤는데, 이번엔 유독 잔에러가 많아서 고생했다,,,
후기) 소신발언 하자면 개인적으로 AWS보다 GCP 이용한 배포가 더 쉽고 편했음,, 가장 큰 이유는 GUI가 더 보기 편해서임,,, AWS는 이전부터 느꼈지만 기능들이 정말 많다는 게 장점이자 단점인데, 이 때문에 서비스들 번갈아가며 이동하기 좀 불편했음,,