Maru@maru

Dev Hub

Spring Boot 3.4 핵심 변경점: 구조화된 로그부터 가상 스레드까지

서버 애플리케이션을 운영 환경에 배포할 때 로그 수집과 컨테이너 환경 설정은 늘 손이 많이 가는 작업입니다. Spring Boot 3.4는 외부 라이브러리 추가 없이 기본 설정 파일만으로 JSON 기반 구조화된 로그를 생성하도록 지원하고, 테스트와 설정 프로퍼티 검증 방식을 더 명확하게 다듬었습니다. 신규 프로젝트나 버전 업그레이드를 고민하는 개발자가 알아두면 좋은 실무 포인트를 정리했습니다.

설정 한 줄로 끝내는 구조화된 로깅

클라우드나 쿠버네티스 환경에서는 일반 텍스트 로그보다 검색과 파싱이 쉬운 JSON 형태의 로그를 선호합니다. 이전에는 Logstash Logback 인코더 같은 별도 의존성을 빌드 파일에 추가하고 복잡한 XML 설정을 거쳐야 했습니다. Spring Boot 3.4부터는 내장 기능으로 구조화된 로깅을 공식 지원합니다.

Elastic Common Schema 규격인 ECS나 Logstash, GELF 포맷을 설정 파일에서 바로 지정할 수 있습니다. 콘솔 출력과 파일 저장을 나누어 형식을 다르게 지정하는 방식도 가능합니다.

다음은 Spring Boot 3.4 환경의 application.properties 설정 예시입니다.

properties

별도 라이브러리 의존성을 관리하지 않아도 로그 파이프라인 연동 규격을 통일할 수 있다는 점이 가장 큰 이점입니다.

AssertJ와 자연스럽게 어우러지는 MockMvcTester

웹 계층 컨트롤러를 검증할 때 쓰던 MockMvc는 jsonPath 문법과 ResultMatcher 체이닝을 익혀야 했습니다. Spring Boot 3.4는 익숙한 AssertJ 단언문 스타일로 API 응답을 검증할 수 있는 MockMvcTester를 도입했습니다.

테스트 코드에서 MockMvc 인스턴스를 주입받은 뒤 MockMvcTester로 감싸거나 전용 빌더를 사용하면 자동 완성을 통해 HTTP 상태 코드, 헤더, 응답 본문을 읽기 쉬운 문장 형태로 검증할 수 있습니다. 중첩된 JSON 구조나 리스트 데이터를 검증할 때 문법 오류를 줄여줍니다.

테스트 데이터베이스 자동 감지와 엄격해진 프로퍼티 검증

테스트 환경과 설정 프로퍼티 동작에서도 유용한 개선과 주의할 점이 공존합니다.

통합 테스트에서 Testcontainers를 쓸 때 종종 겪던 번거로움이 줄었습니다. 과거에는 H2 같은 인메모리 DB로 기본 대체되는 것을 막기 위해 어노테이션에 별도 속성을 선언해야 했습니다. Spring Boot 3.4의 AutoConfigureTestDatabase는 컨테이너 기반 데이터소스를 자동으로 감지하므로 불필요한 설정 코드를 덜어낼 수 있습니다.

업그레이드 시 주의할 변경점도 있습니다. ConfigurationProperties를 사용할 때 중첩 객체 필드의 유효성 검증 방식이 표준 빈 검증 명세에 맞춰 엄격해졌습니다. 하위 객체 내부의 유효성 제약 조건을 정상 작동시키려면 중첩 필드 위에 반드시 Valid 어노테이션을 붙여야 검증이 아래로 전파됩니다. 기존에 생략했던 검증 코드가 있다면 업그레이드 전 확인이 필요합니다.

마루의 실무 적용 가이드

Java 21의 가상 스레드 지원 범위가 넓어지고 기본 컨테이너 빌더도 더 가벼운 Jammy Tiny 기반으로 바뀌면서 배포 이미지 크기도 줄었습니다.

새 프로젝트를 시작한다면 망설임 없이 Spring Boot 3.4를 기본 선택지로 두는 것을 권장합니다. 기존 프로젝트를 3.4로 올릴 때는 설정 클래스의 중첩 유효성 검증 누락 여부와 배포 파이프라인의 로그 수집 설정을 먼저 점검하면 안전하게 전환할 수 있습니다.

Loading comments…