
AOP(Aspect Oriented Programming)는
핵심 관심사(Core Concern) 와
횡단 관심사(Cross-cutting Concern) 를 분리하여 프로그램을 구성하는 기법이다.
💡 핵심 로직에 집중하면서, 반복되는 공통 기능(로깅, 보안, 트랜잭션)을 따로 모듈화할 수 있도록 도와주는 기술
즉, 객체 지향이 놓치는 “중복되는 부가 기능을 하나로 모아 관리하는 방법”.
서비스 클래스를 여러 개 만들다 보면
모든 클래스에 이런 코드가 흩어져 나타난다:
이런 코드들이 여러 곳(C, D, E…)에 똑같이 흩어져 있으면 문제가 생긴다.
그래서 공통 기능을 한 곳에 모아서 처리하는 방식이 필요해졌고,
그것이 바로 AOP다.
횡단 관심사는 어떤 모듈에도 포함되지만, 실제 핵심 로직과 직접 연관되지 않음
→ 그러나 모든 곳에서 함께 실행됨
→ 그래서 “흩어진 관심사”라고 부름
출석 확인 → 강의 진행 → 중간/기말고사 → 성적 처리
이 흐름은 모든 과목에 동일하게 적용됨.
바로 이런 공통 로직을 AOP가 묶어서 처리해준다.
가게가 달라도 다음 과정은 같다:
물건 고르기 → 장바구니 담기 → 결제하기 → 영수증 받기
여기서
AOP는 공통 단계(횡단 관심사)를 하나로 모아 관리한다.
| 용어 | 설명 |
|---|---|
| Aspect | 부가 기능(횡단 관심사)를 모듈화한 것, 로깅/보안/트랜잭션 등 |
| Advice | 언제 실행할지 정의한 코드(메서드) Before / After / Around 등 |
| Join Point | Advice가 삽입될 수 있는 지점 (메서드 실행 등) |
| Pointcut | Advice가 실제로 적용될 위치를 지정하는 필터 조건 |
예: LoggingAspect, TransactionAspect
예:
execution(* com.example.service.*.*(..))
예:
스프링에서는 주로 “메서드 실행 시점”
AOP는 아래와 같은 방식으로 동작한다.
핵심 기능 호출 전 → @Before
핵심 기능 실행 → 비즈니스 로직
핵심 기능 실행 후 → @After, @AfterReturning
예외 발생 시 → @AfterThrowing
전체 제어 필요 시 → @Around
공통 관심사를 핵심 로직에 섞지 않고도
필요한 순간에 적절하게 섞어서 실행할 수 있게 해주는 기술이다.
✔ 핵심 비즈니스 로직과 공통 기능을 분리하는 프로그래밍 방법
✔ 공통 기능(로깅/보안/트랜잭션 등)을 Aspect로 모듈화
✔ 핵심 코드가 깔끔해지고 유지보수성이 좋아짐
✔ 코드 재사용성 크게 증가
✔ 스프링의 대표적인 장점 중 하나