[AWS] 스프링 부트 3 게시판 배포하기

목차

AWS EC2에 스프링 부트 3로 만든 게시판을 직접 배포해 본다. AWS 프리티어로 사용할 계정은 이미 있다고 가정하고, EC2 인스턴스 생성부터 탄력적 IP 고정, 원격 접속, .jar 빌드·전송, 실행까지 한 번에 정리한다. 이 글을 따라 하면 로컬에서만 돌던 스프링 부트 애플리케이션을 외부에서 접속 가능한 형태로 올릴 수 있다.

이번 실습의 환경은 다음과 같다.

  • 스프링 부트: 3.3.4
  • DB: H2
  • VM: AWS EC2
  • OS: Ubuntu 22.04 LTS

AWS EC2 인스턴스 생성

AWS의 EC2 가상머신 인스턴스를 생성한다. 프리티어에서 사용할 수 있는 OS 버전과 가상머신 사양으로 진행한다.

AWS EC2 인스턴스 시작 화면

[인스턴스 시작]을 눌러준다.

AWS EC2 인스턴스 설정 화면

OS는 Ubuntu 22.04 LTS로 설정한다.

AWS EC2 Ubuntu 22.04 AMI 선택

인스턴스 유형은 프리티어에서 사용 가능한 t2.micro로 설정한다.

AWS EC2 t2.micro 인스턴스 유형 선택
AWS EC2 키페어 생성

키페어를 생성한다. 필자는 PuTTY로 EC2에 접속할 생각이기 때문에 .ppk 형식으로 생성한다.

기본 VPC에 서브넷을 선택하고 새로운 보안 그룹을 생성한다. 보안 그룹 규칙에서 우선 현재 IP로부터 SSH 22번 포트로의 인바운드 트래픽을 허용한다.

AWS EC2 보안 그룹 SSH 인바운드 규칙 설정
AWS EC2 보안 그룹 설정

나머지 값들은 기본값으로 두고 우측 하단의 [인스턴스 시작]을 클릭한다.

AWS EC2 인스턴스 시작 완료

보안 그룹 인바운드 규칙 설정

인스턴스를 만든 뒤 보안 그룹 규칙을 편집한다.

AWS 보안 그룹 규칙 편집

AWS 보안 그룹의 인바운드 규칙을 설정한다. SSH는 EC2를 생성할 때 규칙을 만들었으니 그대로 둔다. HTTP·HTTPS와 8080 포트는 웹 접속을 테스트해야 하므로 어느 IP에서든 허용한다.

AWS 보안 그룹 인바운드 규칙 설정
  • SSH(22): 필요한 IP만 오픈
  • HTTP(80) / HTTPS(443): 모든 IP 오픈(Anywhere)
  • 8080: 모든 IP 오픈(Anywhere)

규칙을 지정했으면 우측 하단의 [규칙 저장]을 클릭한다.

탄력적 IP 할당으로 IP 고정

EC2를 생성하고 퍼블릭 IP가 있으면 AWS의 EC2에 접속해 서비스를 사용할 수 있다. 그러나 EC2를 중지하거나 재시작할 때마다 기존에 사용하던 IP가 폐기되고 새로운 IP가 할당되는 문제가 생긴다.

이렇게 되면 EC2를 재시작할 때마다 IP를 바꿔서 접속해야 한다. 이를 해결하기 위해 [탄력적 IP] 주소를 할당받아 EC2에 연결해주면, EC2를 재시작하더라도 계속 같은 IP를 사용할 수 있다.

AWS 탄력적 IP 할당
AWS 탄력적 IP 주소 설정
AWS 탄력적 IP 연결
AWS 탄력적 IP를 EC2 인스턴스에 연결
AWS 탄력적 IP 연결 완료

생성한 EC2 인스턴스에 탄력적 IP를 연결한다. 이제 EC2를 다시 시작하더라도 IP를 그대로 사용할 수 있다.

EC2에 원격 접속

PuTTY로 EC2에 원격으로 접속한다. 앞서 발급한 .ppk 키페어와 탄력적 IP를 사용한다.

PuTTY로 AWS EC2 접속 설정
PuTTY 키페어 설정
PuTTY로 AWS EC2 원격 접속 성공

접속한 뒤 사용자 home 디렉터리 밑에 sbb라는 디렉터리를 생성한다.

sudo mkdir sbb

.jar 파일 생성해서 EC2 인스턴스에 SFTP로 전송하기

.jar 파일을 생성해서 FileZilla를 통해 SFTP로 EC2 인스턴스에 전송한다. 필자는 Spring Tool Suite 4(STS4) IDE를 사용했다.

Spring Tool Suite Gradle Task로 .jar 빌드

Run → Run Configurations → Gradle Task/sbb → 우측 하단 [Run]을 클릭해 빌드한다. 코드 수정이 몇 번 있었던 관계로 sbb-0.0.3.jar 이름의 파일로 생성했다. 빌드한 .jar 파일을 FileZilla로 전송한다.

FileZilla SFTP 접속 설정
FileZilla로 .jar 파일을 EC2에 전송

.jar 파일을 EC2에 전송했다. ~/sbb 디렉터리에서 파일 목록을 확인해 보자.

ubuntu@TZif2:~/sbb$ ls -lrt
total 194636
drwxrwxr-x 2 ubuntu ubuntu     4096 Nov 5 09:31 logs
-rw-rw-r-- 1 ubuntu ubuntu 66427056 Nov 5 11:53 sbb-0.0.3.jar

실행·정지 스크립트 작성과 애플리케이션 실행

start.sh, stop.sh 파일을 만들어 .jar 파일을 실행·정지할 스크립트를 작성한다.

sudo vi start.sh

#!/bin/bash

JAR=sbb-0.0.3.jar
LOG=/dev/null
export spring_profiles_active=prod

nohup java -Dspring.profiles.active=prod -jar $JAR > $LOG 2>&1 &
sudo vi stop.sh

#!/bin/bash

SBB_PID=$(ps -ef | grep java | grep sbb | awk '{print $2}')
if [ -z "$SBB_PID" ];
then
  echo "SBB is not running"
else
  kill -9 $SBB_PID
  echo "SBB stopped"
fi

스크립트를 실행해 애플리케이션을 기동한다.

./start.sh
AWS에서 8080 포트로 스프링 부트 게시판 배포 성공

정리 및 다음 단계

여기까지 AWS EC2 인스턴스 생성 → 탄력적 IP 고정 → 보안 그룹 설정 → 원격 접속 → .jar 빌드·전송 → 실행 스크립트로 게시판을 배포했다. 이제 http://[탄력적 IP]:8080으로 외부에서 게시판에 접속할 수 있다.

다만 지금은 8080 포트를 붙여야만 접속되는 불완전한 형태이고, DB도 운영에는 부족한 H2를 쓰고 있다. 이어지는 글에서 이를 개선한다.

💬 댓글 0

💬 댓글을 남기려면?
첫 댓글을 남겨보세요 ✨

이 콘텐츠가 도움이 됐나요?

누스쿨 커뮤니티에서 더 많은 커리어 전략을 나눠요