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

devyumi·2023년 12월 5일
0

Spring

목록 보기
4/14

AOP

  • 어플리케이션 전체를 관통하는 공통 모듈을 효과적으로 만드는 개발 방법

  • 로직을 핵심적인 관점, 부가적인 관점으로 분리하여 모듈화 함


핵심 기능 vs 부가 기능

  • 핵심적인 관점: 핵심 비즈니스 로직

  • 부가적인 관점: 트랜잭션, 로깅, 파일 입출력, 시간 측정 등

OOP VS AOP

  OOP

  • 공통된 기능을 재사용하기 위해 상속이나 위임을 사용함
  • 반복되는 코드를 줄일 수 있지만 객체 간 의존성이 높아지고, 코드가 핵심 기능과 섞여 있음

  AOP

  • 공통 기능을 핵심 기능에서 분리하고 Aspect로 모듈화하여 사용함
  • 객체 지향 프로그래밍을 보완할 수 있는 개발 방법임


장점

  • 흩어진 공통 기능을 유지 보수하기에 용이

  • 중복되는 코드 제거 가능

  • 코드 재활용 극대화 가능



Spring AOP

  • 런타임 시점에 적용되며 프록시 패턴을 사용함

  • 코드 중복, 프록시 클래스 작성의 번거로움, 객체 간 의존성 증가를 해결하는 것이 목적임

  • 시스템이 실행되면 CGLIB에 의하여 프록시 클래스가 생성되며,
    [프록시 컨트롤러 - 실제 컨트롤러 - 프록시 서비스 - 실제 서비스 - 프록시 레포지토리 - 실제 레포지토리] 순으로 적용됨

  • 프록시 컨트롤러, 서비스, 레포지토리 객체가 실제 객체 전에 주입됨(DI)


Aspect 실행 시점 지정

  • @Before: 호출되기 전
  • @AfterReturning: 메서드 정상 반환 후
  • @AfterThrowing: 메서드 예외 발생 후
  • @After: 예외, 정상에 상관없이 메서드 호출 후
  • @Around: 메서드 실행 전후 모두

0개의 댓글

관련 채용 정보