본문 바로가기
Develop

[CI/CD] Spring Boot .jar 서버 배포 스크립트 개선

by 너드나무 2024. 7. 25.
728x90

서론

기존 Spring Boot 서버를 배포하는 부분에서 서버 종료, 시작을 일일히 제어해야하는 불편함이 존재하였다.

간단한 쉘 스크립트 개발을 통해 서버를 종료하고 시작하는 기능을 탑재하여 수작업에서 오는 휴먼에러를 최소화하고자 한다.

기존 배포 정책

  1. ps -ef | grep java : 활성화된 프로세스 중 java를 활용하는 Spring Boot 서버의 PID를 찾기 위한 명령어
  2. kill or pkill {PID} : 1번에서 확인한 Spring Boot의 PID를 종료하는 명령어
    1. 서버 종료가 확정되었다고 할 수 없는 명령어
    2. 프로세스가 종료되지 않은 상태에서 서버 재시작 시
      1. 서버 재시작 프로세스 : 동일 포트 사용 충돌로 중지
      2. 기존 서버 프로세스 : kill 명령어를 통해 내부 쓰레드 정리 후 중지
      3. 결론 : 서버 운영이 중단될 수 있는 휴먼에러 발생 가능
  3. ps -ef | grep java : 실제 서버가 종료되었는지 확인하는 반복 명령어
  4. nohup java ... -jar server.jar & : 서버를 실행하는 명령어

개선 배포 정책

  • 중지 스크립트(stop.sh)
    • pgrep -f $JAR_FILE_NAME : 서버 시작에 사용한 jar 파일명을 기준으로 PID를 검색하는 명령어
    • kill -9 $PID : 프로세스 kill 명령어 옵션으로 강제종료를 수행하는 명령어
#!/bin/bash

JAR_FILE_NAME=server.jar

# Get the PID from the file
PID=$(pgrep -f $JAR_FILE_NAME)

if [ -z "$PID" ]; then
    echo "> 현재구동중인 애플리케이션이 없으므로 종료하지 않습니다."
else
    echo "> kill -9 $PID"
    kill -9 $PID
    echo "> 실행중인 애플리케이션을 종료하고 있습니다..."
    sleep 10
fi
  • 시작 스크립트(start.sh)
    • nohup ~ : Spring Boot jar 실행 명령어
    • $! : 실행한 프로세스의 PID를 콘솔로 보여주는 변수
#!/bin/bash

# Start the application
nohup java \
    -Dspring.profiles.active=dev \
    -jar server.jar &

echo "> Application started with PID $!"
  • 재시작 스크립트(restart.sh)
#!/bin/bash

# Stop the application
./stop.sh

# Start the application
./start.sh
728x90
반응형