개요

Spring Boot 3.4는 2024년 11월에 정식 릴리스되며, Spring Framework 6.2 기반 위에 다양한 개선사항을 제공합니다. 기존 3.x 사용자라면 비교적 부드럽게 마이그레이션할 수 있지만, 일부 주요 변경사항은 반드시 확인해야 합니다. 이 글에서는 Spring Boot 3.4의 핵심 신기능과 실제 마이그레이션 과정에서 주의할 점을 정리합니다.

핵심 개념

Spring Boot 3.4의 가장 눈에 띄는 변화는 구조적 로깅(Structured Logging) 지원입니다. JSON 포맷으로 로그를 출력할 수 있어 ELK Stack이나 Datadog 같은 로그 수집 시스템과의 연동이 크게 간소화되었습니다.

또한 RestClientRestTemplate에 대한 자동 구성이 개선되어, HTTP 클라이언트 설정이 더욱 직관적으로 변경되었습니다. SSL 번들 자동 리로드 기능도 추가되어 인증서 갱신 시 애플리케이션 재시작 없이 반영됩니다.

Virtual Thread 지원이 한층 성숙해져서, Tomcat과 Jetty 환경에서 가상 스레드를 활용한 동시성 처리가 안정화되었습니다. spring.threads.virtual.enabled=true 설정 하나로 손쉽게 활성화할 수 있습니다.

실전 예제

구조적 로깅을 활성화하는 방법은 다음과 같습니다.

# application.yml
logging:
  structured:
    format:
      console: ecs  # Elastic Common Schema
      file: logstash  # Logstash JSON 포맷

커스텀 필드를 추가하려면 LoggingEventAppender를 확장합니다.

@Component
public class CustomStructuredLogger implements StructuredLogFormatter {

    @Override
    public String format(LogEvent event) {
        Map<String, Object> json = new LinkedHashMap<>();
        json.put("timestamp", event.getTimestamp());
        json.put("level", event.getLevel());
        json.put("message", event.getMessage());
        json.put("service", "my-app");
        json.put("traceId", MDC.get("traceId"));
        return new ObjectMapper().writeValueAsString(json);
    }
}

RestClient 자동 구성 활용 예제입니다.

@Service
public class ExternalApiService {

    private final RestClient restClient;

    public ExternalApiService(RestClient.Builder builder) {
        this.restClient = builder
            .baseUrl("https://api.example.com")
            .defaultHeader("Accept", "application/json")
            .build();
    }

    public UserDto getUser(Long id) {
        return restClient.get()
            .uri("/users/{id}", id)
            .retrieve()
            .body(UserDto.class);
    }
}

활용 팁

  • 마이그레이션 순서: Spring Boot 3.3에서 3.4로 이동 시, 먼저 deprecated API 경고를 모두 해결한 뒤 버전을 올리세요.
  • 프로퍼티 변경 확인: spring-boot-properties-migrator 의존성을 추가하면 변경된 설정 키를 자동으로 감지합니다.
  • 테스트 호환성: @SpringBootTest의 동작이 미세하게 변경되었으므로, 통합 테스트를 반드시 전수 실행하세요.
  • Java 버전: 최소 Java 17이 필요하며, Java 21 사용 시 Virtual Thread 기능을 최대한 활용할 수 있습니다.
  • Docker 이미지: Buildpack 기반 OCI 이미지 빌드가 개선되어 spring-boot:build-image 태스크 성능이 향상되었습니다.

마무리

Spring Boot 3.4는 구조적 로깅, SSL 자동 리로드, Virtual Thread 안정화 등 실무에서 바로 활용할 수 있는 기능이 많습니다. 특히 MSA 환경에서 로그 관리가 중요한 팀이라면 구조적 로깅 기능만으로도 업그레이드 가치가 충분합니다. 점진적으로 마이그레이션을 진행하되, 반드시 테스트 커버리지를 확보한 상태에서 진행하시기 바랍니다.