전체 글 (15) 썸네일형 리스트형 Spring 애플리케이션에서 Graceful Shutdown Graceful Shutdown이란?Graceful Shutdown은 시스템이나 애플리케이션을 갑작스럽지 않고, 예측 가능한 방식으로 안전하게 종료시키는 절차를 말합니다.즉, 단순히 프로세스를 종료하는 것이 아니라, 현재 처리 중인 작업을 모두 마무리하고, 새로운 작업은 받지 않으며, 자원을 정리한 뒤 종료하는 일련의 흐름과 전략입니다.Graceful Shutdown은 다음과 같은 상황에서 데이터 손실, 장애, 사용자 불편을 방지하기 위해 필요합니다.배포 중 서버 종료: 요청이 처리 도중 끊기면서 HTTP 5xx 오류가 발생하고, 사용자 경험이 저하됩니다.메시지 큐 소비 중 종료: 메시지가 중복 처리되거나 유실되어 데이터 불일치가 발생할 수 있습니다.DB 트랜잭션 중단: 롤백이나 lock 미해제가 발생해.. MySQL 쿼리 성능 개선을 위한 인덱스 실험과 커버링 인덱스 적용 쿼리 튜닝이 필요했던 이유운영 중인 서비스에서 사용자 운동 데이터를 기반으로 한 통계 쿼리의 응답 속도가 점점 느려지기 시작했습니다.이 쿼리는 매일 사용자들이 기록한 운동 내역 중 특정 부위에 대해가장 많이 수행된 운동 상위 5개를 추출하는 기능을 담당하고 있었습니다.처음에는 데이터 양이 적어 큰 문제가 없었지만, 데이터가 수십만 건을 넘어 100만 건에 이르자 사용자 화면에서 쿼리 실행 시간이 0.8초 이상으로 증가하며 체감 성능 저하가 눈에 띄게 발생했습니다.당시 사용 중인 쿼리는 다음과 같았습니다: SELECT e.exercise_part AS part, e.id AS exercise_id, e.name AS exercis.. JVM Heap, GC 그리고 OutOfMemoryError 최근 프로젝트에서 외부 API로부터 수십만 건에 달하는 기업 정보를 수집해 저장하는 작업을 진행하던 중, 예상치 못한 OutOfMemoryError가 발생했습니다.코드상에는 명백한 오류가 없어 보였고, 반복 실행 때마다 프로그램은 일정량의 데이터를 처리한 후 멈춰버렸습니다.처음에는 단순히 메모리가 부족한가?라고 생각했지만, Heap Dump를 분석해 본 결과, GC가 객체를 제때 수집하지 못한 채 Heap 영역에 과도한 데이터가 적재된 상태였고, 이는 곧바로 JVM 메모리 한계에 도달하게 만들었습니다.이 글에서는 제가 경험한 OOM 이슈의 발생 원인부터, JVM 메모리 구조와 GC 작동 원리, 그리고 문제를 해결한 코드 리팩터링 과정까지 전체 흐름을 정리해보려 합니다.JVM Heap 영역이란?Java 애.. 이전 1 2 3 4 5 다음