[스프링부트 핵심 가이드] IoC, DI, AOP, Bean

Created
Jun 9, 2024
Created by
Tags
Spring
Property
 

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