자체 프로젝트를 배포할 때 nohup 명령어를 이용하여 백그라운드에서 스프링 부트를 실행했었다. nohup으로 배포한 서버는 프로세스에서 직접 관리를 해야 하기도 하고, 시간이 조금 지나면 자동으로 프로세스가 종료되어 매번 다시 켜줬어야 했다. 그래서 프로세스가 유지되고 쉽게 관리할 수 있는 PM2를 사용해 배포하기로 했다.
현재 내 인스턴스에는 Node Package Manager가 설치되어 있지 않기 때문에, Nodejs를 먼저 설치한다.
터미널에서 Node를 설치하기 위해 AWS 공식 홈페이지를 참고했다.
터미널에 다음과 같이 입력한다.
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
. ~/.nvm/nvm.sh
nvm install --lts
잘 설치가 되었으면 버전이 잡힌다.
npm을 사용할 수 있게 되었으니, PM2를 설치해보자.
모든 프로젝트에서 사용할 것이기 때문에 글로벌하게 설치한다.
npm install -g pm2
설치가 완료되고, 터미널에 pm2를 입력하면 다음과 같이 뜬다.
잘 설치가 되었으면, PM2로 Spring boot를 실행해보자.
실행 전에, Spring boot가 jar 파일로 build되어 있지 않은 경우 프로젝트 루트 디렉토리에서 다음과 같은 명령어를 입력해준다(Gradle 기준, Maven은 몰라융).
./gradlew build
빌드가 성공한 경우, {root_directory}/build/libs 에 파일이 생성된다.
다음으로, Pm2로 실행시키기 위해 [filename].json 파일을 생성하고 실행 스크립트를 작성한다. pm2 공식 홈페이지를 참고했다.
// server.json
{
"apps" : [{
name : "[이름]",
script : "java",
args : [
"-jar",
"[libs 디렉토리]/[스냅샷 파일이름].jar"
]
}]
}
json파일 작성 이후, pm2를 실행시켜보자.
pm2 start server.json
구동이 성공적으로 되면 pm2에서 관리하고 있는 프로세스를 보여준다. 이후 포스트맨으로 요청을 날려서 확인하면 된다.
끝!
틀린 부분이 있다면 말씀해주세요. 감사합니다.