스프링은 목적에 따라 다양한 프로젝트를 제공하는데, 그중 하나가 스프링 부트(Spring Boot)이다. 스프링부트를 들어가기 전 이것의 기반이 되는 스프링 프레임 워크를 먼저 알아보도록 한다.
IOC - Inversion Of Control
이를 통해 의존성 주입(DI), 관점 지향 프로ㅡ래밍(AOP)등이 가능해진다.
DI - Dependency Injection
1. 생성자를 통한 의존성 주입
@RestController
public class DIController{
MyService myService;
@Autowired
public DI(Controller(MyService myservice){
this.myService = myService;
}
@GetMapptin("/di/hello")
public String getHello(){
return mySerivce.getHello();
}
}
2. 필드 객체 선언을 통한 의존성 주입
@RestController
public class FieldInjectionController{
@Autowired
private MyService mySerice;
}
3. Setter 메서드를 통한 의존성 주입
@RestController
public class DIController{
MyService myService;
@Autowired
public void setMyService(MyService mySerive){
this.myService = myService;
}
}
3가지 의존성 주입이 있지만 스프링 공식분서에서 권장하는 의존성 주입 방법은 첫번째에 있는 생성자를 통한 의존성 주입 방식이다.
- 다른 방식과는 다르게 생성자를 통해 의존성을 주입받는 방식은 레퍼런스 객체 없이는 객체를 초기화 할 수 없게 설계할 수 있기 때문
- 다시 말하면, 해당 클래스의 인스턴스를 사용하려면 필요한 의존성이 제공되어야 하며, 이를 통해 객체를 초기화할 수 있습니다
- 해당 객체를 생성할 때 외부에서 필요한 인스턴스를 전달해 주어야만 하고 이것이 객체의 일관성을 유지하는데 도움을 준다.
AOP - Aspect Oriental Programming
관점을 기준으로 묶어 개발하는 방식을 말한다.
그렇다면 여기서 말하는 관점은 무엇일까?
기능을 구현할 때 그 기증을 '핵심 기능', '부가 기능'으로 구분해 각각을 하나의 관점으로 보는것을 말한다.
즉, 비즈니스 로직에서 반복되는 부가 가능을 하나의 공통 로직으로 처리하도록 모듈화해 삽입하는 방식을 AOP라고 한다.
AOP는 왜 사용하는 것일까?
다음은 스프링 공식 문서에서 제공하는 다이어 그램이다.

> 'spring-boot-starter'의 여러 라이브러리를 함께 사용할 떄 의존성이 겹칠수 있고 이때문에 버전 충돌이 발생할 수 있지만, 'spring-boot-starter-parent'가 검증된 조합을 제공함으로써 의존성 조합 충동 문제가 없도록 해준다.