728x90
AOP(Aspect-Oriented Programming)란?
AOP는 프로그램의 핵심 비즈니스 로직과 공통 관심사를 분리하여 모듈화하는 프로그래밍 패러다임입니다. 공통 관심사는 로깅, 트랜잭션 관리, 보안, 예외 처리 등 여러 모듈에 걸쳐 반복되는 기능을 의미하며, AOP는 이를 Aspect라는 모듈로 분리하여 개발자의 생산성을 높이고 코드 재사용성을 증가시킵니다.
AOP의 특징
- 모듈화: 공통 관심사를 Aspect로 분리하여 코드의 모듈성을 높입니다.
- 재사용성: 하나의 Aspect를 여러 곳에서 재사용할 수 있습니다.
- 유지보수 용이성: 비즈니스 로직과 공통 관심사를 분리함으로써 코드의 가독성과 유지보수가 용이해집니다.
- 개발 생산성 향상: 반복되는 코드 작성을 줄이고, 비즈니스 로직에만 집중할 수 있게 도와줍니다.
AOP의 장점
- 코드 중복 감소: 공통 관심사를 모듈화하여 코드 중복을 줄입니다.
- 유지보수 용이: 비즈니스 로직과 공통 기능을 분리하여 수정이 용이합니다.
- 관심사의 분리: 비즈니스 로직과 보안, 로깅 등의 기능을 분리하여 명확하게 관리할 수 있습니다.
- 다양한 적용 가능성: 다양한 Join Point에 Aspect를 적용할 수 있어 유연한 설계를 가능하게 합니다.
AOP의 단점
- 학습 곡선: AOP 개념을 이해하고 적용하는 데 시간이 걸릴 수 있습니다.
- 디버깅 어려움: AOP는 코드의 흐름을 숨기기 때문에, 디버깅 시에 문제가 발생할 수 있습니다.
- 성능 문제: 잘못 설계된 Aspect가 성능에 부정적인 영향을 줄 수 있습니다.
- 구현 복잡성: 복잡한 시스템에서는 AOP 적용이 복잡해질 수 있으며, 여러 Aspect가 충돌할 가능성도 있습니다.
AOP의 구성 요소
- Aspect: 공통 관심사를 모듈화한 코드 조각입니다.
- Join Point: Aspect가 적용될 수 있는 지점 (예: 메소드 실행, 객체 생성, 예외 발생 등).
- Advice: Join Point에서 실행될 코드로, 다음과 같은 종류가 있습니다:
- Before: Join Point 전에 실행.
- After: Join Point 이후에 실행.
- After Returning: Join Point가 성공적으로 반환한 후 실행.
- After Throwing: Join Point에서 예외 발생 후 실행.
- Around: Join Point를 감싸며 전후 모두에서 실행.
- Pointcut: 어떤 Join Point에 Advice를 적용할지를 결정하는 표현식.
- Weaving: Aspect를 코드에 적용하는 과정으로, 컴파일 타임, 로드 타임, 실행 타임에 수행됩니다.
AOP와 OOP의 차이점
개념 | OOP | AOP |
비즈니스 로직 vs 공통 관심사 | 로깅 같은 공통 기능이 비즈니스 로직(메소드) 안에 포함됨 | 로깅을 별도의 Aspect로 분리하여 비즈니스 로직과 공통 기능을 분리 |
모듈화 | 모든 기능이 객체 내에 포함되어 모듈화가 낮음 | Aspect로 공통 기능을 모듈화하여 여러 비즈니스 로직에 적용 가능 |
유지보수성 | 공통 기능 수정 시 여러 객체에서 수정해야 할 수 있음 | 공통 기능을 Aspect에서 수정하면 모든 비즈니스 로직에 자동 반영 |
코드 가독성 | 비즈니스 로직이 복잡해질 수 있으며 가독성이 떨어질 수 있음 | 비즈니스 로직이 간결해지고 가독성이 높아짐 |
정리
AOP는 비즈니스 로직과 공통 관심사를 분리하여 소프트웨어 개발의 생산성을 높이고 유지보수를 용이하게 하는 강력한 도구입니다. 그러나 AOP를 사용할 때는 장단점을 고려하여 적절하게 적용하는 것이 중요합니다.
728x90
'Spring Boot' 카테고리의 다른 글
[Spring Boot] Http Session 사용하기 (8) | 2024.10.19 |
---|---|
[Spring Boot] AOP 포인트 컷 사용하기 (0) | 2024.10.16 |
[Spring Boot] 핸들러 인터셉터(Handler Interceptor) (0) | 2024.10.14 |
[Spring Boot] Spring MVC 아키텍처: 요청 처리 흐름과 주요 컴포넌트 (0) | 2024.10.14 |
[Spring Boot] Filter란? 필터를 활용한 요청 및 응답 로깅 (0) | 2024.10.12 |