스프링 부트 배포 스크립트 생성

기술노트

[AWS] 스프링 부트 배포 스크립트 생성

AWS에서 스프링 부트 프로젝트를 배포할 때는 프로젝트가 수정될 때마다 반복적인 작업을 수행해야 한다. 이를 자동화하여 배포 과정을 간소화할 수 있는 쉘 스크립트 작성 방법을 살펴보자.

프로젝트 배포 과정

배포 과정은 다음과 같은 단계로 진행된다.

git pull로 프로젝트의 최신 소스를 가져온다.

Gradle을 이용해 프로젝트를 빌드한다.

EC2 인스턴스 서버에서 프로젝트를 실행 및 배포한다.

이 과정 전체를 자동화하는 배포 스크립트를 작성해보자.

배포 스크립트 작성

먼저 EC2 서버에 deploy.sh 파일을 생성한 후 아래의 내용을 입력한다.

  1. !/bin/bash

REPOSITORY=/home/ec2-user/app/{프로젝트가 clone된 경로} PROJECT_NAME={프로젝트명}

cd $REPOSITORY/$PROJECT_NAME/

echo "> Git에서 최신 소스코드 Pull" git pull

echo "> 프로젝트 빌드 시작" ./gradlew build

echo "> 빌드 파일 복사를 위해 상위 디렉토리로 이동" cd $REPOSITORY

echo "> 생성된 JAR 파일 복사" cp $REPOSITORY/$PROJECT_NAME/build/libs/*.jar $REPOSITORY/

echo "> 현재 실행 중인 애플리케이션 PID 확인" CURRENT_PID=$(pgrep -f ${PROJECT_NAME}.*.jar)

echo "현재 구동 중인 애플리케이션 PID: $CURRENT_PID"

if [ -z "$CURRENT_PID" ]; then

   echo "> 실행 중인 애플리케이션이 없습니다."

else

   echo "> 기존 애플리케이션 종료 (PID: $CURRENT_PID)"
   kill -15 $CURRENT_PID
   sleep 5

fi

echo "> 새로운 애플리케이션 배포" JAR_NAME=$(ls -tr $REPOSITORY/ | grep jar | tail -n 1) echo "> 배포할 JAR 파일: $JAR_NAME"

nohup java -jar \

    -Dspring.config.location=classpath:/application.properties,classpath:/application-real.properties,/home/ec2-user/app/application-oauth.properties,/home/ec2-user/app/application-real-db.properties \
    -Dspring.profiles.active=real \
    $REPOSITORY/$JAR_NAME 2>&1 &

※ 주의사항: 사용자의 서버 환경에 따라 경로는 다를 수 있으므로 실제 환경에 맞게 수정해야 한다.

스크립트 상세 설명

REPOSITORY, PROJECT_NAME: 자주 변경될 수 있는 프로젝트 경로 및 이름을 변수로 설정하여 관리의 편의성을 높인다.

git pull: 최신 소스코드를 EC2 인스턴스 서버로 업데이트한다.

./gradlew build: Gradle을 이용해 프로젝트를 빌드하고 실행 가능한 JAR 파일을 생성한다.

생성된 JAR 파일을 EC2의 배포 경로로 복사하여 관리하기 쉽도록 구성한다.

현재 실행 중인 애플리케이션이 있는 경우, 이를 종료하고 새로운 애플리케이션을 배포한다.

nohup: 터미널 접속 종료 후에도 애플리케이션이 계속 실행될 수 있도록 유지한다.

-Dspring.config.location: 보안상의 이유로 git에 올리지 않은 외부 프로퍼티 파일의 위치를 절대 경로로 지정하여 사용한다.

프로젝트의 변경 사항이 생기면 EC2 서버에서 이 deploy.sh 스크립트를 실행하면 자동으로 최신 버전으로의 배포가 이루어진다.