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.0Jakarta EE 9 전환 (javaxjakarta), 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가지 핵심 원칙:

  1. 모든 수준에서 선택권 제공: 설계 결정을 최대한 늦출 수 있다. 설정만으로 영속성 프로바이더 교체 가능
  2. 다양한 관점 수용: 하나의 방식을 강제하지 않고, 다양한 요구사항에 유연하게 대응
  3. 강력한 하위 호환성: 버전 간 breaking change를 최소화하고, JDK/서드파티 라이브러리의 지원 범위를 신중하게 선택
  4. API 설계에 대한 높은 기준: 직관적이고 오래 유지되는 API 설계에 많은 시간 투자
  5. 코드 품질에 대한 높은 기준: 의미 있는 javadoc, 깔끔한 코드 구조, 패키지 간 순환 의존성 없음

관련 문서