
자바 엔터프라이즈 애플리케이션을 개발하기 위한 프레임워크
IoC 원칙을 구현하기 위한 컨테이너
BeanFactory: 기본적인 기능을 제공하는 컨테이너ApplicationContext: BeanFactory를 상속하며, 엔터프라이즈 기능을 추가로 제공하는 컨테이너Spring 컨테이너가 객체를 어떻게 생성할 것인지 표현하기 위한 메타데이터
BeanDifinition: Configuration metadata로 정의한 Bean의 메타데이터 (@Bean으로 정의)
id: 단일 이름을 설정하기 위한 필드name: alias를 적용하기 위한 필드의존성 주입을 위한 방식들
@Autowired)@Autowired)ApplicationContext를 통해 획득 (@Autowired 혹은 ApplicationContextAware)@Lookup 애너테이션을 통해 획득Bean의 수명주기 범위
singleton: 단일 인스턴스로 관리 (기본 값)prototype: 다수의 인스턴스로 관리request: HTTP 요청 단위로 관리session: HTTP 세션 단위로 관리application: ServletContext 단위로 관리수명주기 콜백을 구현하기 위한 방식들
@PostConstruct와 @PreDestroy 활용InitializingBean 구현init-method와 destroy-method 설정의존성을 주입받기 위한 애너테이션
required = false 혹은 Optional, @Nullable: 주입이 가능하면 주입받도록 함@Primary: 다른 Bean보다 주입 우선순위를 갖도록 함@Qualifier: 특정 Bean을 주입받을 수 있도록 태그를 적용함프로퍼티 값을 읽어오는 애터네이션
PropertySourcesPlaceholderConfigurer 빈을 통해 application.yml 파일을 읽어옴classpath를 스캔하여 컴포넌트를 로드하는 기능
@Configuration 클래스에 @ComponentScan을 적용하여 사용함@SpringBootApplication에는 해당 기능이 전체 패키지를 기준으로 적용되어 있음@Component: 일반적인 컴포넌트 애너테이션@Controller@Service@Repository클래스에서 bean definition metadata를 정의하기 위한 애너테이션
@Bean: 팩토리 메소드로 bean definition metadata 정의@Confiugration이 아닌 클래스 내부에서의 @Bean 메소드 호출은 빈을 제공하지 않으므로 주의 (lite 모드)@Configuration 클래스들은 CGLIB에 의해 프록싱되며, @Bean 메소드 호출 시 캐싱된 빈을 제공함@Import: 다른 Configuration 클래스의 메타데이터 로드@Profile 혹은 @Conditional: Configuration이 적용될 조건 설정Spring의 여러 애너테이션을 Java 표준 애너테이션으로 대체할 수 있음
프로파일과 프로퍼티들을 갖고 있는 추상화된 객체
sprig.profiles.active 프로퍼티로 프로파일 활성화default프로퍼티가 담긴 자원을 추상화한 객체
Environment에서 여러 PropertySource로부터 프로퍼티 값을 찾아줌-D 명령어 인자)@PropertySoure: 특정 파일을 읽어, PropertySource를 선언적으로 추가하도록 만드는 애너테이션이벤트 처리를 위한 클래스들
ApplicationEvent: 이벤트 클래스ApplicationListener: 이벤트 처리 클래스Spring에서 여러 자원들을 추상적으로 다루기 위한 인터페이스
자원을 추상화한 인터페이스
UrlResourceClassPathResourceFileSystemResourcePathResourceServletContextResourceInputStreamResourceByteArrayResourceResource를 불러오기 위한 컴포넌트
ApplicationContext가 ResourceLoader를 상속함String과 객체 간의 변환을 수행하는 컴포넌트
PropertyEditor를 대체함ConversionService: Converter를 등록하고, 변환 기능을 위임하는 컴포넌트특정 문자열 형식을 기반으로 변환을 수행하는 컴포넌트
FormatterRegistry: Formatter를 등록하는 곳FormattingConversionService: FormatterRegistry와 ConversionService의 구현체클래스의 필드 값을 검증하기 위한 기능
Spring Expression Language; 런타임 환경에서 객체를 조회하거나 조작하기 위한 표현 언어
Spring이 제공하는 관점 지향 프로그래밍
Aspect: 여러 클래스를 횡단하는 관심사를 모듈화한 개념Join point: 프로그램 실행에서의 시점 (e.g. 메소드 호출)Advice: 특정 Join point의 Aspect가 수행하는 동작 (e.g. around, before, after)Pointcut: 목표로 할 Join point를 특정하기 위한 조건Introduction: 대상 타입에 추가적인 메소드나 필드를 정의하는 것Target object: Advice가 적용될 대상 객체AOP proxy: AOP 프레임워크가 Aspect를 구현하기 위해 생성한 프록시 객체Weaving: 대상 객체를 생성하기 위해 Aspect를 적용하는 것 (e.g. 컴파일 타임 Weaving, 런타임 Weaving)Spring IoC를 통한 간단한 AOP 구현을 목적으로 하는 AOP 프레임워크
AopContext.currentProxy()로 호출할 수 있으나, Spring AOP에 의존하게 됨Spring AOP에서 사용하는 프록싱 방식
Spring AOP보다 강력한 기능을 제공하는 AOP 프레임워크
@EnableAspectJAutoProxy를 추가하여 적용Null 허용성 정보를 명시적으로 제공하기 위한 애너테이션들
@Nullable@NonNull로깅을 통합적으로 제공하기 위한 기능
Servlet API를 기반으로 개발된 웹 프레임워크

DispatcherServlet으로 모든 요청을 받고, 필요한 곳으로 전해줌DispatcherServlet이 WebApplicationContext를 참조함WebApplicationContext는 ApplicationContext를 상속함Root WebApplicationContext에서 기반 빈들을 관리함Servlet WebApplicationContext에서는 Servlet 관련 빈을 관리함Root WebApplicationContext을 부모 Context로 둠Spring 프레임워크를 더 쉽게 사용할 수 있도록 하는 프레임워크
starters)Spring 프레임워크에서 데이터베이스를 추상화하여 사용할 수 있도록 하는 프레임워크
Repository: 데이터베이스를 추상화한 컴포넌트Spring에서 JPA를 쉽게 사용할 수 있도록 돕는 프레임워크