728x90
AOP(Aspect-Oriented Programming)란 무엇인가?
- AOP는 소프트웨어 개발에서 핵심 비즈니스 로직과는 별개로 반복적으로 사용되는 부가기능(공통 관심사)을 분리하여 코드의 중복을 제거하고 유지보수성을 향상시키기 위한 프로그래밍 패러다임이다.
- AOP의 대표적인 부가기능
- 로깅 (Logging)
- 성능 측정 (Performance Monitoring)
- 트랜잭션 관리 (Transaction Management)
- 인증 및 권한 관리 (Authentication & Authorization)
AOP가 필요한 이유
- 예를 들어, 시간 측정 기능이 필요하다고 가정한다면
- 기존 방식에서는 각 컨트롤러 메서드마다 시간을 측정하는 코드를 추가해야 함
- 결과적으로 코드 중복, 가독성 저하, 핵심 비즈니스 로직과 부가기능 혼합 문제가 발생
- AOP를 활용하면 이러한 부가기능을 분리하여 관리하고 필요한 곳에서만 적용할 수 있음
728x90
AOP의 핵심 개념
- Advice (언제 실행할 것인지)
- 부가기능(Aspect)의 실행 시점을 정의.
- 5가지 종류
- Before Advice : 메서드 실행 전에 동작
- After Returning Advice : 메서드가 정상적으로 실행된 후 동작
- After Throwing Advice : 메서드 실행 중 예외가 발생했을 때 동작
- After Advice : 메서드가 정상적으로 실행되거나 예외가 발생한 후 동작
- Around Advice : 메서드 실행 전후를 모두 제어하며 가장 유연하게 사용됨
- Join Point (어디에서 실행할 것인지)
- Advice를 적용할 수 있는 모든 시점을 의미
- 일반적으로 메서드 호출, 객체 생성, 필드 접근 등이 가능
- 스프링 AOP에서는 프록시 기반으로 동작하므로 메서드 호출 시점만을 Join Point로 지원
- Pointcut (특정 조건에서 실행할 것인지)
- Join Point 중에서 Advice를 실제로 적용할 조건을 정의
- 예를 들어
- 특정 패키지의 모든 메서드에 적용
- 특정 이름 패턴의 메서드에만 적용
- Target (어디에 적용할 것인지)
- Advice가 적용되는 실제 객체
AOP 적용 과정
- 기존 문제
- 컨트롤러 메서드에 직접 부가기능(예: 시간 측정 코드)을 추가하면 코드 중복 발생
- 비즈니스 로직과 부가기능이 섞여서 코드가 지저분해지고 유지보수가 어려움
- AOP 적용 후
- 부가기능(Aspect)을 독립적으로 정의하고 필요한 곳에만 적용(Pointcut 설정)
- 핵심 비즈니스 로직과 부가기능이 분리되어 코드의 가독성과 유지보수성이 향상
AOP의 활용 사례
- 트랜잭션 관리 : 데이터베이스 작업에서 일관성을 유지하기 위해 트랜잭션을 관리
- 로깅 및 모니터링 : 메서드 호출 시간, 입력/출력 값 기록
- 보안 : 인증 및 권한 확인 로직 적용
- 캐싱 : 반복적으로 호출되는 메서드의 결과를 캐싱하여 성능 최적화
스프링 AOP의 특징
- 프록시 기반 AOP
- 스프링 AOP는 런타임 시 프록시 객체를 생성하여 부가기능을 적용
- Join Point는 메서드 호출로 제한
- 선언적 방식
- XML 또는 어노테이션(@Aspect)으로 간단히 설정 가능
결론
AOP는 핵심 로직과 부가기능을 명확히 분리하여 코드의 품질을 높이고 유지보수를 용이하게 한다. 스프링 AOP를 활용하면 다양한 부가기능을 간단히 설정하고 관리할 수 있어 효율적이며 특히 트랜잭션 처리나 로깅과 같은 반복적인 작업에서 큰 이점을 제공한다.
반응형
'개발이론 > Spring' 카테고리의 다른 글
Spring Cloud Gateway (0) | 2024.11.26 |
---|---|
분산 락(Distributed Lock) (0) | 2024.11.21 |
Spring Cloud Config (1) | 2024.11.12 |
서블릿과 스프링의 개요 및 관계 (1) | 2024.11.05 |
Spring Boot와 AWS를 이용한 이미지 업로드 및 최적화 (0) | 2024.11.04 |