스프링에서 MySQL DB를 쓰면서 AWS의 RDS와 EC2를 이용해서 배포를 하는 방법을 간단하게 작성해보려고 한다.
우선 DB를 RDS에서 MySQL을 빌려서 연결을 한 후에 EC2를 이용해서 배포를 해보려고 한다. 그 이유는 RDS에서 DB를 사용하지 않고 EC2를 써봤는데 NullPointException
과 BeanCreationException
이 발생했기 떄문이다.
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'com.mysql:mysql-connector-j'
implementation 'org.springframework.boot:spring-boot-starter-web'
AWS RDS에 접속해서 MySQL 빌리기
DB인스턴스 식별자, 마스터 사용자 이름, 마스터 암호는 원하는대로 작성하면 된다.
프리티어는 db.t3와 db.t2만 사용할 수 있어서 db.t3를 사용했다.
초기 데이터베이스 이름을 프로젝트의 db이름인 catch_line
으로 설정하고 자동 백업을 활성화하면 비용이 청구가 되기 때문에 비활성화로 설정했다.
그 후 만든 인스턴스의 보안 그룹으로 들어가 인바운드 규칙 편집에서
MySQL의 default 포트인 3306을 IPv4 Anywhere로 Ipv4를 사용하는 누구나 사용할 수 있게 설정했다.
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://주소:포트/데이터베이스?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul&allowPublicKeyRetrieval=true
spring.datasource.username=아이디
spring.datasource.password=비밀번호
RDS를 만들면서 설정한 아이디와 비밀번호를 입력하면된다. 포트와 비밀번호는 나같은 경우에는 포트:3306, 데이터베이스는 RDS의 데이터베이스에 들어가면 엔드포인트를 볼 수 있는데 그 엔드포인트를 입력하면 된다.
그 후 스프링 프로젝트를 실행시켜서 제대로 동작한다면 RDS에서 빌린 MySQL 데이터베이스에 접속이 잘 된 것이다.!
이번에는 EC2를 이용해서 RDS에서 MySQL 데이터베이스를 빌려서 사용하고 있는 스프링 프로젝트를 배포해보겠다.
인텔리제이 -> Gradle -> Tasks -> build -> bootJar을 더블클릭하면 Jar파일이 프로젝트의 폴더의 build -> libs 안에 생성된다. 그 파일을 바탕화면으로 옮겨놓으면 된다.!
EC2 -> 인스턴스 생성에 들어가 설정을 완료하면 된다.
이름을 원하는대로 설정하고, db를 애플리케이션 및 OS 이미지를 Ubuntu로 설정했다.
다음으로 키페어 생성을 클릭하고, 나는 OpenSSh(Git Bash)를 사용했기 때문에 프라이빗 키 파일 형식을 .pem으로 설정한 후 키페어를 생성하면 된다. 키 페어를 생성한 후 바탕화면에 옮겨놓는다.
그 후에 스토리지 구성을 약 10GIB로 설정하고 인스턴스 시작을 누른다.
EC2 좌측 카테고리 -> 보안그룹 -> 인바운드 규칙 편집 -> 규칙 추가 -> 8080과 3360 추가
인스턴스에 들어가 생성한 인스턴스 -> 우클릭 -> 연결 -> SSH 클라이언트
에 들어가면 인스턴스에 접속할 수 있는 방법이 나온다.
Git Bash 접속 -> cd ~/Desktop
(바탕화면으로 이동) -> chmod 400 mainkey.pem
(키페어에 권한 주기) -> 권한을 가진 키페어를 통해 ssh 접속을 할 수 있다 -> ssh -i mainkey.pem ~~~~~~
(~는
예:
에서 unbuntu부터 끝까지이다.) (ssh 접속)
-> yes -> ssh 접속 완료 -> 서버 컴퓨터에 jvm(자바)를 설치해야 하기 때문에 우선 java가 존재하는지 확인하기 위해 java -version
명령어를 친다. -> java가 설치되어 있지 않다면 -> java를 설치하기 위해 apt를 업데이트 한다 - > sudo apt update
( apt 업데이트) -> sudo apt install openjdk-17-jre-headless
(java 17버전 설치) (다른 버전 설치해도 상관없다) -> AWS EC2 서버에 로컬에 있는 스프링 부트 jar 파일을 서버로 가져와야 한다. -> 기존 EC2에 연결된 bash 쉘에 추가로 git bash를 열어 하나 더 실행시킨다. -> cd ~/Desktop
-> ls
(jar파일 확인) -> chmod 400 mainkey.pem(서버에 접근하기 위해 권한 주기) -> scp -i "키페어.pem" ~/Desktop/파일이름.jar (ubuntu@IP:~/받을서버경로)
(jar파일 EC2 서버에 전송) ((~~~)
는 위에 말했던 SSH 클라이언트 글에서 예:
밑에 써있는 코드에서 ubuntu부터 쭉 쓰면 된다!! )
EC2서버에 jar 파일을 전송하면 로컬에 연결된 bash는 종료하고 ec2서버에 연결된 bash 에서 ls
를 해 jar 파일이 제대로 전송되었는지 확인한다
이제 마지막으로 jvm
으로 파일을 작동시키면 된다!
이렇게 jar을 실행시키고
url에 54.180.235.56:8080 을 검색하면 내가 서버에 올린 프로젝트를 볼 수 있다!!
jar파일을 실행 시킬 때
sudo nohup java -jar [jar파일이름] &
이 코드로 실행시키면된다.
종료할때에는
ps -ef | grep catch_line-0.0.1-SNAPSHOT.jar
이런식으로 PID 번호를 찾은 후 가장 위에 있는 PID 번호를
sudo kill -9 [맨 위에 있는 PID 번호]
종료시켜주면 된다!!