📌 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 |