1. RDS 생성 및 설정
RDS를 생성하는 방법은 간단하다. 여러 글들을 참고하여 MYSQL 스택으로 그냥 생성하면 된다.
EC2와 보안그룹 연결, 퍼블릭 액세스 허용
중요한 부분은 보안 그룹상 이미 생성되어 있는 EC2와 연결 설정을 해줘야한다는 것과 퍼블릭 액세스를 허용해줘야한다는 것이다.
EC2와 보안 그룹상 연결이 안되어 있으면 EC2에서 RDS에 접근할 수 없다.
RDS의 퍼블릭 액세스가 불가능하면 EC2 외부(내 로컬 PC)에서 DataGrip, workbench 등 Database 관리 툴을 이용해서 접근이 불가능하다. 퍼블릭 액세스로 열어두는 것이 보안상 우려가 될수도 있으나, ID, PW, URL 등 환경 변수 값을 잘 관리하면 별로 문제는 없어보인다(약간 애매한 문제다. 누군가 악의적으로 DB에 접근하여 사용량을 급증시키면 엄청난 비용이 청구될 수 있다고도 한다).
VPC를 구성하고, 연결된 VPN을 통해서만 RDS에 접근하게 한다면 이런 설정은 필요없다. 다만 이것은 프로젝트 초기가 아니라 나중에 처리해도 된다.
RDS 정보 참조 및 외부 tool 연결
생성된 RDS 정보에서 DB 식별자, 엔드포인트, 포트 등의 정보를 알아내서 Application의 환경 변수로 추가해주어야한다.
나의 경우 .env 를 참조하고 있기 때문에 .env 파일에 위와 같이 환경 변수값들을 넣어주었다. (이후 이 값들을 Valut, Github Repository Secret, AWS Parameter Store 등에 저장하여 처리할 예정)
DB 관리 tool로 접속하기(DataGrip)
이제 해당 정보를 갖고 DB 관리 툴에서 RDS에 접속이 가능하다. DataGrip에서 아래처럼 정보를 추가하면 DB에 접속이 가능하다
host, port, user, password 정보를 입력하면 된다. Database 부분에는 내가 만들 데이터베이스의 이름을 입력하면 된다. mysql을 만들면 처음에 mysql, sys, information_schema 등등 여러가지 데이터베이스가 있는데 이런 Introspect한 기본적인 데이터베이스 외에 내가 사용할 데이터베이스를 추가하는 개념이다.
2. Route53 및 도메인 구입
ref.) https://twofootdog.tistory.com/29
도메인 구입 및 적용은 2~3일 정도 시간이 걸린다. 미리 해놓는게 좋다.
도메인 부분은 이 부분은 내가 직접하지는 않았다. 다만 도메인을 구매하고(가비아 라는 호스팅 서비스), Route 53에 호스팅 영역으로 해당 도메인 주소를 등록하며 된다. 레코드는 도메인을 이용하여 여러 주소나 TTL, 라우팅 등을 설정할 수 있는 기능이다. 예를 들어 example.com 이라는 도메인을 구입해서 갖고 있다면, internal.example.com 등을 등록하고 사용할 수 있다.
3. 로드밸런서 설정
로드밸런서를 통해서 EC2로 들어오는 부하를 분산시키고, 요청에 대한 보안 등을 관리한다.
인증서 등록
로드 밸런서를 등록하기 위해서 [대상 등록]을 하면서 [리스너 및 규칙]을 추가해야한다. 이때 HTTPS 통신을 위해 기본 SSL/TLS 인증서가 필요한데, Route53에 등록한 도메인에 대해서 어디선가 인증을 받아야한다. AWS를 이용하면 ACM(AWS Certificate Manager)에 인증서 발급 요청을 할 수 있으며, 발급에 약간의 시간이 소요된다. 나의 경우 20분 정도 걸렸던 것 같다.
로드 밸런서 생성 후 [리스너 및 규칙] - [대상 그룹으로 전달] 부분에서 대상 그룹을 생성하고 지정해준다. EC2가 이 group에 포함되도록 한다.
대상 등록
상태 검사(헬스 체크)는 HTTP, '/' 경로로 성공 시 200을 호출하도록 했다. EC2에 정상적으로 컨테이너가 떠있다면 설정 후 조금 기다리면 비정상 -> 정상 상태로 바뀐다.
4. 보안 그룹 관리
위 상태검사 시 헬스 체크가 잘 되지 않는다면 보안그룹에 문제가 있을 수도 있다. 그리고 보안 그룹을 통해 요청을 걸러내서 적용해야한다.
로드밸런서 : 인바운드 규칙을 https만 열고, 외부에 오픈한다.
내가 막 만든 방식이라 best practice가 아닐 것이다. 하면서 깨달은 점은 보안 그룹은 여러 개를 만들다보니 이름과 설명을 잘 적어두어야 구분이 용이하다는 것이다.
EC2의 보안그룹은 로드밸런서에 대해서만 인바운드 규칙을 추가한다. EC2는 외부에서 접속할 수 없고, 로드밸런서로 들어온 8080 포트로의 요청만 받을 수 있게 해주었다. 8080 요청의 규칙 상세에 들어가보면 소스 부분에 로드밸런서의 보안그룹을 적용해서, 로드밸런서의 요청만 받을 수 있도록 설정했다.
'Project > Poppin' 카테고리의 다른 글
Kotlin No Args Plugin 및 not nullable on Entity (1) | 2023.12.03 |
---|---|
스프링부트 Swagger 3.0, JPAAuditing, ZonedDateTime (1) | 2023.12.02 |
SpringBoot Kotlin 프로젝트 Docker, AWS로 서버 구성하기-1. docker image, ec2, 환경변수 .env 등 (2) | 2023.11.25 |
kotlin build file name 변경하기, mainClass 설정 (0) | 2023.11.25 |
SpringBoot-Kotlin 프로젝트에 dotenv 적용하기 (1) | 2023.11.25 |