Spring Framework Overview
개요
Spring Framework는 Java 엔터프라이즈 애플리케이션 개발을 위한 오픈소스 프레임워크다. Java뿐 아니라 Groovy, Kotlin 등 JVM 언어를 지원하며, 다양한 아키텍처 요구사항에 유연하게 대응한다. Spring Framework 6.0부터 Java 17+를 요구한다.
“Spring"이라는 용어는 Spring Framework 프로젝트 자체를 가리킬 수도 있고, Spring Boot, Spring Security, Spring Data 등을 포함하는 전체 프로젝트 패밀리를 의미할 수도 있다.
핵심 특징
- 모듈 기반 구조: 핵심은 코어 컨테이너(설정 모델 + DI 메커니즘)이며, 그 위에 메시징, 트랜잭션, 데이터 영속성, 웹 등의 모듈이 쌓인다
- Servlet 기반 MVC + 리액티브 WebFlux: 두 가지 웹 프레임워크를 병렬로 제공
- Java Module System 지원:
spring.core,spring.context등 안정적인 모듈명 제공 - Jakarta EE 통합: Spring 6.0부터 Jakarta EE 9 기반 (
jakarta네임스페이스), Tomcat 10.1, Jetty 11, Hibernate ORM 6.1 호환
역사
| 시기 | 주요 변화 |
|---|---|
| 2003년 | J2EE의 복잡성에 대한 대안으로 Spring 탄생 |
| ~ Spring 5 | 리액티브 프로그래밍 지원 (WebFlux), Servlet API 없이도 동작 가능 |
| Spring 6.0 | Jakarta EE 9 전환 (javax → jakarta), Java 17+ 요구 |
| 현재 | Spring Boot 기반 클라우드 네이티브, DevOps 친화적 개발이 주류 |
Spring은 Jakarta EE와 경쟁 관계가 아닌 보완 관계다. Jakarta EE 플랫폼 전체를 수용하지 않고, 필요한 개별 스펙만 선택적으로 통합한다:
- Servlet API (JSR 340), WebSocket API (JSR 356)
- JPA (JSR 338), Bean Validation (JSR 303)
- JMS (JSR 914), JSON Binding (JSR 367)
- Dependency Injection (JSR 330), Common Annotations (JSR 250)
설계 철학
Spring Framework의 5가지 핵심 원칙:
- 모든 수준에서 선택권 제공: 설계 결정을 최대한 늦출 수 있다. 설정만으로 영속성 프로바이더 교체 가능
- 다양한 관점 수용: 하나의 방식을 강제하지 않고, 다양한 요구사항에 유연하게 대응
- 강력한 하위 호환성: 버전 간 breaking change를 최소화하고, JDK/서드파티 라이브러리의 지원 범위를 신중하게 선택
- API 설계에 대한 높은 기준: 직관적이고 오래 유지되는 API 설계에 많은 시간 투자
- 코드 품질에 대한 높은 기준: 의미 있는 javadoc, 깔끔한 코드 구조, 패키지 간 순환 의존성 없음
관련 문서
- Spring Core Technologies - Spring 핵심 기술 개요 (IoC, AOP, AOT)
- Spring IoC 컨테이너와 Bean - IoC/DI 원리와 Bean 개념