프로젝트를 배포할 땐 CI/CD 환경을 구성해서 배포하는 편이지만 간단하고 빠르게 배포를 하고 싶을 때는 jar 파일을 직접 올려 배포하기도 한다.
EC2와 RDS 인스턴스를 설정하고 스프링부트 서버를 배포해보자.
RDS 보안그룹의 인바운드 규칙을 편집하여 EC2 또는 외부에서 접근 가능하도록 한다.
MYSQL/Auora
0.0.0.0/0
RDS 환경에 맞는 파라미터를 설정하여 타임존, 문자 인코딩, 데이터 정렬 기준 등에 대한 설정을 할 수 있다. 아주 간단한 프로젝트 환경이라면 꼭 필요하진 않다.
time_zone
: Asia/Seoul
character_set_*
: utf8mb4
collation_*
: utf8mb4_general_ci
🔗 Spring Boot의 설정 파일에 DB URL 설정
url = jdbc:mysql://[RDS 엔드포인트]:3306/[Database]
인바운드 규칙을 추가하여 접근 허용
로컬 컴퓨터(mac) 터미널에서 접근 가능하다.
# 1. 키페어 권한 변경
sudo chmod 600 [key.pem]
# 2. EC2 접속
ssh -i key.pem [ubuntu]@[ec2-public-ip]
EC2 인스턴스에서 "연결"을 선택하여 웹 콘솔로도 접속할 수 있다.
스프링부트 애플리케이션을 빌드하여 JAR 파일을 생성 한뒤 EC2에 전송해서 실행시키면 배포가 완료된다.
build > libs
폴더에 jar 파일이 생성된다.scp -i key.pem app.jar ubuntu@ec2-public-ip:/home/ubuntu/
sudo apt-get update
sudo apt install openjdk-17-jdk
java -jar [app.jar]
# 백그라운드 실행
nohup java -jar [app.jar] &
# 실행 종료
ps -ef | grep -java
kill -9 [pid]
이렇게 배포 한뒤 http://[public ip]:8080/
으로 접속하면 확인할 수 있다.
설정 파일의 민감 정보를 환경 변수로 관리하고 있다면 EC2 터미널에서 직접 환경 변수를 설정하여 사용할 수 있다.
# .bashrc 파일에 추가하여 환경 변수 영구 설정
sudo echo 'export EX_VAR=value' >> ~/.bashrc
source ~./bashrc
jar 파일을 실행시킨 뒤 배포하여 웹 서비스에 접속하려면 주소 뒤에 8080 포트 번호를 항상 붙여주어야 한다. HTTP 요청에서는 80 포트가 기본으로 사용되므로 80 포트로 전달되는 요청을 자동으로 8080으로 전달하는 포트포워딩(port forwarding)을 설정하면 포트 번호를 입력하지 않아도 된다.
EC2 터미널에서 포트포워딩 설정
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
iptables
: 리눅스의 네트워크 관리 도구-t nat
: nat 주소 변환 테이블-A PREOUTING
: PREOUTING 체인에 규칙 추가-i eth0
: eth0 네트워크 인터페이스--dport
: 패킷의 목적지 포트--to--port
: 리다이렉션할 포트⚠️ 네트워크 인터페이스가 다를 경우 확인 후 수정
# 네트워크 인터페이스 확인
ip -a
포트포워딩 후 http://[public ip]
로 접속하여 확인