Java와 Spring Boot를 이용해서 간단한 게시판 서비스를 만들었다.
깃허브 레포지토리
이번에는 해당 웹서비스를 AWS를 통해서 배포하는 과정을 포스팅하려고 한다.
웹 애플리케이션 서버는 프라이빗 서브넷에 위치하였고 OpenVPN을 통해서 접근한다.
데이터베이스는 프라이빗 서브넷에 RDS for MySQL을 배치한다.
웹 애플리케이션 서버는 ALB와 연결을 하고,
Route 53에서 생성한 도메인과 연결하여 네트워크 환경을 구성한다.
개발환경은
OS: Amazon Linux 2023
Frontend & Backend: Spring Boot (Java 17)
Database: RDS for MySQL 8
기본 환경은 이전 포스팅에서 사용했던 서비스들을 이용하여 진행하겠다.
VPC 환경구축 #1
VPC 환경구축 #2
VPC 환경구축 #3
여기까지 환경이 구축되었다고 인지하면 된다.
먼저 희망하는 도메인 이름을 선정하고 등록한다.
도메인 등록을 완료하였으면 AWS Certificate Manager(ACM)에서 인증서를 요청한다.
ACM 생성을 하였으면 해당 인증서로 들어가서
레코드를 생성한다.
잘 생성되었는지 확인하기 위해 등록한 도메인 호스팅 영역으로 들어가서 CNAME 레코드가 생성되었는지 확인한다.
ALB에는 80(HTTP)/443(HTTPS)에 통한 인터넷 접근을 열어둔다.
APP-EC2에는 OpenVPN을 통해 내 IP에서만 접근할 수 있도록 열어두고 ALB를 통한 접근도 열어두었다.
RDS는 3306포트로 접근할 수 있게 설정하였다.
웹 애플리케이션 서버 EC2를 생성한다.
스토리지를 제외한 설정값에 대해서는 디폴트 값으로 설정하고 스토리지 용량은 20GB로 설정하였다.
RDS를 생성하기 전에 RDS 서브넷 그룹을 먼저 생성해야한다.
가용영역은 AZ-A, AZ-C를 선택하고 서브넷은 DB 서브넷만 선택한다.
MySQL 엔진을 선택해준다.
(MySQL 8.0.33)
상용 애플리케이션이 아니기때문에 프리티어로 설정하였다.
DB의 이름을 정해주고 마스터 사용자 이름/암호를 설정한다.
인스턴스 클래스 및 스토리지는 디폴트값으로 설정한다.
RDS를 생성하면서 EC2와 바로 연결하지 않았다.
Spring Boot에서 application.yaml 설정을 통해 RDS와 연결할 계획이다.
VPC와 서브넷 그룹을 선택한다.
기존에 생성해 두었던 RDS 보안그룹을 연결하고 가용영역을 선택한다.
데이터베이스 인증 방식은 암호 인증으로 선택하였다.
EC2 탭에서 대상그룹을 생성한다.
대상 유형으로는 인스턴스를 선택한다.
80 / 8080 대상그룹을 생성한다.
로드밸런서 이름을 설정하고
VPC를 선택하고 가용영역 A,C에 Public Subnet을 선택한다.
보안그룹은 미리 생성해두었던 ALB용 SG를 선택한다.
그 다음 스크린샷은 없지만 리스너 선택을 해야하는데 이때
HTTP 80 포트를 80 대상그룹으로 전달하고
HTTPS 443 포트도 80 대상그룹을 전달한다.
그 후 ACM 인증서를 선택한다.
HTTP:80에서 리다이렉션 대상을 HTTPS 443으로 설정하고
HTTPS:443에서는 리스너 규칙을
api.도메인 이름.com을 8080 포트로 전달하도록 설정한다.
API 서버 동작상태를 확인한다.