스프링 프레임워크는 자바 기반의 애플리케이션 프레임워크이다. 목적에 따라 다양한 프로젝트를 제공하는데 그중 하나가 스프링 부트 이다.
일반적인 자바 개발 경우 객체를 사용하기 위해서는
public Test test = new Test();
와 같이 객체를 선언하고 해당 객체의 의존성을 생성한 후 객체에서 제공하는 기능을 사용한다.
객체를 생성하고 사용하는 작업을 개발자가 제어하는 구조 이지만, 제어 역전을 특징으로 하는 스프링은 기존 개발방식과 다르게 동작한다. IoC 를 적용한 환경에서는 사용할 객체를 직접 생성하지 않고, 객체의 생명주기 관리를 외부에 위임한다. 여기서 외부는 스프링 컨테이너, 또는 IoC 컨테이너 이다. 이때 객체의 관리를 컨테이너에 맡겨 제어권이 넘어간 것을 제어 역전이라고 하며, 이를 통해 의존성 주입, 관점 지향 프로그래밍이 가능하게 한다.
제어 역전 방법 중 하나로 사용할 객체를 직접 생성하지 않고 외부 컨테이너가 생성한 객체를 주입받아 사용하는 방식이다.
스프링에서는 @Autowired 라는 어노테이션을 통해 의존성 주입 가능
public DI(Test test) {
this.test = test;
}
@Autowired
public Test test;
Test test;
@Autowired
public void setter(Test test){
this.test = test;
}
관점 지향 프로그래밍은 스프링의 중요한 특성이다. 자바는 OOP 개념인데 AOP는 이를 더 잘 사용하게 해준다.
그림을 보면 이해가 쉬운데 핵심관심 + 횡단관심으로 관심을 분리, 핵심 기능에 중복되는 공통적인 기능을 횡단으로 삽입하여 실행하는 개념이다.
AOP는 관점을 기준으로 핵심 기능과 부가 기능으로 구분해 각각을 하나의 관점으로 보는것을 의미한다.