스프링의 IoC, DI, AOP, PSA

ejoo·2024년 4월 22일

스프링의 콘셉트(IoC, DI, AOP, PSA)

IoC(제어의 역전, Inversion if Control)

  • 애플리케이션의 흐름을 개발자가 아닌 스프링 컨테이너가 관리한다.
  • 다른 객체를 직접 생성, 제어하는 것이 아니라 외부에서 관리하는 객체를 가져와 사용하는 것
  • 개발자를 대신하여 스프링 컨테이너에서 객체의 생성과 의존성을 관리한다.
  • 객체 간 의존성 관리가 용이해지며, 코드의 유지보수성과 확장성이 높아진다. 또한, 객체의 생명주기 관리나 AOP 등의 기능을 사용할 수 있다.

DI(의존성 주입, Data Injection)

  • 객체의 생성과 의존성 관리를 스프링 컨테이너가 담당한다.
  • IoC 개념의 구체화
  • 외부로부터 주입받고 이를 통해 다른 객체들과 동적으로 의존 관계가 만들어진다.
  • 각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜준다.

DI 3가지 조건
1. 클래스 모델이나 코드에는 런타임 시점의 의존 관계가 드러나지 않는다. 인터페이스에만 의존해야 한다.
2. 런타임 시점의 의존 관계는 컨테이너나 팩토리 같은 제3의 존재가 결정한다.
3. 의존관계는 사용할 오브젝트에 대한 레퍼런스를 외부에서 제공해줌으로써 만들어진다.

  • Setter Injection: 세터 메서드를 통해 의존성을 주입한다.
  • Constructor Injection: 생성자를 통해 의존성을 주입한다.
  • Field Injection: 반사를 사용하여 필드에 직접 의존성을 주입한다.

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

  • 트랜잭션이나 로깅, 성능 체크, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리한다.
  • 부가적인 공통 기능을 모듈화 한다.

    위와 같이, 비즈니스 로직 사이에 로깅, 트랜잭션과 같은 부가 기능을 추가해야 한다.

    이때, 보통의 부가 기능들은 동일한 기능을 수행하기 때문에 하나의 공통 로직으로 처리하도록 모듈화 하여 삽입한다.
  • 디자인 패턴 중 하나인 프록시 패턴으로 AOP 기능을 제공한다.

PSA(이식 가능 서비스 추상화, Portable Service Abstraction)

  • 스프링에서 제공하는 다양한 기술을 추상화하여 개발자가 쉽게 사용하는 인터페이스
  • 특정 환경이나 기술에 종속되지 않고 일관된 프로그래밍 모델을 제공한다.
  • 예시
    1. 스프링에서 DB를 접근하기 위한 기술로 JPA, MyBatis, JDBC등이 있다.
      어떤 기술을 사용하더라도 일관된 방식으로 DB에 접근하도록 인터페이스를 지원한다.
    2. 코드는 그대로 두고, WAS를 톰캣이 아닌 언더토우, 네티와 같은 다른 곳에서 실행한다.
      어디서 실행하더라도 기존 코드를 그대로 사용할 수 있다.

참고
스프링의 콘셉트(IoC, DI, AOP, PSA)
링크텍스트

profile
안녕하세요

0개의 댓글