
Spring Boot 3.4 업데이트, 구조화된 로깅과 테스트 개선점 살펴보기
배포 환경이 컨테이너와 쿠버네티스 중심으로 굳어지면서 로그를 JSON 규격으로 표준화하는 작업은 백엔드 개발의 기본 과제가 되었습니다. 지금까지 스프링 부트 애플리케이션에서 이런 출력을 만들려면 Logback XML 파일을 직접 만들거나 별도의 서드파티 라이브러리를 의존성에 추가해야 했습니다.
Spring Boot 3.4는 이 과정을 크게 단순화했습니다. 복잡한 템플릿 파일 없이 설정 프로퍼티 한 줄로 구조화된 로그를 생성하고, Java 21 가상 스레드 지원을 확장하며, 테스트 프레임워크의 편의성을 다듬었습니다.
설정 한 줄로 끝내는 구조화된 JSON 로깅
Spring Boot 3.4에서는 공식적으로 구조화된 로깅(Structured Logging) 자동 설정을 내장했습니다. Elastic Common Schema, Logstash, GELF 규격을 기본 지원하므로 별도의 XML 파일 작성 없이 즉시 표준 JSON 로그를 터미널이나 파일로 출력할 수 있습니다.
application.properties 설정 예시 (Spring Boot 3.4 기준):
기존 인프라의 로그 수집 파이프라인 규격에 맞춰 값만 지정하면 날짜, 스레드, 로그 레벨, MDC 필드가 파싱하기 좋은 구조로 출력됩니다. 로깅 설정을 유지보수하는 부담이 줄어듭니다.
테스트 코드의 변화: @MockitoBean과 MockMvcTester
테스트 계층에서도 중요한 개선이 이루어졌습니다. 기존에 관례처럼 사용하던 @MockBean과 @SpyBean 어노테이션이 사용 중단(deprecated) 처리되었습니다. 대신 스프링 프레임워크 6.2부터 제공되는 @MockitoBean과 @MockitoSpyBean을 사용하도록 안내합니다.
컨트롤러 계층을 검증할 때 사용하는 MockMvcTester도 새로 도입되었습니다. 이전에는 MockMvc의 체이닝 문법이 다소 장황했지만, AssertJ 기반의 유연한 단언(Assertion) 스타일로 응답 상태와 본문 JSON 경로를 점검할 수 있습니다.
테스트 코드 예시 (Spring Boot 3.4 기준):
스프링 컨텍스트와 Mockito의 통합 방식이 명확해지고, 테스트 코드의 가독성이 한결 높아집니다.
가상 스레드 지원 확대와 빈 주입 편의성
Java 21의 가상 스레드를 활성화하는 spring.threads.virtual.enabled=true 옵션의 커버리지도 넓어졌습니다. 톰캣뿐 아니라 언더토(Undertow) 웹 서버 환경과 OtlpMeterRegistry 메트릭 전송 스레드까지 가상 스레드가 자동 적용됩니다. I/O 집약적인 서비스에서 추가적인 스레드 풀 튜닝 없이도 동시 요청 처리량을 안정적으로 끌어올릴 수 있습니다.
동일한 인터페이스 타입의 빈이 여러 개 등록될 때 우선순위를 유연하게 조율하는 @Fallback 빈 기능도 추가되었습니다. 다른 유효한 빈 후보가 존재할 때는 주입되지 않다가, 명시적인 빈이 없을 때만 기본 구현체로 주입되는 패턴을 간결하게 구성할 수 있습니다.
마루의 실무 적용 가이드
Spring Boot 3.4는 개발 생산성과 운영 편의성을 두루 챙긴 버전입니다. 컨테이너 환경에서 복잡한 로깅 설정을 걷어내고 싶었거나, AssertJ 스타일로 웹 계층 테스트를 깔끔하게 정돈하고 싶은 팀에 권장할 만합니다.
프로젝트를 전환할 때는 테스트 코드 전반에 선언된 @MockBean을 @MockitoBean으로 이름 바꾸기(Find & Replace)하는 작업만 챙기면 비교적 수월하게 업그레이드를 마칠 수 있습니다.