Spring Boot 3.0 에서 추가된 핵심 5가지!

안녕하세요. 작년 11월 말에 Spring Boot 3.0 이 정식 출시 되었고, 곧 v3.0.2 릴리즈를 앞두고 있습니다. "Spring Boot 3 (Spring Framework 6) 무엇이 달라질까?" 포스팅을 통해서 Spring Boot 3.0 의 새로운 기능들을 작성하기도 했었는데요. 아직 Spring Boot 3.0 을 살펴보지 못하신 분들을 위하여 핵심 5가지만 추려서 공유 드려보고자 합니다. 1. Java 17 이 기준이 되었습니다. Java 17은 record, instanceOf, multiline 문자열 등 새로운 기능이 포함된 최신 LTS(Long Term Support) 버전입니다. Spring Boot 3.0 이후부터는 Java17 이상에서 사용 가능하도록 하였으며, 따라서 기존 Spring Boot 버전을 마이그레이션 하려면 Java 17 버전으로 변경이 필요합니다. 이번 기회에 Java 17 로 업데이트를 고려해보시면 어떨까요? 2. Jakarta EE 를 지원합니다. 기존 Spring Boot 버전을 마이그레이션 한다면 가장 중요한 변경사항은 java EE 네임스페이스가 javax.* 에서 jakarta.* 로 변경됩니다. 이는 Java 상표권 이슈로 인한 변경 사항입니다. Java 개발자라면 한번 쯤 Java EE를 들어보셨을겁니다. Java EE에 대해서 좀 알고 가면 좋을 것 같은데요. EE는 Enterprise Edtion 의 약자로, 과거 썬 마이크로시스템즈가 분산 어플리케이션 개발을 위하 내세운 산업 표준입니다. 우리가 흔히 접해봤던 것으로는 Servlet, JSP, JDBC, JMX 등이 있습니다. 예를 들어, MySQL, Oracle, PostgreSQL 과 같이 다양한 Database 가 있는데 Java EE 호환성 스펙에 맞는 JDBC 드라이버를 사용하면, 큰 변경 없이 다른 Database 로 교체할 수 있는 것이죠. 하지만 썬-오라클 합병 이후에도 상업용 플랫폼이었던 Java EE는 오픈소스 생태계에 밀려 빠른 기술 트랜드를 따라가지 못하다가 2017년 비영리 단체인 이클립스 재단에 JavaEE 가 이관 되었습니다. 그리고 2019년 Java EE 8 과 완벽하게 호환되는 Jakarta EE 8 를 출시 했습니다. 이로써 기존 Java EE 는 벤더 중립적인 커뮤니티 기반의 프로세스를 가지게 되었습니다. 기존에 java 는 오라클이 상표권을 갖고 있었기 때문에 jakarta 로 이름이 변경되었습니다. 이후 네임스페이스 역시 상표권 이슈로 api 네임스페이스를 javax 에서 jakarta 로 변경하여 jakarta EE 9 가 2020년에 릴리즈되었습니다. 참고로 jakarta는 자바섬에서 가장 큰 도시이자 인도네이사의 수도인 Jakarta에서 따왔다고 합니다. 3. Observbility 를 공식 지원합니다. 새로운 Micrometer Observation API와 이전 Spring Cloud Sleuth 프로젝트가 Micrometer Tracing으로 마이그레이션된 Observability 이니셔티브가 있습니다. 이는 Micrometer로 애플리케이션 메트릭을 효율적으로 기록하고 OpenZipkin 또는 OpenTelemetry와 같은 공급자를 통해 추적을 구현하기 위한 기능입니다. 4. GraalVM 기반의 Spring Native가 3년간의 실험을 마치고 공식 지원을 시작합니다. 시스템이 점점 더 고도화되고, 특히 마이크로서비스 아키텍처를 많은 조직에도 도입하게 되면서 더 많은 리소스를 필요로 하게 되었습니다. 거기다가 Java + Spring Boot 를 사용하면 서버 실행 시간이 오래 걸릴 뿐만 아니라, 기본적으로 메모리 사용도 높은 편입니다. 이러한 문제를 해결하기 위한 솔루션으로 GraalVM 이 등장하였는데요. 이를 사용하게 되면 자바 프로젝트이지만 네이티브 바이너리로 만들어 실행 시간과 메모리 사용량을 획기적으로 줄여줍니다. Spring Native는 GraalVM Native Image 컴파일러를 이용하여 클라우드 환경에서 Native Binary 를 쉽게 만들 수 있게 합니다. 이 때 알아 둘 개념이 두개 있는데요. JIT(Just in Time) Compile 과 AOT(Ahead of Time) Compile 입니다. 간단히 설명하자면 JIT Compile는 런타임에 Java 바이트 코드를 기계어로 변환하는 컴파일을 말하며, HotspotVM 의 기본설정입니다. AOT Compile은 GraalVM에서 사용되며, 빌드 타임에 Java 바이트 코드가 기계어로 컴파일 되는 방식을 말합니다. AOT Compile 의 결과물은 특정 플랫폼에 종속된 바이너리가 생성되어 매우 빠르게 실행됩니다. 또한 적은 오버헤드로 인해 더 적은 cpu와 메모리 자원을 사용하게 됩니다. 이러한 장점들로 인해 빠른 부팅과 보다 적은 리소스 사용이 요구되는 클라우드 환경에서 동작하는 애플리케이션에 적합하다는 평가를 받고 있습니다. Spring Native는 Spring Cloud 팀에서 3년 넘게 준비하고 이번 Spring Boot 3 부터 정식으로 도입됩니다. 하지만 GraalVM 을 사용하거나 적용해보신 분들은 아시겠지만 리플렉션 및 프록시에 대한 구성 필요 등등 아직 많은 제약 사항들로 있어 도입 시 예상 못한 어려움이 있을 수 있습니다. 또한 일부 개발자들은 GraalVM이 Java 의 미래인지에 대한 의구심을 갖고 있긴 합니다. 그럼에도 GraalVM의 이점이 분명하기에 앞으로도 더 관심이 높아질 것으로 보입니다. 도입을 고려하고 있다면 충분히 관련 개념을 익힌 뒤에 도입하는 것을 권장 드립니다. 5. HTTP/RSocket Interface Client를 제공합니다. 서비스 인터페이스 선언만으로 Http Access 가 가능한 Http Interface Client 가 추가되었습니다. 기존에 OpenFeign 등을 써본 적이 있다면 익숙 할텐데요. RestClient 또는 WebClient 와 같은 클래스로 직접 구현하지 않더라도, 인터페이스만 선언하면 API 호출이 가능해집니다. 또한 RSocket 도 동일한 방식으로 RSocket interface를 지원합니다. 모니터링을 위한 메트릭에 대한 지원도 강화되었습니다. Micrometer Observation API 가 기본 설정되었으며, 메트릭, 로깅, 분산 추적 등의 기능을 제공하는 Observability 이 공식적으로 추가됩니다. Micrometer로 애플리케이션 메트릭을 효율적으로 기록하고, OpenZipkin 및 OpenTelemetry 와 같은 3rd-party 와의 통합이 견고해집니다.

Spring Boot 3.0 무엇이 달라질까?

RevFactory 프로젝트 - 세상을 더 이롭게 바꾸는 작업

Spring Boot 3.0 무엇이 달라질까?

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2023년 1월 17일 오후 3:44

 • 

저장 20조회 4,662

댓글 1