본문 바로가기

728x90

Programming/Spring Boot 12

Spring Boot Actuator readiness·liveness 설정: 배포 트래픽을 안전하게 제어하는 방법

Spring Boot Actuator readiness·liveness 설정: 배포 트래픽을 안전하게 제어하는 방법메타 설명: Spring Boot Actuator의 liveness와 readiness 차이를 이해하고, Kubernetes probe와 운영 설정을 구성해 장애 전파와 배포 중 요청 실패를 줄이는 방법을 정리합니다.새 버전을 배포했는데 컨테이너가 실행되자마자 요청이 들어와 503이 발생하거나, 데이터베이스 장애 순간 모든 인스턴스가 연달아 재시작되는 일이 있습니다. 두 상황은 모두 “애플리케이션이 건강한가?”라는 질문을 하나의 체크로 처리할 때 생기기 쉽습니다.Spring Boot Actuator는 생존 여부를 판단하는 liveness와 트래픽 수신 가능 여부를 판단하는 readiness를..

Spring Boot Actuator readiness·liveness 설정: 배포 트래픽을 안전하게 제어하는 방법

Spring Boot Actuator readiness·liveness 설정: 배포 트래픽을 안전하게 제어하는 방법메타 설명: Spring Boot Actuator의 liveness와 readiness 차이를 이해하고, Kubernetes probe와 운영 설정을 구성해 장애 전파와 배포 중 요청 실패를 줄이는 방법을 정리합니다.새 버전을 배포했는데 컨테이너가 실행되자마자 요청이 들어와 503이 발생하거나, 데이터베이스 장애 순간 모든 인스턴스가 연달아 재시작되는 일이 있습니다. 두 상황은 모두 “애플리케이션이 건강한가?”라는 질문을 하나의 체크로 처리할 때 생기기 쉽습니다.Spring Boot Actuator는 생존 여부를 판단하는 liveness와 트래픽 수신 가능 여부를 판단하는 readiness를..

Spring Boot 테스트 슬라이스 선택법: @WebMvcTest·@DataJpaTest·@SpringBootTest 차이

Spring Boot 테스트 슬라이스 선택법: @WebMvcTest·@DataJpaTest·@SpringBootTest 차이메타 설명: Spring Boot 4.1에서 @WebMvcTest, @DataJpaTest, @SpringBootTest가 각각 무엇을 로딩하는지 비교하고, Controller·JPA·통합 테스트에 맞는 선택 기준과 실행 가능한 예제를 정리합니다.테스트가 느려졌다고 무조건 단위 테스트로 바꿀 필요는 없습니다. 더 흔한 원인은 Controller 하나를 검증하면서 데이터베이스와 웹 서버까지 포함한 전체 애플리케이션 컨텍스트를 매번 띄우는 것입니다.Spring Boot의 테스트 슬라이스는 검증 대상에 필요한 자동 설정만 선택해서 로딩합니다. 웹 계층은 @WebMvcTest, JPA 계층..

Spring Boot @ConfigurationProperties 검증: 잘못된 운영 설정을 시작 단계에서 차단하기

Spring Boot @ConfigurationProperties 검증: 잘못된 운영 설정을 시작 단계에서 차단하기결제 서버 주소가 비어 있거나 재시도 횟수에 음수가 들어갔는데도 애플리케이션이 정상적으로 시작된다면, 오류는 실제 요청이 들어온 뒤에야 드러납니다. 배포는 성공한 것처럼 보이지만 첫 결제에서 장애가 발생하는 구조입니다.Spring Boot의 @ConfigurationProperties와 Jakarta Validation을 함께 사용하면 잘못된 설정을 애플리케이션 시작 단계에서 차단할 수 있습니다. 운영자가 수정해야 할 값과 실패 원인도 시작 로그에서 바로 확인할 수 있습니다.@ConfigurationProperties가 필요한 이유Spring Boot 설정값은 YAML, properties ..

Spring Boot Graceful Shutdown 설정: 배포 중 요청을 안전하게 종료하는 방법

Spring Boot Graceful Shutdown 설정: 배포 중 요청을 안전하게 종료하는 방법배포 순간 일부 요청만 502나 503으로 실패한다면 종료 방식을 확인해야 합니다. Graceful Shutdown은 새 요청을 막고 처리 중인 요청에 완료 시간을 준 뒤 종료하는 방식으로, 롤링 배포의 기본 설정에 가깝습니다.즉시 종료와 정상 종료의 차이구분즉시 종료Graceful Shutdown새 요청연결이 갑자기 끊길 수 있음더 이상 받지 않음진행 중 요청중간 종료 가능제한 시간 안에서 완료리소스 정리보장하기 어려움Spring 컨텍스트 종료 과정 수행배포 중 오류502·연결 초기화 가능성 증가사용자 오류 감소종료 시간빠름설정한 유예 시간만큼 길어질 수 있음제한 시간이 끝나면 남은 작업은 종료될 수 있으..

