ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Amazon EC2 백엔드 구축하기 #3 Springboot Server 무중단 실행 (백그라운드 실행) 하기
    백엔드/AWS 2025. 1. 14. 22:21

     

    일단 돌려보자!

     

    2편까지 진행하여, Amazon EC2 프리티어 서버 세팅을 완료하였고, git을 이용하여 clone, build까지 완료하였습니다. 그럼 build한 산출물을 실행시키려면 어떻게 해야할까요? command line에서 일반적으로 *.jar 파일을 실행하는 방법은 다음과 같습니다.

    java -jar %산출물이름%.jar

     

    위의 방법은 command line에서 직접 서버를 실행하는 방법으로, 이 방법을 쓸 경우 ssh client가 종료되면 서버도 함께 종료됩니다. 항상 ssh를 접속시켜둘 순 없기 때문에, 우리는 백그라운드에서 서버를 실행시켜야 합니다.

     

    백그라운드에서 Springboot Server 실행하기
    nohup java -jar build/libs/%생성된산출물%.jar &

     

    nohup 명령어는 no hang up (끊지마세요)의 약자입니다. ssh 세션을 종료한다고 하여도, 지금 실행시킨 프로그램이 종료되지 않는다는 뜻의 명령어입니다. 단순히 실행시킬 명령어 앞에 nohup을 붙여주면, 해당 프로그램이 백그라운드(&)로 실행됩니다.

     

    우리는 서버를 실행시키는 목적으로 nohup을 사용할 것이기 때문에, 표준 입출력을 '로그 파일'로 저장할 필요가 있습니다. '>'라는 리다이렉션 기호를 통해서, 표준입출력을 특정 파일에 출력되게 지시할 수 있습니다. 그래서 '> app.log'를 붙여줍니다.

     

    Log 쓰는 방법

     

    프로그램을 실행하면서 출력되는 것에는 크게 표준출력과 표준에러가 있습니다. 명령어상으로, 표준출력은 1, 표준 에러는 2 값으로 대치하여 사용합니다. 표준출력과 에러를 각각 다른 파일에 출력하고 싶은 경우는 다음과 같이 사용할 수 있습니다.

    nohup java -jar build/libs/%산출물이름%.jar 1 > stdout.out 2 > stderr.out &

     

    위 명령어에서 1(표준출력)은 stdout.out 파일에 출력한다는 뜻이며, 2(표준에러)는 stderr.out 파일에 출력한다는 의미입니다. 같은 파일에 쓰고 싶은 경우에는 아래와 같이 사용할 수 있습니다.

    nohup java -jar build/libs/%생성된산출물%.jar > app.log 2>&1 &

     

    프로세스를 종료하는 방법

     

    백그라운드로 서버를 실행한 다음, 종료하기 위해서는 프로세스 id를 알아야 합니다. 이 때 아래와 같은 grep 명령어를 통해서 특정 프로그램이 실행된 프로세스의 id를 얻어낼 수 있습니다.

    ps -ef | grep %산출물이름%.jar

     

    우리가 사용하는 것은 springboot이므로, 기본포트인 8080 포트를 이용해서 아래와 같은 명령어를 통해 해당 포트를 listen 중인 프로세스의 id를 얻어내는 방법도 있습니다.

    sudo lsof -i :8080

     

    두 개 명령어 중 하나를 실행하여 pid를 얻어낸 다음에는, kill 명령어를 통해 프로세스를 강제종료할 수 있습니다.

    sudo kill -9 %프로세스id%

     

     

    오늘은 springboot server의 산출물인 *.jar 파일을 백그라운드에서 실행하는 방법과, 이 때 로그를 표준입출력이 아닌 파일에 출력하는 방법, 그리고 마지막으로 실행한 서버를 종료하는 방법을 알아보았습니다.

     

Designed by Tistory.