AWS EC2로 jar 배포하기

김지현·2025년 2월 10일
0
post-thumbnail

프로젝트를 배포할 땐 CI/CD 환경을 구성해서 배포하는 편이지만 간단하고 빠르게 배포를 하고 싶을 때는 jar 파일을 직접 올려 배포하기도 한다.
EC2와 RDS 인스턴스를 설정하고 스프링부트 서버를 배포해보자.

RDS

RDS 인스턴스 생성

  1. AWS RDS 대시보드에서 "데이터베이스 생성" 클릭
  2. 데이터베이스 엔진 선택 (EX. MySQL)
  3. 템플릿 - 프리티어 선택
  4. DB 인스턴스 식별자, 마스터 사용자 이름, 암호 설정
  5. 퍼블릭 엑세스 설정
  • 허용시 : 외부(로컬 컴퓨터, EC2 등)에서 접속 가능 / 다만, AWS 정책 변경으로 프리티어에서도 과금됨
  • 비허용시 : EC2에서 RDS의 프라이빗 엔드포인트로 접속
  1. VPC 보안 그룹 생성
  2. 추가 구성 - 초기 데이터베이스 설정 (필요시)

보안 그룹 설정

RDS 보안그룹의 인바운드 규칙을 편집하여 EC2 또는 외부에서 접근 가능하도록 한다.

  • 유형 : MYSQL/Auora
  • 포트 : 3306
  • 소스(퍼블릭) : 0.0.0.0/0
  • 소스(프라이빗) : (EX. EC2 보안그룹으로 제한)
    ⚠️ 프라이빗 접근으로 설정했다면 EC2와 RDS를 같은 VPC&서브넷에 배치하면 된다.

파라미터 그룹 설정

RDS 환경에 맞는 파라미터를 설정하여 타임존, 문자 인코딩, 데이터 정렬 기준 등에 대한 설정을 할 수 있다. 아주 간단한 프로젝트 환경이라면 꼭 필요하진 않다.

  1. RDS 파라미터 그룹 생성 및 세부 정보 설정
  2. 파라미터 편집에서 세부 설정 진행
  • time_zone : Asia/Seoul
  • character_set_* : utf8mb4
  • collation_* : utf8mb4_general_ci
  1. RDS 데이터베이스 옵션에서 파라미터 그룹 선택

🔗 Spring Boot의 설정 파일에 DB URL 설정

url = jdbc:mysql://[RDS 엔드포인트]:3306/[Database]

EC2

EC2 인스턴스 생성

  1. AWS EC2 대시보드에서 "인스턴스 시작" 클릭
  2. AMI 선택 (이하 Ubuntu 선택 기준)
  3. 인스턴스 유형 선택 (프리티어 - t2.micro)
  4. 키 페어 발급 후 저장
  5. 보안 그룹 생성

보안 그룹 설정

인바운드 규칙을 추가하여 접근 허용

  • 포트 22 : SSH
  • 포트 80 : HTTP
  • 포트 443 : HTTPS
  • 포트 8080 : Spring Boot

SSH로 EC2 접속

로컬 컴퓨터(mac) 터미널에서 접근 가능하다.

# 1. 키페어 권한 변경
sudo chmod 600 [key.pem]

# 2. EC2 접속
ssh -i key.pem [ubuntu]@[ec2-public-ip]

EC2 인스턴스에서 "연결"을 선택하여 웹 콘솔로도 접속할 수 있다.

Spring Boot

스프링부트 애플리케이션을 빌드하여 JAR 파일을 생성 한뒤 EC2에 전송해서 실행시키면 배포가 완료된다.

  1. 인텔리제이 Gradle 탭의 bootjar를 클릭하면 build > libs 폴더에 jar 파일이 생성된다.
  2. 로컬(mac)에서 EC2로 jar 파일을 전송한다.
scp -i key.pem app.jar ubuntu@ec2-public-ip:/home/ubuntu/
  1. EC2에 JDK를 설치한다.
sudo apt-get update
sudo apt install openjdk-17-jdk
  1. jar 파일을 실행시킨다.
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] 로 접속하여 확인

0개의 댓글

관련 채용 정보