[AWS] 4. 백그라운드 배포

윤설안's avatar
Jul 03, 2025
[AWS] 4. 백그라운드 배포
💡
이전 배포에서는 터미널 세션과 연결을 하였기 때문에 터미널을 끄게 되면 서버도 같이 꺼지게 된다. 이번에는 백그라운드에 배포를 하여, 터미널을 꺼도 서버가 꺼지지 않게 배포 해보겠다.

1️⃣ plain.jar 파일 미생성 코드

프로젝트를 build할 때 기본적으로 두 개의 JAR 파일이 생성됩니다.
  • [프로젝트명].jar: 실행에 필요한 모든 라이브러리를 포함한 실행 가능한 JAR 파일
  • [프로젝트명]-plain.jar: 라이브러리를 포함하지 않은 JAR 파일 (실행 불가)
실제 배포에는 라이브러리가 포함된 기본 JAR 파일만 사용하므로, -plain.jar 파일은 불필요합니다. 또한 JAR 파일을 실행할 때: java -jar *.jar 처럼 *를 사용하면 파일에 있는 모든 JAR 파일을 실행 대상으로 삼기 때문에, -plain.jar 파일이 존재할 경우 실행 오류가 발생할 수 있습니다. 따라서 plain.jar 파일 생성을 방지하는 것이 좋습니다.

생성 방지 방법

build.gradle 파일
jar { enabled = false }

2️⃣ 백그라운드 서버 배포 방법

리눅스에서 Spring Boot 같은 애플리케이션을 실행할 때는 다음 명령어를 사용합니다:
nohup java -jar app.jar
  • nohup: 터미널이 종료되어도 프로세스가 계속 실행되도록 함
  • 이 명령어는 터미널을 차지한 채 실행되므로, 다른 명령어를 입력할 수 없습니다
  • 실행을 중단하거나 터미널을 강제로 닫으면 로그 출력이 불편해지고, 제어가 어려워집니다

터미널도 자유롭게 쓰고 싶다면?

& 기호를 함께 사용하면 백그라운드에서 실행됩니다:
nohup java -jar app.jar &
  • &: 명령어를 백그라운드로 실행하여 터미널을 즉시 반환함
  • nohup: 터미널을 닫아도 서버가 계속 실행되도록 보장

3️⃣ 로그 확인

서버가 백그라운드로 실행되면 터미널에서는 로그를 볼 수 없습니다. 이때 nohup 명령어는 표준 출력(정상)과 에러 출력(에러)을 nohup.out 파일에 자동으로 저장합니다. nohup으로 실행 하였을 때 nohup.out 파일이 생긴 것을 볼 수 있다.
notion image
cat nohup.out 명령어를 입력하면 로그 파일의 내용을 확인할 수 있습니다.
notion image
또는 로그를 실시간으로 보고 싶다면 다음 명령어를 사용할 수 있습니다.
tail -f nohup.out
tail -f는 파일의 마지막 내용을 계속해서 모니터링하며 보여줍니다. 서버 로그가 실시간으로 추가될 때 유용하게 사용됩니다.

4️⃣ 로그 파일 변경 후 실행

nohup을 사용하면 기본적으로 로그가 nohup.out 파일에 저장됩니다. 하지만 로그를 다른 파일에 저장하고 싶을 경우, 오른쪽 꺾쇠(>)를 사용하여 출력 파일을 지정할 수 있습니다.
nohup java -jar *.jar > mylog.out &
위와 같이 실행하면 로그가 mylog.out 파일에 저장되며, 해당 파일은 현재 디렉토리에 생성됩니다.
notion image
notion image
참고: 기존에 mylog.out 파일이 있다면 덮어쓰기되며, 내용을 이어서 저장하고 싶다면 >>를 사용하세요
nohup java -jar *.jar >> mylog.out &

5️⃣ 표준 출력과 에러 출력 분리

서버가 잘 동작할 때는 표준 출력만 확인하면 되고, 에러가 발생했을 때는 에러 출력만 보면 편리하다. 그래서 표준 출력(stdout)과 에러 출력(stderr)을 분리해서 관리하는 것이 일반적이다.
여기서 ‘에러 출력’은 터미널에 표시되는 에러 메시지를 의미하며,
서버 애플리케이션 내부에서 출력하는 에러 로그는 보통 표준 출력으로 처리된다.
사용하는 방법은 아래와 같다
nohup java -jar *.jar 1>log.out 2>err.out &
  • 1> : 표준 출력을 log.out 파일로 보낸다.
  • 2> : 에러 출력을 err.out 파일로 보낸다.
로그를 분리하면 좋은 점은 아래와 같다.
  • 정상적인 로그와 에러 로그가 분리되어 관리가 편리하다.
  • 에러 발생 시 에러 로그만 집중해서 확인할 수 있다.
  • 로그 파일이 커질 때도 필요한 파일만 빠르게 점검 가능하다.
 
Share article

An's Blog