-
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 파일을 백그라운드에서 실행하는 방법과, 이 때 로그를 표준입출력이 아닌 파일에 출력하는 방법, 그리고 마지막으로 실행한 서버를 종료하는 방법을 알아보았습니다.

'백엔드 > AWS' 카테고리의 다른 글
Amazon EC2 프리티어 최초 세팅하기 #2 MySQL, Git 설치 및 백엔드 구동 (0) 2025.01.02 Amazon EC2 프리티어 최초 세팅하기 #1 인스턴스 생성부터 접속까지 (0) 2025.01.01