무중단 배포를 진행하는 과정에서 동일한 Java 애플리케이션 프로세스가 두 개 떠서 충돌하는 경우가 발생할 수 있습니다. 이러한 문제를 해결하기 위해 불필요한 프로세스를 종료하는 방법에 대해 알아보겠습니다.
🛑 문제 상황
무중단 배포 시 새로운 애플리케이션 인스턴스를 실행하다가 기존 인스턴스가 종료되지 않아 두 개의 프로세스가 동시에 떠 있는 상황이 발생할 수 있습니다. 이러한 경우 서비스 장애를 유발할 수 있으므로 빠르게 하나의 프로세스를 종료해야 합니다.
🔍 프로세스 확인하기
먼저 현재 실행 중인 Java 프로세스를 확인합니다.
ps -ef | grep java
결과 예시
user 12345 1 0 15:10 pts/0 00:01:23 java -jar myapp-1.0.jar
user 12346 1 0 15:12 pts/0 00:01:10 java -jar myapp-1.0.jar
위와 같이 동일한 애플리케이션이 두 번 실행된 경우를 확인할 수 있습니다.
💡 PID(Personal IDentification) 확인하기
프로세스를 구별하기 위해 PID를 확인합니다. PID는 프로세스의 고유 ID로 각 줄의 두 번째 열에 표시됩니다.
PID 추출하기
ps -ef | grep java | grep myapp | awk '{print $2}'
💀 프로세스 종료하기 (Kill 명령)
아래와 같이 kill 명령어를 사용하여 하나의 프로세스를 종료합니다.
kill 12345
강제로 종료할 경우
때때로 정상 종료되지 않는 경우가 있으므로, 강제 종료를 사용할 수 있습니다.
kill -9 12345
모든 동일 프로세스 종료
모든 중복 프로세스를 한 번에 종료하고 싶다면 다음 명령어를 사용합니다.
ps -ef | grep java | grep myapp | awk '{print $2}' | xargs kill -9
🚀 프로세스 종료 확인
다시 프로세스를 확인하여 종료 여부를 체크합니다.
ps -ef | grep java
정상적으로 하나의 프로세스만 남아 있다면 문제 해결 완료입니다.
🛑 안전한 종료 방법 (Spring Boot Shutdown Endpoint 활용)
Spring Boot 애플리케이션에서는 Actuator를 활용하여 안전하게 애플리케이션을 종료할 수 있습니다. 아래와 같이 설정하여 무중단 배포 중 충돌 문제를 줄일 수 있습니다.
1. Actuator 의존성 추가 (build.gradle)
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-actuator'
}
2. application.yml 설정
management:
endpoints:
web:
exposure:
include: shutdown
3. 안전한 종료 명령어
애플리케이션이 실행 중인 서버에서 다음 명령어로 안전하게 종료할 수 있습니다.
curl -X POST http://localhost:8080/actuator/shutdown
🔒 보안 주의: Actuator를 외부에서 접근 가능하도록 설정하는 경우, IP 제한이나 인증을 반드시 설정해야 합니다.
4. 종료 확인
ps -ef | grep java
정상적으로 프로세스가 종료되었는지 다시 한 번 확인합니다.
'삼분공부 > Server' 카테고리의 다른 글
[Linux] 서버 로그 파일 다운로드하는 가장 간단한 방법: scp 명령어 사용법 (0) | 2025.04.09 |
---|---|
GitLab CI/CD를 이용한 자동 배포 설정 가이드 (0) | 2025.03.31 |