Back-End

[Spring] AOP

Minch13r 2025. 4. 23. 21:33

📌 AOP의 기본 개념

  • 관점 지향 프로그래밍 (Aspect Oriented Programming)
  • OOP(객체 지향 프로그래밍)를 보완하는 개념
  • 높은 응집도를 유지하는 데 도움을 줌
  • IoC는 낮은 결합도를 유지하는 데 도움
  • AOP + IoC ⇒ 유지보수가 용이한 시스템 구축 가능

📌 관심사의 분리 (Separation of Concern)

일반적인 서비스 구성:

  • 로깅
  • 예외처리
  • 권한 확인
  • 핵심 비즈니스 로직
  • 트랜잭션 처리

🔹 핵심 관심사 (Core Concern)

  • CRUD = 비즈니스 메서드 = 핵심 로직 = 핵심 관심 = 종단 관심

🔹 횡단 관심사 (Crosscutting Concern)

  • 로깅, 예외 처리, 권한 확인, 트랜잭션 = 부가적인 코드 = 공통 기능 = Advice

📌 트랜잭션의 이해

  • 트랜잭션 = 작업의 처리 단위
  • 예시: 웹툰 대여 서비스에서 쿠키 구매와 사용이 하나의 트랜잭션으로 처리

📌 AOP 주요 용어

🔹 조인포인트 (Joinpoint)

  • 클라이언트가 호출하는 모든 비즈니스 메서드
  • 포인트컷의 후보(대상)

🔹 포인트컷 (Pointcut)

  • 조인포인트 중에서 실제로 Advice가 적용되는 메서드
  • 표현식으로 지정함

🔹 어드바이스 (Advice)

  • 공통 기능의 코드
  • 실제로 적용할 부가 기능
  • 종류: before, after, around 등

🔹 애스팩트 (Aspect)

  • 포인트컷과 어드바이스의 결합
  • 어떤 부가기능(Advice)을 어디에(Pointcut) 적용할지 결정

📌 AOP 설정 방법 (XML 기반)

AOP 설정 관련 스키마(네임스페이스) 추가

  • applicationContext.xml에 추가
<bean id="logAdvice" class="com.example.common.LogAdvice" />

 

Advice 객체 빈 등록

<bean id="logAdvice" class="com.example.common.LogAdvice" />
 

AOP 설정

<aop:config>
    <!-- 포인트컷 설정 -->
    <aop:pointcut expression="execution(* com.example.biz..*Impl.get*(..))" id="aPointcut"/>
    
    <!-- 애스팩트 설정 -->
    <aop:aspect ref="LogAdvice">
        <aop:before method="printlog" pointcut-ref="aPointcut" />
    </aop:aspect>
</aop:config>

📌 위빙 (Weaving)

  • 스프링에서는 런타임 위빙 방식만 지원
  • 포인트컷으로 지정한 핵심 관심 메서드가 호출될 때 어드바이스에 해당하는 공통 기능을 삽입하는 과정

📌 AOP 적용 효과

  • 코드 중복 제거
  • 비즈니스 로직 집중 가능
  • 유지보수성 향상
  • 재사용성 증가

'Back-End' 카테고리의 다른 글

[Spring] Mybatis  (1) 2025.05.08
[Spring] 어노테이션 세부사항 정리  (1) 2025.04.24
[Spring] 빈 생명주기  (1) 2025.04.22
[Spring] 내용 정리  (1) 2025.04.21
[Spring] 어노테이션 정리  (1) 2025.04.20