[Spring] 스프링의 4가지 concept 정리

|

1. IoC (Inversion of Control)

- 제어의 역전

- 객체의 생성과 관리를 개발자가 아닌 framework가 하는 것

- 스프링 애플리케이션에서는 오브젝트(빈)의 생성과 의존 관계 설정, 사용, 제거 등의 작업을 애플리케이션 코드 대신 스프링 컨테이너가 담당

- 스프링 컨테이너 = IoC 컨테이너 (= 빈 팩토리, DI 컨테이너, `[애플리케이션 컨텍스트]` )

- 애플리케이션 컨텍스트 : IoC와 DI 그 이상의 기능을 가짐. (메세지 소스, 환경변수, 어플리케이션 이벤트, 리소스 조회)

 

* BeanFactory
- 스프링 설정파일에 등록된 <bean> 객체를 생성하고 관리
- 컨테이너가 구동될 때 객체를 생성하는 것이 아니라 클라이언트로부터의 요청에 의해서만 객체를 생성 (Lazy Loading 방식) -> 일반적인 스프링 프로젝트에서 사용할 일이 없음

* ApplicationContext
- BeanFactory가 제공하는 <bean> 객체 관리 기능 외에도 트랜잭션 관리나 메시지 기반의 다국어 처리 기능 지원
- 컨테이너가 구동되는 시점에 <bean>에 등록되어 있는 클래스들을 객체화 하는 즉시로딩(Pre-Loading 방식)
- <bean> option에 lazy-init="true"를 써서 클라이언트가 요청하는 시점에 구동할 수도 있음
- ApplicationContext의 구현 클래스는 매우 다양하지만, 두 개만 알고 있으면 됨
  - GenericXmlApplicationContext : 대표적으로 ApplicationContext를 구현한 클래스, 파일 시스템이나 클래스 경로에 있는 xml 설정 파일을 로딩하여 구동하는 컨테이너
  - XmlWebApplicationContext : 웹 기반의 스프링 애플리케이션을 개발할 때 사용하는 컨테이너 (직접 개발 안하는 컨테이너)
- 정리 : 스프링 컨테이너는 bean 저장소에 해당하는 xml 설정파일을 참조하여 bean 생명주기 관리

 

2. DI (Dependency Injection)

- 의존성 주입

- 외부에서 객체를 주입받아 사용하는 것

- 어떤 클래스가 다른 클래스에 의존하는 것

public class A {
	// A에서 B를 주입받음
	@Autowired
    B b;
}
@Component // 클래스 A를 빈으로 등록
public class A {
	... 
}

 

3. AOP (Aspect Oriented Programming)

- 관점 지향 프로그래밍

- 프로그래밍을 할 때 핵심관점 과 부가관점 을 나누어서 개발하는 것

-  부가관점 코드를 핵심 관점 코드에서 분리

 

4. PSA (Portable Service Abstraction)

- 이식 가능한 서비스 추상화

- 어느 기술을 사용하던 일관된 방식으로 처리하도록 하는 것

- 예를 들어, spring에서 database에 접근할 때 JPA, MyBatis, JDBC 등을 사용할 수 있지만, 일관된 방식으로 데이터베이스에 접근하도록 인터페이스를 지원하는 것

And