본문 바로가기

개발 독서/토비의 스프링3

[토비의 스프링3] 8-4. 스프링의 기술(2) - AOP, PSA

728x90
반응형

'토비의 스프링3' 개발 서적을 읽으며 내용을 정리한 글입니다.

 

애스펙트 지향 프로그래밍(AOP)

IoC/DI를 이용해서 POJO에 선언적인 엔터프라이즈 서비스를 제공할 수 있지만 일부 서비스는 순수한 객체지향 기법만으로 POJO 조건을 유지한 채 적용하기 힘들다. 이런 문제를 해결하기 위해 나온게 AOP 이다.

 

AOP 적용 기법

  1. 다이내믹 프록시를 사용하는 방법
    - 기존 코드에 영향을 주지 않고 부가 기능을 적용해주는 데코레이터 패턴을 응용한 것이다.
    - 부가기능을 부여할 수 있는 곳은 메소드의 호출이 일어나는 지점뿐이라는 제약이 있다.
  2. AspectJ를 이용한 언어의 확장
    - 유명 오픈소스 AOP 툴이다.
    - 프록시 방식에서 불가능한 다양한 조인 포인트를 제공한다.
    - Java, JDK의 지원만으로 불가하여 적용 방법이 까다로우나 필요할 경우 사용한다.

스프링에서는 1. 프록시 방식을 기본으로 하고 있다. (원한다면 AspectJ 방식 사용 가능)

 

AOP 적용 단계

AOP의 미숙한 숙지와 무분별한 남용은 예상치 못한 위험을 발생시킬 수 있다. 단계를 밟아가며 접근하는 것이 좋다.

  1. 미리 준비된 AOP 사용
    - 트랜잭션 -> 스프링 기본 제공 AOP 사용
    - @Configurable : 도메인 오브젝트에 DI를 자동 적용해주는 AOP 기능 -> AspectJ 이용한 AOP 필요함!!
  2. 전담팀을 통한 정책 AOP 사용
  3. AOP의 자유로운 사용

 

포터블 서비스 추상화(PSA)

환경과 세부 기술의 변화와 관계없이 일관된 방식으로 기술에 접근할 수 있게 해주는 기술.

POJO 코드가 환경과 세부기술에 직접 노출되지 않도록 서비스를 추상화하는 기술이다.

직접적으로 서비스를 이용할 필요는 없지만 설정을 통해 어떤 종류의 기술을 사용할지 지정해줘야 한다.

  • 예시
    • 트랜잭션 서비스 추상화
      : PlatformTransactionManager를 구현한 구체적인 서비스 클래스를 빈으로 등록해야 한다.
    • 스프링이 제공하는 API 사용해서 만드는 경우
      JavaMail : 스프링이 정의한 추상 API 이용해 코드 작성. 구체적 기술과 설정은 XML안에서 지정

서비스 추상화를 위해 필요한 기술은 DI뿐 이다. DI를 적극 활용해서 개발한다면 자연스레 만들어진다.

테스트가 어렵게 만들어진 API나 설정을 통해 주요 기능을 외부에서 제어하게 만들고 싶을 때도 사용할 수 있다.

728x90
반응형