네이버클라우드아카데미 Literacy 1기

[NCloud 1기] PuTTY를 끄고 나니 NCP 서버의 Spring Boot가 죽어버린 문제

hwangsoojin 2025. 11. 17. 17:13

1. 상황 설명

Naver Cloud Platform(NCP)에 공인 IP(49.50.136.221) 를 가진 Rocky Linux 서버를 하나 띄웠다.
이 서버에 간단한 Spring Boot 애플리케이션을 올려서 테스트하는 것이 목표였다.

진행한 작업은 다음과 같다.

 

1. 로컬에서 아래와 같은 간단한 Spring Boot 프로젝트 작성

     /hello  로 GET 요청을 보내면  "Hello from NCP server!"  를 반환하는 코드
2.  ./gradlew bootJar  로 빌드 →  demo-0.0.1-SNAPSHOT.jar  생성
3. WinSCP 로 NCP 서버  /root  디렉터리에 JAR 파일 업로드
4. PuTTY 로 SSH 접속 후 Java 설치

sudo dnf install -y java-17-openjdk
java -version

 

5. 테스트로 애플리케이션 실행

cd /root
java -jar demo-0.0.1-SNAPSHOT.jar

 

6. NCP 콘솔의 ACG에서 8080 포트 인바운드 허용 추가
7. 브라우저에서

http://49.50.136.221:8080/hello

    를호출했더니 정상적으로  "Hello from NCP server!"  가 응답되는 것까지 확인

 

여기까지는 문제 없이 동작했다.


2. 문제 발생: PuTTY를 끄고 다시 접속하니 접속 불가

테스트가 잘 되는 것을 확인하고, PuTTY 창을 그냥 닫았다.
그 후 시간이 지난 뒤 다시 브라우저에서 같은 주소로 접근해보니:

“사이트에 연결할 수 없음 (ERR_CONNECTION_RESET)”

이런 에러 화면이 뜨면서 더 이상 응답이 오지 않았다.

  • 브라우저 주소:  http://49.50.136.221:8080/hello 
  • 증상: 연결 재설정 / 응답 없음

처음에는

  • 서버가 죽었나?
  • NCP 콘솔에서 서버 정지를 누른 적도 없는데 왜 안 되지?

라는 의문이 들었다.


3. 원인 분석

다시 PuTTY로 서버에 접속해서 애플리케이션이 돌아가고 있는지 확인해 보았다.

ps -ef | grep jar
 

출력 결과는 다음과 같았다.

root  46662  46632  0 16:37 pts/0  00:00:00 grep --color=auto jar
 
  •  java -jar demo-0.0.1-SNAPSHOT.jar  형태의 프로세스는 전혀 보이지 않고
  •  grep jar  자기 자신만 출력되는 상태

즉, Spring Boot 애플리케이션이 아예 실행되고 있지 않았다.

여기서 알게 된 사실:

 java -jar ...  를 PuTTY에서 실행하면
해당 프로세스는 그 터미널 세션에 매달린 상태(foreground)로 실행된다.
PuTTY 창을 닫으면, 그 세션에 연결된 자바 프로세스도 함께 종료된다.

 

즉,

  • NCP 서버(가상머신)는 계속 켜져 있지만,
  • 그 안에서 돌아가던 Spring Boot 서버 프로세스는 터미널 종료와 함께 죽어버린 상태였다.

그래서 8080 포트를 열어 두었더라도 요청을 받을 애플리케이션이 없으니
브라우저에서 접속이 실패한 것이다.


4. 해결 과정

4-1. JAR 파일 위치 확인

cd /root
ls

업로드해 둔  demo-0.0.1-SNAPSHOT.jar  가 존재하는 것을 확인했다.

4-2.  nohup  을 이용한 백그라운드 실행

터미널을 꺼도 Spring Boot가 계속 돌아가도록 하기 위해
다음과 같이 애플리케이션을 다시 실행했다.

cd /root
nohup java -jar demo-0.0.1-SNAPSHOT.jar > app.log 2>&1 &

 

각 요소의 의미는 다음과 같다.

  •  nohup  : 터미널이 끊겨도 프로세스를 종료하지 않음 (NO Hang UP)
  •  java -jar ...  : JAR 실행
  •  > app.log  : 표준 출력 로그를 app.log 파일에 저장
  •  2>&1  : 에러 로그도 같은 파일로 합치기
  •  &  : 명령을 백그라운드에서 실행

실행 후 다시 프로세스를 확인:

ps -ef | grep demo

 

예상대로,

root  47000     1  0 16:40 ?  00:00:05 java -jar demo-0.0.1-SNAPSHOT.jar
root  47050 46632  0 16:41 pts/0  00:00:00 grep demo

처럼 실제 java -jar 프로세스가 떠 있는 것을 확인했다.

4-3. 브라우저에서 재확인

다시 브라우저에서 아래 주소로 접근:

http://49.50.136.221:8080/hello

→  "Hello from NCP server!"  응답이 정상적으로 돌아왔다.

 

PuTTY 세션을 종료한 뒤에도
다시 접속해 보니 이번에는 서버가 계속 잘 동작했다.


5. 정리 & 배운 점

  1.  java -jar  를 터미널에서 그냥 실행하면, 터미널을 닫는 순간 프로세스도 함께 종료된다.
    • 그래서 PuTTY를 닫고 나니 Spring Boot 서버가 같이 죽어버렸던 것.
  2. 서버(가상머신) 자체는 켜져 있어도, 애플리케이션 프로세스가 살아 있어야 포트가 응답한다.
    •  ps -ef | grep java  로 항상 프로세스 상태를 확인하는 습관이 필요하다.
  3. 실제 서버에서는  nohup  또는 systemd 서비스 등을 사용해 백그라운드 실행으로 올리는 것이 필수
    • 이번에는  nohup java -jar ... > app.log 2>&1 &  를 사용해 해결

 

이번 경험을 통해
“클라우드 서버에 백엔드 올렸는데, PuTTY 끄고 나니 안 된다” 라는 흔한 상황의 원인과 해결법을 몸으로 익혔다.
앞으로는 배포할 때 처음부터 nohup 또는 서비스 등록으로 실행하는 습관을 들일 계획이다.