0. 목표 및 구조
1. React & Spring Boot
2. AWS S3/EC2
3. 배포 자동화 - Github Actions & AWS CodeDeploy
4. 정리
2. AWS S3/EC2
AWS 공식 문서 한글화가 정말 잘되어있다. 웬만한 내용은 공식 문서에서 쉽게 찾아볼 수 있다.
https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/concepts.html
AWS EC2 설정부터 배포 자동화까지의 전체적인 흐름은 이 분의 포스트를 참고했다. 감사합니다.
IAM
S3와 EC2를 사용하기 위해 먼저 IAM을 설정해준다.
AWS Identity and Access Management(IAM)은 AWS 리소스에 대한 액세스를 안전하게 제어할 수 있는 웹 서비스입니다. IAM을 사용하여 리소스를 사용하도록 인증(로그인) 및 권한 부여(권한 있음)된 대상을 제어합니다.
S3
- AWS에서 제공하는 클라우드 스토리지 서비스
- 데이터를 버킷 내의 객체로 저장 구조로 저장한다. 객체는 데이터와 메타데이터, 버킷은 객체에 대한 컨테이너
S3 정적 웹 호스팅 - React
프로젝트의 구조를 React와 Spring Boot로 분리했으며 React는 화면만 보이면 되므로 S3의 정적 웹 호스팅 기능을 사용했다.
엄청 편하다! 파일을 올리기만 하면 바로 접근이 가능하다.
다만 http만 지원하므로 https 설정은 별도의 과정이 필요하다.
S3 저장소 - Spring Boot 번들링 파일 저장
서버 배포 자동화를 하기 위해 Github Actions과 CodeDeploy를 사용한다.
CodeDeploy라는 서비스는 저장소에 있는 번들링 파일을 가져와 배포하는데 이때 S3를 저장소로 사용한다.
Github Actions은 프로젝트를 번들링하고 S3에 업로드한다.
S3 고려할 점
처음엔 버킷 하나에 React와 Spring Boot를 둘 다 올렸었다.
AWS은 기본적으로 퍼블릭 액세스 차단을 권장하고 있다.
정적 웹 호스팅으로 사용하려면 퍼블릭 액세스 차단을 전부 해제해야 한다.
해제를 하자니, 업로드한 Spring Boot 압축 파일에는 설정 정보들이 들어있었다.
그래서 정적 웹 호스팅 용 버킷을 하나 더 만들어서 분리해주고 퍼블릭 액세스 차단 설정을 적절하게 주었다.
EC2
- 하나의 인스턴스에 Spring Boot 프로젝트를 배포하고 DB를 설치했다. DB는 추후 RDS로 분리할 예정.
- 보안 그룹의 인바운드 규칙 설정은 주의 깊게 봐야 한다.
- 나는 학습을 끝내면 인스턴스를 중지한다. 매번 프로세스를 실행하기 귀찮아서 인스턴스 재부팅 시 자동 실행 설정을 추가했다.
EC2 탄력적 IP 주소
EC2 인스턴스는 재시작할 때마다 새로운 IP가 할당된다.
React에서 Spring Boot의 url을 요청하는데 IP가 바뀌면 곤란하기 때문에 고정적인 IP가 필요하다.
인스턴스를 중지하지 않으면 될 일이지만 나는 AWS 과금 트라우마가 있어 학습이 끝나면 무조건 인스턴스를 중지해야만 했다.
탄력적 IP를 할당 받아 인스턴스에 연결하면 고정적으로 사용할 수 있다.
기타 사항
탄력적 IP 주소는 희귀하므로 리전 당 개수도 제한됨. 탄력적 IP 주소의 효율적인 사용을 위해 탄력적 IP 주소가 실행 중인 인스턴스와 연결되어 있지 않거나 중지된 인스턴스 또는 연결되지 않은 네트워크 인터페이스와 연결된 경우 소액의 시간당 요금이 부과됩니다.
개인적으로 보안 설정을 확실하게 알기 전까진 인스턴스를 중지하는 게 마음이 편하다.
학습이 다 끝나면 탄력적 IP 해지도 꼭 해주자.
인스턴스 장애 시 주소를 다른 인스턴스로 다시 매핑하는 기능이 필요할 때는 탄력적 IP 주소를 주로 사용하고, 다른 모든 노드 간 통신에는 DNS 호스트 이름을 사용하는 것이 좋습니다.
고정적인데 왜 이름이 Elastic인가 했더니 이런 목적으로도 사용되는구나
'Project' 카테고리의 다른 글
커피 주문 서비스를 객체 지향으로 설계해보기 with Java (0) | 2022.10.19 |
---|---|
4. AWS + Spring Boot + React 프로젝트 근데 이제 배포 자동화를 곁들인 (0) | 2022.03.27 |
3. AWS + Spring Boot + React 프로젝트 근데 이제 배포 자동화를 곁들인 (0) | 2022.03.25 |
1. AWS + Spring Boot + React 프로젝트 근데 이제 배포 자동화를 곁들인 (0) | 2022.03.23 |
0. AWS + Spring Boot + React 프로젝트 근데 이제 배포 자동화를 곁들인 (0) | 2022.03.23 |