728x90

무슨 일이 벌어지고 있나요?

Ctrl+C로 서버를 끄면, 사실 전부 꺼지지 않는다.

내가 Ctrl+C를 누름
  → Gradle(빌드 도구)은 꺼짐
  → Java 서버는 그대로 살아있음

Java 서버가 혼자 남아서 8080 포트를 계속 붙잡고 있기 때문에
다시 실행하면 "이미 쓰고 있어요!" 오류가 난다.


왜 이렇게 되나요?

Gradle은 Java 서버를 자기 손으로 직접 만들어서 실행시킨다.
근데 Ctrl+C를 누르면 Gradle 자기 자신만 종료하고,
자기가 만든 Java 서버한테는 "너도 중단해"라고 말을 안 한다.

이걸 전문 용어로 "자식 프로세스가 고아 상태로 남는다" 고 한다.


해결 방법

즉시 해결 — 포트 강제 해제

kill -9 $(lsof -ti :8080)

한 줄로 끝난다. PID 찾고 kill 따로 안 해도 된다.


근본 해결 — 실행 스크립트 만들기

run.sh 파일을 만들어 두면, 실행할 때마다 자동으로 정리해준다.

#!/bin/bash
kill -9 $(lsof -ti :8080) 2>/dev/null
./gradlew bootRun
# 최초 1회만 실행
chmod +x run.sh

이후부터는 ./run.sh 하나로 끝.


가장 편한 해결 — IntelliJ에서 실행

IDE의 ▶ 버튼을 누르면, IDE가 Java 서버까지 직접 관리하기 때문에
중단 버튼 누르면 깔끔하게 전부 꺼진다.
터미널에서 실행하는 방식의 한계를 아예 우회한다.


한 줄 요약

Ctrl+C는 Gradle만 끄고, Java 서버는 안 끈다.
run.sh 스크립트 하나 만들어두면 번거로움이 사라진다.

 

반응형