🌐 AOP (Aspect-Oriented Programming

AOP(관점 지향 프로그래밍)는 객체 지향 프로그래밍(OOP)에서 중복되는 공통 기능(로깅, 보안, 트랜잭션 관리 등)을 분리해 관리하는 기법입니다.
핵심 로직과 횡단 관심사(Cross-cutting Concern)를 분리하여 코드의 재사용성과 유지보수성을 높이는 것이 목적입니다.
✅ AOP란?
- OOP의 보완 개념으로, 핵심 비즈니스 로직과 공통 관심사를 분리하는 패러다임
- 주요 적용 사례: 로깅, 보안, 트랜잭션, 예외 처리
- Spring AOP 같은 프레임워크에서 널리 사용됨
🔍 AOP의 주요 개념
| 개념 | 설명 |
|---|
| Aspect | 공통 기능을 모듈화한 것 (예: 로깅, 보안) |
| Join Point | AOP가 적용될 수 있는 실행 지점 (메서드 실행 등) |
| Advice | 실제 수행할 공통 기능 코드 (Before, After, Around 등) |
| Pointcut | 어떤 Join Point에 AOP를 적용할지 정의 |
| Weaving | 핵심 로직 + 공통 관심사를 합치는 과정 |
⚖️ AOP 장점과 단점
장점
- 중복 코드 제거 → 코드 간결화
- 핵심 로직과 분리된 관리 → 유지보수성 향상
- 공통 기능의 일관된 적용 가능 (모든 메서드에 동일한 로깅 처리 등)
단점
- 초심자에게 개념이 어렵고 코드 흐름 파악이 힘들 수 있음
- 디버깅 복잡성 증가 (로직이 분리되어 실행되므로 추적이 어려움)
- 남용 시 코드 가독성 저하 가능
🧠 추가 CS 지식
🔹 Spring AOP 적용 방식
- 프록시 기반 AOP (Spring 기본)
- JDK 동적 프록시: 인터페이스 기반 프록시 생성
- CGLIB 프록시: 구체 클래스 기반 프록시 생성
🔹 AOP vs Filter vs Interceptor
- Filter: 서블릿 단에서 실행, 요청/응답 전체를 가로챔
- Interceptor: Spring MVC에서 실행, 컨트롤러 전후 처리
- AOP: 비즈니스 로직 메서드 실행 전후/주변에 공통 기능 적용
🔹 실무 활용 예시
- 로그인/권한 인증 처리 (보안)
- 트랜잭션 관리 (Rollback, Commit)
- 메서드 실행 시간 측정 (성능 모니터링)
- 예외 처리 및 로깅
🔹 AOP와 DI(Dependency Injection)의 관계
- AOP는 DI와 결합하여 강력해짐
- Spring에서는 프록시 객체를 주입하여 AOP 적용
🔹 AOP와 OOP의 차이
- OOP: 클래스 단위로 모듈화
- AOP: 횡단 관심사 단위로 모듈화
🎯 면접 대비 질문 예시
💬 AOP의 개념을 설명해주세요.
💬 OOP와 AOP의 차이는 무엇인가요?
💬 Spring에서 AOP를 구현하는 방법은 무엇인가요?
💬 Filter, Interceptor, AOP의 차이를 설명해주세요.
💬 실무에서 AOP를 적용해본 경험이 있나요?
💬 프록시 기반 AOP의 동작 원리를 설명해주세요. 