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. 정리 & 배운 점
- java -jar 를 터미널에서 그냥 실행하면, 터미널을 닫는 순간 프로세스도 함께 종료된다.
- 그래서 PuTTY를 닫고 나니 Spring Boot 서버가 같이 죽어버렸던 것.
- 서버(가상머신) 자체는 켜져 있어도, 애플리케이션 프로세스가 살아 있어야 포트가 응답한다.
- ps -ef | grep java 로 항상 프로세스 상태를 확인하는 습관이 필요하다.
- 실제 서버에서는 nohup 또는 systemd 서비스 등을 사용해 백그라운드 실행으로 올리는 것이 필수
- 이번에는 nohup java -jar ... > app.log 2>&1 & 를 사용해 해결
이번 경험을 통해
“클라우드 서버에 백엔드 올렸는데, PuTTY 끄고 나니 안 된다” 라는 흔한 상황의 원인과 해결법을 몸으로 익혔다.
앞으로는 배포할 때 처음부터 nohup 또는 서비스 등록으로 실행하는 습관을 들일 계획이다.
'네이버클라우드아카데미 Literacy 1기' 카테고리의 다른 글
| [NCloud 1기] 3주차 회고 (0) | 2025.11.18 |
|---|---|
| [NCloud 1기] Naver Cloud Platform으로 3-Tier 아키텍처 구성하기 (0) | 2025.11.18 |
| [NCloud 1기] 클라우드 서버에 Spring Boot 백엔드 서버 올리기 (with PuTTY & WinSCP & SSL VPN) (0) | 2025.11.17 |
| [NCloud 1기] 2주차 회고 (0) | 2025.11.15 |
| [NCloud 1기] 1주차 회고 (0) | 2025.11.15 |