Spring Boot LTS는 없을까? 4.1·4.0·3.5 지원 기간과 버전 선택

Spring Boot 지원 기간과 LTS 선택 전략최종 업데이트: 2026년 7월 26일Spring Boot에는 Java 21·25처럼 모든 사용자에게 붙는 공통 LTS 라벨이 없습니다. 그렇다고 장기 지원이 전혀 없는 것도 아닙니다. 공식 정책은 오픈소스, 상용 구독, 메이저의 마지막 마이너에 제공되는 엔터프라이즈 지원을 구분합니다. 핵심은 어떤 지원을 기준으로 선택하는가입니다.결론부터 정리상황권장 선택신규 프로젝트Spring Boot 4.1을 우선 검토현재 4.0을 안정적으로 운영 중최신 4.0 패치 유지 후 4.1 전환 계획현재 3.x를 운영 중먼저 최신 3.5로 정리한 뒤 4.x 마이그레이션Java 17·기존 라이브러리 제약이 큼3.5 유지 기간과 업그레이드 비용을 함께 계산장기간 같은 계열의 상..

Spring Boot JPA N+1 문제 해결하기

Spring Boot JPA N+1 문제 해결하기목록 화면 하나에 쿼리가 수십 번 나간다면JPA로 개발하다 보면 목록 화면 하나를 띄웠을 뿐인데 SQL 로그가 수십 줄씩 찍히는 경험을 하게 된다. 게시글 20개를 조회했는데 실제로 나간 쿼리는 21번, 50개면 51번. 이게 바로 **N+1 문제**다.까다로운 점은 기능 자체는 멀쩡히 동작한다는 것이다. 그래서 개발 단계에서는 그냥 넘어가기 쉽고, 트래픽이 늘어난 운영 환경에서 갑자기 DB 부하와 응답 지연으로 드러난다. 실제로 kLo(kraft.io.kr)를 운영하면서 게시글 목록 API에서 가장 먼저 손봤던 부분도 이 N+1이었다.이 글에서는 N+1이 **왜** 생기는지부터, fetch join · `@EntityGraph` · `default_bat..

Spring Boot에서 REST API 응답 구조를 일관되게 설계하는 방법

Spring Boot로 REST API를 만들다 보면 처음에는 Controller에서 데이터를 바로 반환하는 방식으로 개발하게 됩니다.@GetMapping("/users/{id}")public UserResponse getUser(@PathVariable Long id) { return userService.getUser(id);}간단한 예제에서는 이 방식도 문제가 없어 보입니다. 하지만 실제 프로젝트가 커지면 API 응답 형식이 제각각 달라지는 문제가 생깁니다.어떤 API는 데이터만 반환하고, 어떤 API는 메시지를 포함하고, 어떤 API는 에러 발생 시 전혀 다른 구조로 응답합니다. 이렇게 되면 프론트엔드에서는 응답을 처리하기 어려워지고, 백엔드에서도 유지보수가 복잡해집니다.그래서 REST AP..

Spring Boot REST API 에러 응답 설계: HTTP 상태코드부터 ProblemDetail까지

Spring Boot REST API 에러 응답 설계: HTTP 상태코드부터 ProblemDetail까지도입REST API를 처음 배울 때는 보통 URI, HTTP 메서드, JSON 응답부터 공부합니다.예를 들면 이런 식입니다.GET /users/1POST /usersPATCH /users/1DELETE /users/1여기까지는 비교적 이해하기 쉽습니다.그런데 실무에 들어가면 바로 다음 질문이 생깁니다.요청이 실패했을 때는 어떤 상태코드를 내려줘야 할까?에러 메시지는 그냥 문자열로 내려줘도 될까?프론트엔드는 어떤 기준으로 에러를 처리해야 할까?Spring Boot에서는 에러 응답을 어떻게 통일해야 할까?REST API의 품질은 성공 응답보다 실패 응답에서 더 잘 드러납니다.성공했을 때는 대부분 200 O..

Spring Boot 4.0 핵심 변경점 정리 — Java 25 지원부터 API 버저닝까지

Spring Boot 4.0 핵심 변경점 정리 — Java 25 지원부터 API 버저닝까지2025년 11월, Spring Boot 4.0이 정식 출시됐다. 단순한 마이너 업데이트가 아니라 Spring Boot의 다음 세대를 여는 메이저 릴리즈다. Spring Framework 7과 Jakarta EE 11 위에 새로 올라섰고, 코드베이스 자체가 재구성됐다. 3.x를 잘 쓰고 있다면 굳이 지금 올려야 하나 고민될 수도 있는데, 결론부터 말하면 지금 당장 옮길 필요는 없지만, 신규 프로젝트라면 4.x로 시작하는 게 합리적이다.이 글에서는 실무 관점에서 가장 중요한 변경점만 추려서 정리한다.한눈에 보는 핵심 변경점Spring Framework 7 / Jakarta EE 11 기반으로 전환Java 25에 대한 ..

728x90