[Co Labor] Spring + MySQL + AWS 배포하기! - EC2, RDS

2024. 10. 28. 21:05프로젝트: Co Laobr

먼저 RDS로 데이터베이스부터 배포해보자.

1. AWS 가입 및 RDS 접속

지역 설정 주의! 데이터베이스 생성을 누른다.

2. 데이터베이스 설정

방화벽은 새로 생성해도 되고 기존 항목 선택에서 기본값을 설정해도 된다. 어차피 나중에 설정해야 한다.

Estimated Monthly costs는 청구 예상 비용이 메겨져 있을 수 있으나 월별 추정 요금의 설명에 따르면 프리 티어는 무료라고 한다. 

여기서 엔드포인트를 확인할 수 있다. 그리고 보안 그룹을 눌러보면 인바운드 규칙란이 있는데 클릭해서 규칙을 편집해야 한다.

데이터베이스에 대해 외부에서 접근 보안을 어떻게 설정할 것인가에 대한 것이다.

3306 포트로 EC2의 보안그룹을 설정하여 EC2에서만 접근할 수 있도록 설정했다.

 

EC2 인스턴스와 RDS의 관계는 로컬 데이터베이스와 로컬 백엔드 환경과 정확히 똑같다.

EC2 인스턴스는 로컬 백엔드 환경을 클라우드 컴퓨터에 올려두고 ssh로 로컬에서 접속하는 것이고 RDS 또한 클라우드 컴퓨터에 올려두는 것이다.

 

따라서 데이터베이스의 인바운드 규칙을 3306 포트에 EC2 보안그룹으로 설정하는 것은 내 EC2 컴퓨터에서만 데이터베이스에 접근하도록 하겠다는 것이다.

3. 데이터베이스 연결

인텔리제이던 MySQL Workbrench던 데이터베이스를 연결해주면 굉장히 편리하게 작업할 수 있다. 나는 인텔리제이로 연결하였다.

Name : 인텔리제이 상에서 데이터베이스를 구별하는 이름이다. 아무거나 정해도 된다.

Host : AWS에서 부여한 엔드포인트이다.

User & Password : AWS에서 설정한 아이디와 비밀번호이다.

Database : AWS에서 설정한 DB 인스턴스 식별자이다.

테스트 커넥션을 해보고 성공하면 연결하면 된다! 보통 여기서 발생하는 오류는 인바운드 규칙과 관련된 권한 부족 오류이다.


다음은 EC2이다.

인스턴스 시작 클릭

우분투 선택

새 키페어 생성 후 파일 꼭 저장해두기!

나머지는 기존 설정을 따르고 인스턴스 시작을 누르면 된다.

그리고 새로 생성된 EC2 인스턴스를 누르고 보안 그룹을 누르면 기존에 존재하던 보안 그룹외에 새로 생성된 보안 그룹이 있다. 해당 그룹에서도 인바운드 규칙을 편집해야 한다.

HTTP에는 80번, HTTPS에는 443번, SSH에는 22번 포트만 열어두고 그 외의 포트로 오는 요청은 Nginx로 포워딩해주는 방식을 사용했다.

2. EC2 서버에 배포 파일 업로드

SFTP를 통해 배포 서버에 배포 파일을 업로드해야 한다. 인텔리제이에서 gradle → build를 통해 배포 파일을 만들 수 있고 나는 파일질라를 통해 파일을 전송했다.

파일질라를 사용하는 경우

File → Site Manager → Host : EC2 public IP

Key file : 아까 저장해둔 키파일 업로드

연결한 뒤 배포 파일(jar)을 업로드해주면 된다.

3. SSH 접속

ssh 접속 명령어는 ssh -i 키파일키파일키파일 유저이름@IP주소 이다.

키파일은 위에서 생성한 경로를 주면 되고 유저 이름은 내 글을 따라왔다면 ubuntu가 된다.

IP 주소는 EC2 public IP를 적어주면 된다.

 

접속 후 주로 사용하는 명령어는 다음과 같다.

sudo netstat -tulnp | grep 8080 : 8080 포트로 열려있는 서버가 있는지 확인한다.

ps -ef | grep java : java로 돌아가는 서버를 확인한다. 서버를 종료시킬 때 주로 사용한다.

sudo nohup java -Xmx512m -jar jar배포파일jar배포파일 > app.log 2>&1 & : jar 배포파일을 실행한다.

sudo tail -f app.log : 로그를 확인한다. -f 옵션을 주면 실시간으로 계속 갱신된다.