처음에는 스프링 부트에 대해 아무것도 모르는 상황이라 학원에서 요구하는 버전대로 사용을 해왔지만 이제는 어느정도 익숙해지니 각 버전별로 어떤게 사용이 가능한지 혹은 안되는 것은 무엇인지 알기 위해 버전별로 정리해볼려고 한다.
1.x → 2.x (Spring Boot 2.0)
1. Spring Framework 업그레이드: Spring Framework 5.0 기반으로 변경.
2. Reactive Programming 지원: WebFlux 도입으로 비동기 및 논블로킹 API 지원.
3. Actuator 개선:
Actuator 엔드포인트가 /actuator로 기본 경로 변경.
새롭게 설계된 Actuator로 세부적인 메트릭스 제공.
4. Configuration Properties 개선:
프로퍼티 바인딩 개선 (@ConfigurationProperties 더 쉬운 사용).
Relaxed Binding 변경 (대소문자 구분 및 _, - 처리 방식 업데이트).
5. JPA와 Hibernate 개선:
Hibernate 5.2 이상 지원.
데이터베이스 기본 방언 설정이 개선됨.
6. 의존성 관리:
Gradle 4+와 Maven 3.5+ 필수.
Java 8 이상 필수.
7. 임베디드 컨테이너:
Undertow, Tomcat, Jetty 등의 버전 업그레이드.
2.x → 2.5, 2.6, 2.7
1. Spring Native 지원 (2.4~2.5):
GraalVM을 통해 네이티브 이미지 빌드 가능.
2. 테스트 유틸리티 개선:
@SpringBootTest와 @TestConfiguration 사용 편의성 증가.
3. Configuration 옵션 추가:
YAML에서 더 다양한 표현 가능.
spring.config.import를 통해 프로파일별 설정 외부화.
4. Actuator 메트릭 확장:
Prometheus와 Micrometer 지원 강화.
HTTP 요청 트래픽 모니터링 개선.
5. Docker 및 Kubernetes 친화성 증가:
컨테이너 환경에서의 성능 최적화.
헬스체크와 readiness/liveness 프로브 통합.
2.x → 3.x (Spring Boot 3.0)
1. Spring Framework 6.0 기반:
Jakarta EE로 완전 전환 (Java EE → Jakarta EE).
패키지 이름 변경: javax.* → jakarta.*.
2. Java 17 이상 필수:
Java 8 및 11 지원 중단.
최신 JVM 기능 활용 가능.
3. Native Support 강화:
GraalVM과의 통합이 더욱 쉬워지고 성능 개선.
4. Observability 기능 추가:
OpenTelemetry와의 통합.
애플리케이션의 분산 트레이싱 및 로그 수집이 더 쉬워짐.
5. Actuator 확장:
새로운 엔드포인트 추가.
메트릭 데이터와 상태 정보 확장.
6. 코어 API 정리:
오래된 API 제거.
최신 Spring 생태계와의 호환성 유지.
7. HTTP 인터페이스 추가:
HTTP 클라이언트 인터페이스를 @HttpExchange로 선언적 방식 지원.
Spring boot의 역사
Spring Boot 이전: Spring Framework의 도전 과제
2004년 Spring Framework 출시:
Spring Framework는 자바 개발에서 의존성 주입(DI)과 AOP 기반 프로그래밍을 도입하며 큰 인기를 끌었습니다.
하지만, XML 설정의 복잡성 및 초기 설정 비용이 개발자에게 큰 부담으로 작용했습니다.
Spring Framework의 확장:
Spring MVC, Spring Security, Spring Data 등의 프로젝트가 추가되었지만, 이를 통합하고 설정하는 데 많은 시간이 소요되었습니다.
개발자들이 필요한 설정 작업에 시간을 많이 투자해야 했고, 간단한 애플리케이션조차도 복잡한 설정을 요구했습니다.
Spring Boot의 탄생 (2014년)
Spring Boot 1.0 출시:
Spring Framework 팀은 애플리케이션 설정의 복잡성을 줄이고, 간단한 “시작”을 가능하게 하는 Spring Boot를 2014년 4월에 발표했습니다.
주요 특징:
자동 설정(Auto Configuration): 대부분의 Spring 설정을 자동화.
의존성 관리(Starter POM): 필요한 라이브러리를 간편하게 추가.
내장 웹 서버: Tomcat, Jetty, Undertow를 기본 제공해 독립 실행형 애플리케이션 개발 가능.
“Convention over Configuration” 철학: 기본값으로 동작하는 설정 제공.
Actuator: 애플리케이션 상태 및 메트릭 정보를 제공하는 관리 툴.
Spring Boot 1.x 시대 (2014~2018)
1. 1.0.x~1.5.x:
Spring Boot의 인기가 급상승하며, 기업과 개인 개발자들 사이에서 널리 사용되기 시작.
Java 8이 널리 보급되면서 Lambda 표현식과 같은 최신 기능과 잘 결합됨.
Spring Framework 4.x와의 긴밀한 통합.
2. 도전 과제:
Reactive Programming과 같은 새로운 요구사항을 충분히 지원하지 못함.
비동기 처리와 확장 가능한 아키텍처 지원에 제한적.
Spring Boot 2.x 시대 (2018~2022)
1. Spring Boot 2.0 출시 (2018년 3월):
Spring Framework 5.0 기반으로 새롭게 설계.
Reactive Programming 지원(WebFlux).
Java 8 이상 필수 (Java 6, 7 지원 종료).
Actuator의 대대적인 개선.
Hibernate, JPA 및 데이터베이스 지원 확장.
2. 중요한 변화:
클라우드 네이티브 개발에 적합한 기능 추가.
Docker 및 Kubernetes와의 통합 강화.
Prometheus, Grafana 같은 도구와의 호환성 개선.
Kotlin 공식 지원 시작.
3. 2.5~2.7 릴리스:
Spring Native 베타 지원으로 GraalVM 네이티브 이미지 빌드 가능.
DevTools, Spring Security, Spring Data 등의 추가 개선.
Spring Boot 3.x 시대 (2022~현재)
1. Spring Boot 3.0 출시 (2022년 11월):
Spring Framework 6.0 기반.
Jakarta EE 전환: Java EE의 javax 패키지를 jakarta로 대체.
Java 17 이상 필수.
GraalVM과의 통합으로 클라우드 네이티브 및 서버리스 환경에서 성능 최적화.
Observability 지원 (OpenTelemetry 통합).
2. 중요한 발전:
마이크로서비스와 클라우드 친화적 환경 지원 강화.
REST API와 WebSocket 같은 비동기 프로토콜의 성능 향상.
Actuator 및 메트릭 시스템 확장.
패키지 이름 변경으로 인해 기존 프로젝트의 마이그레이션 필요.
그러면 Spring boot로 인해 웹 생태에서 어떤 영향을 받게 되었나요?
자바 생태계의 표준:
간단한 설정과 높은 생산성으로 자바 개발의 표준 도구로 자리 잡음.
마이크로서비스 아키텍처의 확산:
Spring Cloud와의 결합으로 마이크로서비스 구현의 주요 선택지로 부상.
클라우드 네이티브 지원:
Kubernetes, Docker, AWS, GCP와의 통합이 강력해짐.
Reactive Revolution:
WebFlux와 Reactor를 통해 비동기, 논블로킹 API의 새로운 길을 제시.
'Spring' 카테고리의 다른 글
동시성 제어 (낙관적 락, 비관적 락, 분산 락) (0) | 2024.10.19 |
---|---|
Transactional 관심사의 분리를 통해 로그 기록 남기기 (0) | 2024.10.08 |
단위테스트, 통합테스트 (1) | 2024.10.01 |
Fetch Type:LazyLoading vs EagerLoading (0) | 2024.09.30 |
Error 메시지(enum 활용) (3) | 2024.09.13 |