Spring Boot AWS RDS 연결 및 사용
지난 글에서 AWS RDS를 세팅하고, 데이터베이스를 연동했다!
이제 EC2로 실제 백서버를 구동시키고 계속 구동될 수 있게 설정해보자.
EC2란?
Amazon Web Services(AWS)에서 제공하는 클라우드 컴퓨팅 서비스로 가상 서버를 제공한다.
인바운드 규칙 (Inbound Rules)
인바운드 규칙은 외부에서 인스턴스로 들어오는 네트워크 트래픽을 제어합니다. 이 규칙은 특정 IP 주소, IP 범위, 포트 번호, 프로토콜 등을 기반으로 설정됩니다. (밖에서 안으로 들어올 때 설정되는 규칙)
인스턴스 연결창으로 들어가면, 여러가지 연결 방법이 나오는데 SSH 클라이언트를 이용해서 연결해보자!
키페어가 저장된 위치로 가서 터미널 실행
아래에 적힌대로 터미널에 ssh -i "키페어이름" ubuntu@퍼블릭ip주소 입력
이후 접속하겠냐고 물으면 yes 누르고, 기다리면 서버에 접속된다.
배포란 무엇인가?
쉽게 말하자면 빌드 파일을 서버에 올려서 가동 시키는 것!
위에서 EC2로 가상서버를 연결했으니, 아래에선 빌드하고 EC2 설정을 마저하도록 하자.
오른쪽 구석에 Gradle을 눌러주고(본인 프로젝트는 Gradle로 했음)
build 밑에 톱니바퀴모양 build를 더블클릭해주면 빌드가 시작된다.
cmd -> 해당 프로젝트 경로에 가서 gradlew.bat build로 jar 파일 생성 ( Test 폴더에서 Testapplication 있으면 빌드가 안됨 )
실수했다면 gradlew.bat clean으로 밀었다가 다시 시도해보자.
sudo apt-get update // 동기화 한번 해주기
sudo apt-get install openjdk-17-jdk // 자바 17 설치
java -version // 버전 확인
다음으로 FileZilla 라는 프로그램을 이용해서 EC2 인스턴스로 배포파일을 전송해보자.
https://filezilla-project.org/download.php?type=client
연결.
화면을 기준으로 왼쪽이 내 로컬 컴퓨터
오른쪽이 EC2 인스턴스 (가상 컴퓨터)이다.
오른쪽 리모트 사이트에 적당한 디렉터리를 하나 만들어주자
그리고 드래그 앤 드랍으로 옮겨준다.
ssh -i 'c:/pair/cine-pair.pem' ubuntu@??.???.???.??? // 해당 주소로 이동하기
~$ cd /home/ubuntu/cine 이동하기
git bash에서 옮긴 파일이 있는 디렉터리로 이동해서 ls 명령어를 쳐보면
다음과 같이 파일이 정상적으로 옮겨진 것을 확인할 수 있다.
그리고 다시 git bash에서
java -jar 파일이름.jar
쳐주면 익숙한 구동화면이 나오게 된다.
퍼블릭IP:8080 치고 접속을 해보자!
하지만 접속이 안된다..
이전 글에서 RDS세팅할 때, 보안그룹을 설정한 것 처럼 보안그룹으로 들어가서 다음과 같이 인바운드 규칙을 편집해주자
그 다음 접속해보면 접속이 되는것을 확인할 수 있다.
여기까지 됐으면 배포가 완료된 것이다. 하지만 문제가 있다.
git bash를 꺼버리면 서버가 다운된다.
그럼 AWS에 배포한 의미가 없지않나??
그리고 주소뒤에 붙은 8080포트도 없애고 싶다.
위에서 서버는 터미널이 닫히면, 서버가 종료된다. 그럼 AWS에 배포한 의미가 없기 때문에 원격 접속이 끊어져도 구동될 수 있도록 만들자.
nohup
사용
nohup java -jar 빌드파일.jar &
로 jar파일을 실행시킨다.
이후 터미널을 종료해도 가상서버는 잘 돌아간다.
물론, 터미널 끌 때는 exit 명령어를 이용해서 셀을 꺼줘야 함!
작동 중인 프로세스 보기
ps -ef | grep java
로 java가 들어간 프로세스를 확인한다.
서버를 아예 종료시키려면 실행되고 있는 프로세스를 kill 명령으로 죽여주면 된다.
kill -9 19221
먼저 위에서 설명했듯이 HTTP 기본 연결포트는 80번 포트이다.
즉, 80번 포트로 들어오는 연결을 8080으로 포트포워딩을 해주면
뒤에 8080포트를 적지 않아도 알아서 8080으로 연결된다는 소리다.
git bash에서 다음 명령어를 쳐주자.
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
서버를 재시작 해주고 8080을 떼주고 접속해보면 잘된다.