🌐 AOP (Aspect-Oriented Programming) 개념 정리
📘 AOP란?
AOP (Aspect-Oriented Programming), 즉 관점 지향 프로그래밍은
공통 기능(로깅, 보안, 트랜잭션 등)을 핵심 로직과 분리하여 재사용성 높이고 코드 깔끔하게 유지하는 프로그래밍 방식입니다.
💡 왜 사용할까?
예를 들어 여러 서비스 메서드에서:
- 로그를 남겨야 하고
- 실행 시간을 측정하고
- 보안 체크까지 해야 한다면...
이 코드를 일일이 메서드마다 적는 건 비효율적이기 때문에,
AOP를 사용해 중복 없이 한 번만 정의하고 자동으로 적용할 수 있습니다.
🧩 AOP의 핵심 용어
용어 설명
Aspect | 공통 관심사를 모아놓은 클래스 (ex. 로깅 기능 모음) |
---|---|
Join Point | Aspect가 적용될 수 있는 지점 (ex. 메서드 실행 시점) |
Advice | 실제 실행될 공통 기능 (ex. 로그 찍기, 트랜잭션 시작 등) |
Pointcut | 어떤 Join Point에 Advice를 적용할지 정의하는 조건 |
Weaving | Aspect를 실제 코드에 적용(끼워넣기)하는 과정 |
🔧 Spring AOP 주요 어노테이션
어노테이션 설명
@Aspect | 해당 클래스가 Aspect임을 정의 |
---|---|
@Before | 메서드 실행 전에 Advice 실행 |
@After | 메서드 실행 후에 Advice 실행 |
@AfterReturning | 메서드가 성공적으로 리턴된 후 Advice 실행 |
@AfterThrowing | 예외 발생 시 Advice 실행 |
@Around | 메서드 실행 전/후 모두 Advice 실행 (가장 많이 쓰임) |
🖥️ 예시 코드
@Aspect
@Component
public class LoggingAspect {
@Around("execution(* com.example.service..*(..))")
public Object logExecution(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("📌 메서드 실행 전");
Object result = joinPoint.proceed(); // 실제 비즈니스 로직 실행
System.out.println("✅ 메서드 실행 후");
return result;
}
}
- execution(* com.example.service..*(..))는 com.example.service 하위의 모든 메서드에 적용
- @Around는 메서드 실행 전/후를 감쌈
✅ 언제 AOP를 쓰면 좋을까?
- 모든 API 요청에 대해 로그를 남기고 싶을 때
- 권한/보안 체크가 필요할 때
- 트랜잭션 처리 (시작/커밋/롤백)
- 실행 시간 측정
- 예외 처리 공통화할 때
🧼 정리하면?
"AOP는 공통 관심사 코드(Logging, Security 등)를 핵심 로직에서 분리해서, 코드가 깔끔하고 유지보수하기 쉽게 만들어주는 도구다."
'스프링' 카테고리의 다른 글
@ExtendWith(SpringExtension.class) vs @ExtendWith(MockitoExtension.class) (0) | 2025.04.18 |
---|---|
프록시 (0) | 2025.04.18 |
HttpServletRequest (0) | 2025.04.17 |
Spring MVC 내부 구조와 HttpMessageConverter 완전 정복 (0) | 2025.04.15 |
kpt (0) | 2025.04.14 |