IoC (Inversion of Control)
- 스프링은 클래스에서 사용할 객체를 클래스에서 직접 정의하지 않고 외부에 맡기는데, 이를 제어 역전(IoC) 라고 한다.
- 객채의 생성 및 생명주기 관리를 맡는 외부는 ‘IoC 컨테이너’ 또는 ‘스프링 컨테이너’를 의미한다.
- IoC 를 통해 DI(Dependency Injection), AOP(Aspect-Oriented Programming) 가 가능하다.
DI(Dependency Injection)
- IoC 방법 중 하나.
- 클래스에서 사용할 객체를 직접 생성하지 않고 외부 컨테이너가 생성하여 클래스에게 주입한다.
- 의존성 주입하려면
@Autowired
어노테이션을 사용한다. (4.3 버전 이후로는 어노테이션 생략 가능)
- 의존성 주입에는 아래 3가지 방법이 있다.
- 생성자를 통한 DI (스프링 공식 권장)
- 필드 객체 선언을 통한 DI
- setter 메서드를 통한 DI → 없음
AOP (Aspect-Oriented Programming)
관심사의 분리를 통해 공통으로 사용하는 기능(ex. 로깅, 트랜잭션 commit/rollback)들을 모듈화하여 유지보수의 용이성을 높이는 것이 목적인 프로그래밍 방식.
키워드 | 의미 |
Aspect | • 모듈화 된 관심사
• ex. 로깅, 트랜잭션 |
Target | • 관심사가 적용되는 대상
• ex. 클래스, 메서드 |
Join Point | • 관심사가 적용될 수 있는 시점
• ex. 객체 생성, 예외 except
• 스프링에서는 메서드 호출 시점이 항상 join point 가 된다. |
Advice | • 특정 조인포인트에 모듈화 된 관심사가 어떤 액션을 취하는지에 대한 상세 |
Pointcut | • 조인 포인트의 표현식? |
빈 (Bean)
- IoC 컨테이너에서 생성 및 생명주기를 관리하는 대상이 되는 객체.
- 의존성 주입할 때 Bean 이 주입된다.
자동 설정
- 애플리케이션을 개발하다 보면 라이브러리를 새로 추가하게 되는데, 새로 추가한 라이브러리의 의존성을 스프링이 알아서 관리하도록 하려면
@SpringBootApplication
어노테이션을 쓴다.
@SpringBootApplication
어노테이션은 아래 3개 어노테이션을 합쳐놓은 것.@ComponentScan
@Component
시리즈 어노테이션이 붙은 클래스들을 모두 찾아서 빈(Bean) 객체로 등록.@Component
시리즈 어노테이션 :Controller
,RestController
,Service
,Repository
,Configuration
등@EnableAutoConfiguration
spring-boot-autoconfigure
패키지 안에spring.factories
파일을 추가.- 다양한 설정들이 조건을 거쳐서 애플리케이션에 자동으로 적용됨.
@SpringBootConfiguration