개발 공부용

Spring - IoC, DI, AOP 본문

Java|Spring

Spring - IoC, DI, AOP

솝제로 2025. 3. 26. 18:49

 

IoC(Inversion of Control): 제어의 역전

 

객체를 직접 생성하거나 제어하는 것이 아니라 외부에서 관리하는 객체를 가져와 사용하는 것.

객체의 관리를 컨테이너에 맡겨 제어권이 넘어간 것을 제어의 역전이라고 함.

 

#class A에서 new 키워드로 class B의 객체 직접 생성

public class A {

 b = new B();

}

 

#외부에서 관리하는 객체 사용(스프링 컨테이너가 객체를 관리, 외부 == 스프링 컨테이너/IoC 컨테이너)

public class A {

 private B b;

}

 

DI(Dependency Injection): 의존성 주입

 

제어의 역전을 구현하기 위해 사용하는 방법이 DI이다.

DI에는 3가지 방법이 있다.

  • 생성자를 통한 DI(권장)
  • 필드 객체 선언을 통한 DI
  • setter 메서드를 통한 DI

 

#직접 객체를 생성하지 않고 주입받고 있음

#(스프링 컨테이너가 B객체를 만들어서 클래스 A에 주었음)

public class A {

 @Autowired 

 B b;

}

 

@Autowired: 스프링 컨테이너에 있는 빈을 주입하는 애너테이션

 

빈(Bean)이란?
  • 빈 == 스프링 컨테이너에서 관리하는 객체
  • 빈을 스프링 컨테이너에서 등록하기 위해선 XML 파일에서 설정하거나 애너테이션으로 등록하는 등의 방법이 있다.
  • @Component: 가장 일반적인 빈으로 등록하는 애너테이션
  • @Service: 비즈니스 로직을 담는 서비스 레이어 빈 정의
  • @Repository: 데이터 접근 계층에 사용되는 빈 정의
  • @Controller: 웹 요청을 처리하는 컨트롤러 빈 정의
  • @Configuration: 구성 클래스를 나타내는 빈 정의
  • 이후 스프링 컨테이너에서 해당 클래스를 관리한다.
  • 빈의 이름은 클래스 이름의 첫 글자를 소문자로 바꿔 관리. (e.g MyBean -> myBean)

@Component

public class MyBean {

 

 

AOP(Aspect Oriented Programming): 관점 지향 프로그래밍

 

관점을 기준으로 묶어 개발하는 방식

-> 기능을 핵심 기능과 부가 기능으로 구분해 각각을 나누어서 보는 것을 의미

  • 핵심 기능: 비즈니스 로직이 처리하려는 목적 기능
  • 부가 기능: 비즈니스 로직 사이에 로깅 처리를 하거나 트랜잭션 처리를 하는 코드, 데이터 베이스 연결 등

상품 정보 등록을 요청 받아 DB에 저장하고 조회하는 기능을 구현한다고 하면

  • 핵심 기능: 상품 정보 저장, 상품 정보 조회
  • 부가 기능: 트랜잭션, DB 연결, 로깅 등

 

각 핵심 기능은 동일한 부가 기능을 수행할 확률이 높다.

AOP에서는 핵심 기능이 어떤 기능인지와 무관하게 핵심 기능의 수행 전 또는 후에 부가 기능 로직이 수행되기만 하면 된다.

여러 비즈니스 로직에서 반복되는 부가 기능을 하나의 공통 로직으로 처리하도록 모듈화하여 삽입하는 것AOP라고 한다.

 

 

참고 자료 |

https://shinsunyoung.tistory.com/133

스프링 부트 핵심 가이드

 

'Java|Spring' 카테고리의 다른 글

[JAVA] 가변 인자  (0) 2025.05.16
Spring - Test, AssertJ, TDD  (0) 2025.04.03
Spring - ORM, JPA, 커넥션 풀  (0) 2025.04.01
Spring - Websocket, Simple Broker, External Broker  (0) 2025.03.28
Spring - 웹소켓과 STOMP  (0) 2025.03.27