들어가기 전

이번 포스팅에서 RDS로 구축한 MySQL과 EC2에 배포된 스프링 애플리케이션을 연동해 보겠습니다.

만약 RDS로 MySQL이 구축 안된 상태면 아래 포스팅을 참고하시길 바랍니다.

https://hoestory.tistory.com/65

 

[AWS] RDS 데이터베이스 생성 및 MySQL Workbench 연동

들어가기 전 이번 포스팅에서는 AWS RDS 데이터베이스를 생성 후 MySQL Workbench와 연동하는 방법에 대해 알아보겠습니다. RDS 생성 1. 데이터베이스 생성을 클릭합니다. 2. 필자는 MySQL을 사용할 예정

hoestory.tistory.com

 

그리고 AWS EC2에 스프링이 배포가 안된 상태라면 아래 포스팅을 참고하고 이번 포스팅을 보시는 게 좋을 거 같습니다.

https://hoestory.tistory.com/38

 

[AWS] EC2 Ubuntu환경에서 Spring Boot 배포

들어가기 전 EC2 Ubuntu환경에서 Spring Boot를 배포를 하려면 EC2 인스턴스를 생성해야 됩니다. EC2 인스턴스 생성에 대해 궁금하신 분은 아래에서 확인해주시기 바랍니다. [AWS] AWS EC2 인스턴스 생성 [AW

hoestory.tistory.com

 

연동하는 방법은 2가지 방법이 있습니다. 위험한 방법과 안전한 방법이 있습니다. 먼저 위험한 방법에 대해 설명을 하고 안전한 방법에 대해 설명하겠습니다.

 

 

위험한 방법

 

1. 일단 Spring 프로젝트에 있는 application.yml 또는 application.properties에 RDS 정보를 아래와 같이 입력합니다. 

 

application.yml

spring:
  datasource:
    url: jdbc:mysql://RDS엔드포인트:포트번호/스키마
    username: RDS에서 설정한 userName
    password: RDS에서 설정한 패스워드
    driver-class-name: com.mysql.cj.jdbc.Driver

 

2. Spring 프로젝트의 최상위 경로로 이동을 하고 아래 명령어로 파일들을 확인합니다.

 

ls

 

그럼 아래와 같이 파일들을 확인할 수 있습니다.

 

 

3. 아래 명령어를 입력합니다. 아래 명령어를 통해 clean을 한 뒤 빌드를 합니다. (이 글을 보시는 분들 중 테스트 실패로 인해서 빌드가 실패하실 수 있는 분이 계실 수 있어 테스트를 제외하고 빌드를 하였습니다.)

 

./gradlew clean build -x test

 

4. 빌드가 성공적으로 되었다면 아래 명령어를 입력하고 해당 경로로 이동한 뒤에. jar파일이 잘 생성되었는지 확인합니다.

 

cd build/libs
ls

 

 

5. jar파일이 잘 생성이 되었다면 현재 경로(build/libs)에서 아래 명령어를 통해 EC2로 빌드 파일을 복사/붙여 넣기를 합니다.

 

scp {빌드를 통해 생긴 jar 파일명}.jar {Host명}:/home/ubuntu
  • Host명은  위에 명시해 놓은 EC2에 스프링 배포하는 방법을 설명하는 포스팅에서 설명하였던 ~/.ssh/cofing에 명시해 놓은 Host를 작성해 주시면 됩니다.

정상적으로 되었다면 아래처럼 나오게 됩니다.

 

6. 이제 EC2에 접속을 하여 빌드 파일이 복사/붙여 넣기가 되었는지 확인을 합니다.

 

 

7. 빌드파일이 잘 생성되었다면 아래 명령어를 통해서 빌드 파일을 실행시킵니다.

nohup java -jar {빌드를 통해 생긴 jar 파일명}.jar &

 

8. 위 명령을 실행하면 nohup.out이라는 파일이 생성이 됩니다. 해당 파일을 통해 실시간으로 애플리케이션이 실행되는 로그를 확인할 수 있습니다. 아래 명령어를 입력하면 확인하실 수 있습니다.

 

tail -500f nohup.out

 

 

지금까지 RDS와 EC2에 배포된 스프링 애플리케이션을 연동하기 위해 위험한 방법을 사용한 과정을 살펴봤습니다. 이제 그 이유와 위험성에 대해 자세히 알아보겠습니다.

 

위험한 이유

프로젝트를 진행할 때 혼자 할 때도 있고 동료들과 함께 진행할 수 있습니다. 그럼 대부분 Git을 이용하여 협업을 하거나 코드를 관리합니다. 그럼 위에 설명한 방법대로 하게 되면 데이터베이스의 주소, 아이디, 비밀번호 등 외부에 노출되면 안 되는 민감한 정보들이 외부에 노출될 위험이 있습니다.

물론 GitHub 또는 GitLab을 사용할 시 레파지토리를 private으로 설정을 하면 외부에서 보지는 못하지만 혹시 모를 경우가 있기 때문에 위험합니다.

 

안전한 방법으로 바꾸는 법

민감한 정보들은 환경변수로 설정을 하여 외부에 노출되지 않도록 하는 것입니다.

 

 

안전한 방법에 대해 알기 전에 EC2에 있는 빌드 파일과 nohup.out 파일을 삭제하고 보시면 좋을 거 같습니다.

 

rm -r nohup.out
rm -r 빌드파일명.jar

 

이제 안전한 방법에 대해 알아보겠습니다.

 

안전한 방법

 

1. EC2에 환경변수를 설정해 줍니다. 환경변수는 아래 명령어를 통해서 설정을 하시면 됩니다.

 

ls -a

 

위 명령어를 입력하면. bashrc가 보이게 됩니다. .bashrc에 환경변수를 설정할 것입니다.

 

 

2. .bashrc를 아래 명령어를 통해 접근을 하고 .bashrc 파일 마지막 줄에 환경변수를 추가해 줍니다.

 

nano .bashrc

 

환경변수 추가

export MYSQL_URL=jdbc:mysql://엔드포인트:포트번호/데이터베이스
export MYSQL_USERNAME=RDS에서 설정한 userName
export MYSQL_PASSWORD=RDS에서 설정한 password

 

환경변수를 추가하고 아래 명령어를 통해서 적용을 시키고 잘 적용되었는지 확인을 합니다.

 

source .bashrc // 환경변수 설정한 값 적용

echo $MYSQL_URL

 

그럼 아래와 같이 설정한 값이 나오게 됩니다.

 

3. Spring 프로젝트에 있는 application.yml 또는 application.properties에 환경변수로 설정한 키값을 아래와 같이 입력을 합니다. 

 

application.yml

 

spring:
  datasource:
    url: ${MYSQL_URL}
    username: ${MYSQL_USERNAME}
    password: ${MYSQL_PASSWORD}
    driver-class-name: com.mysql.cj.jdbc.Driver

 

위와 같이 설정을 하였다면 위험한 방법에서 설명한 2번부터 동일하게 실행하시면 됩니다.

 

 

지금까지 RDS와 EC2를 연동하는 위험한 방법과 안전한 방법에 대해 알아보았습니다.