spring-internals-lab로 다시 읽는 Spring 1 - 이 프로젝트는 무엇을 검증하려는가 Notes GitHub 저장소 이 시리즈는 저장소의 핵심 20주 로드맵(IoC 컨테이너부터 Spring Boot 자동 설정까지)을 기준으로 쓴 것이다. 저장소는 그 뒤로도 로드맵 너머의 주제와 캡스톤으로 계속 확장됐고, 확장된 부분은 저장소의 회고 문서(docs/retrospective/retrospective.md)에 정리되어 있다. 이름도 spring... 2026/08/13 Spring spring-internals-lab로 다시 읽는 Spring 1편
spring-internals-lab로 다시 읽는 Spring 2 - BeanDefinition과 등록 단계 Notes GitHub 저장소 이번 글의 질문 Spring에서 빈을 등록하는 경로는 하나가 아니다. @Component 스캔 @Configuration의 @Bean registerBeanDefinition() 직접 등록 정적 팩토리 메서드 Supplier 기반 등록 겉으로 보기에는 결국 모두 “빈 하나 등록”처럼 보인다. 하지만 ... 2026/08/13 Spring spring-internals-lab로 다시 읽는 Spring 2편
spring-internals-lab로 다시 읽는 Spring 3 - refresh()와 Bean 생성 파이프라인 Notes GitHub 저장소 이번 글의 질문 ApplicationContext.refresh()는 Spring 컨테이너 초기화의 중심이다. 그런데 실무에서는 이 메서드를 직접 호출할 일보다 결과만 접할 일이 훨씬 많다. 그래서 다음 질문이 자주 흐릿하게 남는다. BeanFactoryPostProcessor와 BeanPostProcessor는 정확... 2026/08/13 Spring spring-internals-lab로 다시 읽는 Spring 3편
spring-internals-lab로 다시 읽는 Spring 4 - 의존성 주입과 후보 선택 Notes GitHub 저장소 이번 글의 질문 의존성 주입은 흔히 한 덩어리로 설명되지만, 실제로는 두 단계로 나뉜다. 어떤 생성자를 쓸 것인가 그 생성자의 각 파라미터를 무엇으로 채울 것인가 같은 타입의 후보가 여러 개이면 별도 규칙이 더 붙는다. @Primary @Qualifier 파라미터 이름 일치 순환 참조 여부 ... 2026/08/13 Spring spring-internals-lab로 다시 읽는 Spring 4편
spring-internals-lab로 다시 읽는 Spring 5 - Bean lifecycle과 후처리기 Notes GitHub 저장소 Bean lifecycle은 한 줄로 끝나지 않는다 Spring에서 Bean 생명주기를 단순하게 설명하면 보통 이렇게 말한다. 생성 의존성 주입 초기화 사용 소멸 이 설명은 틀리진 않지만 너무 평평하다. 실제로는 이 사이에 Aware, BeanPostProcessor, @PostConstruct, I... 2026/08/13 Spring spring-internals-lab로 다시 읽는 Spring 5편
spring-internals-lab로 다시 읽는 Spring 6 - 프록시와 AOP Notes GitHub 저장소 이번 글의 질문 Spring AOP를 이해할 때 가장 먼저 잡아야 하는 건 @Aspect 문법이 아니다. 그보다 더 아래 질문이 있다. 언제 JDK 프록시를 쓰고 언제 CGLIB을 쓰는가 인터셉터 체인은 어떻게 진행되는가 final, private, self-invocation은 왜 AOP를 우회하는가 수동... 2026/08/13 Spring spring-internals-lab로 다시 읽는 Spring 6편
spring-internals-lab로 다시 읽는 Spring 7 - @Transactional의 실체 Notes GitHub 저장소 @Transactional은 애노테이션이 아니라 인터셉터다 Spring을 오래 써도 @Transactional은 자꾸 마법처럼 느껴진다. 하지만 앞선 글에서 프록시와 AOP 구조를 먼저 정리해 두면 이 기능도 훨씬 덜 추상적으로 보인다. 이번 글의 질문은 다음과 같다. @Transactional은 실제로 어디서 트랜... 2026/08/13 Spring spring-internals-lab로 다시 읽는 Spring 7편
spring-internals-lab로 다시 읽는 Spring 8 - DispatcherServlet과 MVC 요청 흐름 Notes GitHub 저장소 이번 글의 질문 Spring MVC를 처음 배울 때는 @GetMapping과 @RequestBody부터 보게 된다. 하지만 이 시점에는 아직 가장 중요한 질문이 비어 있다. 요청은 어떤 순서로 컨트롤러 메서드에 도달하는가 HandlerMapping과 HandlerAdapter는 왜 분리되어 있는가 리터럴 경로와... 2026/08/13 Spring spring-internals-lab로 다시 읽는 Spring 8편
spring-internals-lab로 다시 읽는 Spring 9 - Spring Boot는 무엇을 자동으로 조립하는가 Notes GitHub 저장소 Spring Boot를 별도 프레임워크처럼 보면 오해가 생긴다 Boot를 처음 쓰면 모든 것이 너무 쉽게 돌아간다. SpringApplication.run(App.class, args); 이 한 줄 때문에 Boot를 Framework와는 다른 거대한 마법처럼 느끼기 쉽다. 하지만 spring-internals-lab의 ... 2026/08/13 Spring spring-internals-lab로 다시 읽는 Spring 9편
2026-08-09-TIL: rollback-only 버그로 다시 본 트랜잭션 전파, 그리고 Muse Code TIL 최근 2주는 spring-internals-lab에서 커밋이 가장 많이 나왔다. 트랜잭션 전파부터 DispatcherServlet, Spring Boot 자동 구성까지 로드맵의 남은 부분을 몰아서 진행했다. 그 사이 monticker 정산 도메인을 설계했고, Dudecide라는 새 프로젝트를 문서부터 시작했다. 요즘 한 작업 spring-int... 2026/08/09 2026-TIL