Spring Framework 7.1.0-SNAPSHOT 소스 코드를 "책처럼 읽으며" 내부 구조와 동작 원리를 이해하기 위한 한글 해설서.
이 문서는 Spring Framework의 22개 모듈을 하나씩 분석해, 각 모듈이 무엇을 풀고(why), 어떤 핵심 타입으로 구성되며(what), 호출되면 내부에서 무슨 일이 일어나는가(how) 를 코드 레벨에서 풀어쓴 책이다. 모든 구조도·흐름도는 ASCII 아트로 그려 GitHub/에디터에서 바로 읽을 수 있다.
- 대상 독자: Spring을 써봤지만 내부가 궁금한 중급 개발자. "이 어노테이션이 붙으면 실제로 무슨 일이 벌어지나?"가 궁금한 사람.
- 고도(추상화 수준): 아키텍처 + 핵심 흐름 중심. 모든 메서드를 나열하는 API 레퍼런스가 아니라, 모듈의 책임 → 핵심 타입 → 대표 동작 시나리오의 흐름을 따라간다.
- 구성: 각 모듈은 디렉토리 하나다. 그 안의
README.md(모듈 표지)부터 읽고, 번호가 붙은 하위 챕터(01-…,02-…)를 순서대로 읽으면 된다. - 표기 규약: 집필 규약은 STYLE-GUIDE.md 참고. 클래스/메서드 이름은 영어 원문(
BeanFactory,getBean()), 설명은 한글이다.
Spring Framework는 아래로 갈수록 추상적인 토대, 위로 갈수록 구체적인 응용으로 쌓인 계층형 모듈 구조다. 화살표(──▶)는 "의존한다(uses)"를 뜻한다.
┌───────────────────────────────────────────────────────────────────┐
│ 테스트 / 빌드·런타임 도구 (모든 계층을 가로지름) │
│ spring-test spring-core-test spring-instrument │
│ spring-context-indexer │
└───────────────────────────────────────────────────────────────────┘
┌───────────────────────────────────────────────────────────────────┐
│ 웹 / 메시징 / 통합 계층 │
│ │
│ spring-webmvc ─┐ spring-webflux ─┐ spring-messaging │
│ (Servlet MVC) │ (Reactive Web) │ spring-jms │
│ ▼ ▼ spring-websocket │
│ spring-web ◀───────────────┘ spring-oxm │
│ (HTTP 공통: 메시지·변환·클라이언트) spring-context-support │
└─────────────────────────────┬───────────────────────────────────────┘
│ 의존
┌─────────────────────────────▼───────────────────────────────────────┐
│ 데이터 액세스 / 트랜잭션 계층 │
│ spring-jdbc spring-orm spring-r2dbc ──▶ spring-tx │
│ (JDBC) (JPA/ORM) (Reactive) (트랜잭션 추상화) │
└─────────────────────────────┬───────────────────────────────────────┘
│ 의존
┌─────────────────────────────▼───────────────────────────────────────┐
│ AOP / 표현식 계층 │
│ spring-aop spring-aspects(AspectJ 위빙) spring-expression │
│ (프록시 AOP) (SpEL) │
└─────────────────────────────┬───────────────────────────────────────┘
│ 의존
┌─────────────────────────────▼───────────────────────────────────────┐
│ 핵심 / IoC 컨테이너 계층 │
│ spring-context ──▶ spring-beans ──▶ spring-core │
│ (ApplicationContext) (BeanFactory/DI) (자원·타입변환·메타데이터) │
└───────────────────────────────────────────────────────────────────────┘
- 토대:
spring-core는 다른 모든 모듈이 의존하는 바닥이다. 자원 추상화, 타입 변환, 어노테이션 메타데이터, 재패키징된 ASM/CGLIB가 여기 있다. - IoC:
spring-beans가 DI 컨테이너의 심장(BeanFactory),spring-context가 그 위에 ApplicationContext·이벤트·어노테이션 설정을 얹는다. - AOP/SpEL:
spring-aop/spring-expression은 컨테이너 위에서 횡단 관심사와 동적 표현식을 담당한다. - 데이터·웹·메시징: 이 토대 위에서 각자의 도메인(트랜잭션, JDBC/ORM, 서블릿/리액티브 웹, 메시징)을 구현한다.
처음 읽는다면 아래 순서를 권한다. 토대 → IoC → 응용 순으로 의존 방향을 거슬러 올라간다.
- 토대 다지기 — spring-core (자원·타입변환·메타데이터). 이후 모든 챕터의 어휘가 여기서 나온다.
- 컨테이너의 심장 — spring-beans → spring-context. DI와 빈 생명주기,
refresh()부팅 시퀀스. Spring의 정체성. - 횡단 관심사 — spring-aop → spring-expression.
@Transactional/@Cacheable이 동작하는 원리의 바탕. - 트랜잭션과 데이터 — spring-tx → spring-jdbc → 필요 시 spring-orm / spring-r2dbc.
- 웹 — spring-web(공통 기반) → spring-webmvc(서블릿) 또는 spring-webflux(리액티브).
- 메시징·통합 — spring-messaging, spring-jms, spring-websocket 등 필요한 것만.
- 테스트 — spring-test. 위 모든 것을 어떻게 검증하는지.
- spring-core — 프레임워크의 토대. 자원·타입변환·메타데이터·재패키징 라이브러리.
- spring-beans — IoC 컨테이너의 심장. BeanFactory와 DI, 빈 생명주기.
- spring-context — ApplicationContext. 어노테이션 설정·이벤트·스케줄링·캐시·검증.
- spring-aop — 프록시 기반 AOP. Advice/Pointcut/Advisor, JDK/CGLIB 프록시.
- spring-aspects — AspectJ 컴파일타임/로드타임 위빙 애스펙트.
- spring-expression — SpEL. 런타임 표현식 파싱·평가·컴파일.
- spring-tx — 트랜잭션 추상화. PlatformTransactionManager,
@Transactional, 전파. - spring-jdbc — JDBC 데이터 액세스. JdbcTemplate, JdbcClient, 예외 변환.
- spring-orm — JPA/Hibernate 통합. EntityManager 관리, JpaTransactionManager.
- spring-r2dbc — 리액티브 관계형 데이터 접근. DatabaseClient, 리액티브 트랜잭션.
- spring-web — HTTP 공통 기반. 메시지 변환, 클라이언트, CORS, 멀티파트, 리액티브 코덱.
- spring-webmvc — Servlet 기반 MVC. DispatcherServlet, 핸들러 매핑/어댑터, 뷰.
- spring-webflux — 리액티브 웹. WebHandler, 함수형 라우팅, WebClient.
- spring-messaging — 메시징 추상화. Message/Channel/Handler, STOMP, RSocket.
- spring-jms — JMS 통합. JmsTemplate, 리스너 컨테이너,
@JmsListener. - spring-websocket — WebSocket, SockJS, STOMP over WebSocket.
- spring-oxm — 객체와 XML 사이의 변환 추상화 (Marshaller/Unmarshaller).
- spring-context-support — 부가 통합. 캐시(Caffeine/JCache), 메일, Quartz, FreeMarker.
- spring-test — 통합 테스트 인프라. TestContext 프레임워크, MockMvc, WebTestClient.
- spring-core-test — AOT/코어 테스트 지원 도구 (TestCompiler, RuntimeHints Agent).
- spring-instrument — JVM 계측 진입점. 자바 에이전트, 로드타임 위빙 연결.
- spring-context-indexer — 컴파일타임 컴포넌트 인덱서 (
@Indexed메타데이터 생성).
집필 규약(고도, 문체, ASCII 다이어그램 규칙, 챕터 골격)은 STYLE-GUIDE.md에 정리되어 있다.
총 22개 모듈 · 약 125개 챕터. Spring Framework 7.1.0-SNAPSHOT 소스 기준으로 작성되었다.
- 이 해설서는 Spring Framework 7.1.0-SNAPSHOT 소스 코드를 분석해 작성한 학습용 2차 저작물(한글 해설) 이다.
- 원본 Spring Framework는 Apache License 2.0 하에 배포되며, 저작권은 원저작자(VMware/Broadcom 및 기여자들)에게 있다.
- 본 문서(텍스트·다이어그램)는 Creative Commons BY 4.0 으로 제공된다. 인용된 코드 조각의 저작권·라이선스는 원본 Apache-2.0을 따른다. 자세한 내용은 LICENSE 참고.
- 본 저장소는 비공식 학습 자료이며 Spring 프로젝트/Broadcom과 제휴·보증 관계가 없다.