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 플랫폼 전체를 수용하지 않고, 필요한 개별 스펙만 선택적으로 통합한다: ...

2026년 4월 11일 AM12:00 · 🛠 업데이트: 2026년 4월 11일 AM02:31 · PolarBear

Spring Core Technologies

개요 Spring Framework의 핵심 기술(Core Technologies)은 프레임워크의 근간을 이루는 기술들을 다룬다. 가장 중요한 것은 IoC(Inversion of Control) 컨테이너이며, 그 다음으로 AOP(Aspect-Oriented Programming), AspectJ 통합, AOT(Ahead-of-Time) 처리가 있다. 핵심 기술 구성 IoC 컨테이너 Spring Framework의 가장 핵심적인 기술. 객체의 생성, 조립, 관리를 프레임워크가 담당하며, 의존성 주입(DI)을 통해 객체 간 결합도를 낮춘다. → 개념: Spring IoC 컨테이너와 Bean → 컨테이너: Spring IoC Container Overview → Bean: Bean Overview → DI: Dependency Injection AOP (Aspect-Oriented Programming) Spring은 자체 AOP 프레임워크를 갖고 있다. 개념적으로 이해하기 쉬우면서도 Java 엔터프라이즈 프로그래밍에서 필요한 AOP 요구사항의 80%를 충족하도록 설계되었다. ...

2026년 4월 11일 AM12:00 · 🛠 업데이트: 2026년 4월 12일 PM10:43 · PolarBear

Spring IoC 컨테이너와 Bean

정의 IoC(Inversion of Control) 는 객체가 자신의 의존성을 직접 생성하거나 찾는 대신, 외부(컨테이너)로부터 주입받는 원칙이다. DI(Dependency Injection) 는 IoC의 구체적인 구현 형태로, 객체가 의존성을 다음 방식으로만 정의한다: 생성자 인자(constructor arguments) 팩토리 메서드 인자 생성/반환 후 설정되는 프로퍼티 IoC 컨테이너가 Bean 생성 시 이 의존성들을 주입한다. 이는 Bean이 직접 클래스를 생성하거나 Service Locator 패턴을 사용하는 것과 근본적으로 반대(inverse) 되는 프로세스다. 동작 원리 BeanFactory vs ApplicationContext 구분 BeanFactory ApplicationContext 역할 설정 프레임워크 + 기본 기능 BeanFactory의 완전한 상위 집합 AOP 통합 기본적 쉬운 통합 메시지 리소스 미지원 국제화(i18n) 지원 이벤트 발행 미지원 이벤트 퍼블리케이션 지원 애플리케이션 컨텍스트 없음 WebApplicationContext 등 제공 실무에서는 ApplicationContext를 사용한다. BeanFactory는 설정 프레임워크와 기본 기능만 제공하고, ApplicationContext가 엔터프라이즈에 필요한 기능을 추가한다. ...

2026년 4월 11일 AM12:00 · 🛠 업데이트: 2026년 4월 12일 PM10:43 · PolarBear

Spring IoC Container Overview

정의 org.springframework.context.ApplicationContext 인터페이스가 Spring IoC 컨테이너를 대표한다. 컨테이너는 Bean의 인스턴스화, 설정, 조립을 담당하며, 어떤 컴포넌트를 어떻게 구성할지는 설정 메타데이터(Configuration Metadata) 를 읽어서 판단한다. 설정 메타데이터는 어노테이션 기반 컴포넌트 클래스, 팩토리 메서드가 있는 설정 클래스, 외부 XML 파일, Groovy 스크립트 등으로 표현할 수 있다. 동작 원리 컨테이너의 작동 흐름 애플리케이션 클래스(POJO)와 설정 메타데이터를 조합하여 ApplicationContext를 생성·초기화하면, 완전히 설정된 실행 가능한 시스템이 만들어진다. graph LR A[애플리케이션 클래스POJO] --> C[ApplicationContext] B[설정 메타데이터Annotation/Java/XML] --> C C --> D[완전히 설정된실행 가능한 시스템] ApplicationContext 구현체 Spring 코어에는 여러 ApplicationContext 구현체가 포함되어 있다. ...

2026년 4월 11일 AM12:00 · 🛠 업데이트: 2026년 4월 11일 AM02:31 · PolarBear

Bean Overview

정의 Spring IoC 컨테이너는 하나 이상의 Bean을 관리한다. Bean은 컨테이너에 공급된 설정 메타데이터(어노테이션, Java 설정, XML <bean/> 정의 등)를 기반으로 생성된다. 컨테이너 내부에서 Bean 정의는 BeanDefinition 객체로 표현되며, 다음 메타데이터를 포함한다: 패키지 수식 클래스명: Bean의 실제 구현 클래스 Bean 동작 설정: 스코프, 라이프사이클 콜백 등 컨테이너 내 동작 방식 다른 Bean에 대한 참조: 협력 객체(collaborators) 또는 의존성(dependencies) 기타 설정: 새로 생성되는 객체에 적용할 설정값 (예: 커넥션 풀 크기) BeanDefinition 프로퍼티 프로퍼티 설명 Class Bean 클래스 지정 (인스턴스화 방식 참조) Name Bean 네이밍 규칙 Scope Bean 스코프 (singleton, prototype 등) Constructor arguments 의존성 주입 (생성자 인자) Properties 의존성 주입 (프로퍼티 설정) Autowiring mode 자동 와이어링 모드 Lazy initialization mode 지연 초기화 설정 Initialization method 초기화 콜백 메서드 Destruction method 소멸 콜백 메서드 외부에서 생성된 객체 등록 ApplicationContext 구현체는 컨테이너 외부에서 이미 생성된 객체의 등록도 허용한다. getAutowireCapableBeanFactory() 메서드로 DefaultListableBeanFactory에 접근하여 registerSingleton(..), registerBeanDefinition(..) 메서드를 사용한다. ...

2026년 4월 11일 AM12:00 · 🛠 업데이트: 2026년 4월 12일 PM10:43 · PolarBear

Dependency Injection

정의 의존성 주입(DI)은 객체가 자신의 의존성(함께 작업하는 다른 객체)을 생성자 인자, 팩토리 메서드 인자, 또는 생성 후 설정되는 프로퍼티를 통해서만 정의하는 프로세스다. 컨테이너가 Bean을 생성할 때 이 의존성들을 주입한다. 이 프로세스는 Bean이 직접 클래스를 생성하거나 Service Locator 패턴을 사용하여 의존성을 제어하는 것의 **역전(Inversion)**이다 — 이것이 IoC(Inversion of Control)라는 이름의 유래다. DI를 적용하면 코드가 깔끔해지고 디커플링이 효과적이다. 객체가 의존성의 위치나 클래스를 알지 못하므로, 특히 의존성이 인터페이스나 추상 클래스인 경우 스텁/모의 구현을 사용한 단위 테스트가 쉬워진다. ...

2026년 4월 12일 AM12:00 · 🛠 업데이트: 2026년 4월 12일 PM10:43 · PolarBear