AOP(Aspect-Oriented Programming)는 소프트웨어 개발에서 모듈화와 코드 재사용을 향상하기 위한 프로그래밍 패러다임 중 하나입니다. AOP는 주로 코드의 횡단 관심사(Cross-Cutting Concerns)를 분리하여 모듈화하는 데 중점을 둡니다. 횡단 관심사란 응용 프로그램의 여러 부분에서 발생하는 비즈니스 로직과는 관련이 적지만 여러 부분에서 공통적으로 나타나는 관심사를 의미합니다.
AOP의 핵심 아이디어는 횡단 관심사를 각각의 핵심 모듈에서 분리된 모듈로 정의하고, 이러한 모듈을 필요한 위치에 삽입하여 코드의 재사용성과 유지보수성을 향상시키는 것입니다. 이를 위해 AOP는 주로 다음과 같은 개념의 구성요소를 사용합니다.
1. Ascept (관점)
관점은 횡단 관심사를 정의하는 모듈입니다. 예를 들어, 로깅, 트랜잭션 관리, 예외 처리 등이 관점의 예입니다.
2. Join Point (결합지점)
결합 지점은 코드 실행 중 특정한 지점을 나타냅니다. 메서드 호출, 객체 생성, 예외 발생 등이 결합 지점의 예입니다.
3. Advice (조언)
조언은 관점이 결합 지점에서 적용하는 동작을 나타냅니다.
종류
- Before : 결합 지점 이전에 실행
- After : 결합 지점 이후에 실행
- Around : 결합 지점을 감싸서 실행
4. Pointcut (포인트컷)
포인트컷은 결합 지점을 선택하는 데 사용되는 표현식입니다. 어떤 결합 지점에서 어떤 관점을 적용할지를 결정합니다.
5. Weaving (짜임)
짜임은 관점을 핵심 모듈에 적용하여 최종적으로 실행 코드를 생성하는 프로세스를 의미합니다. 이는 컴파일 시점, 클래스 로딩 시점, 런타임 시점 중 하나에서 수행될 수 있습니다.
6. Target (목표)
목표는 실질적인 비지니스 로직을 구현하고 있는 코드에 해당합니다. 핵심 관점에 해당합니다.
Advice를 받을 대상, 즉 객체로 비즈니스 로직을 수행하는 클래스일 수도 있지만, 프록시 객체(Object)가 될 수도 있습니다.
AOP를 사용하면 코드의 가독성과 유지보수성이 향상되며, 특히 여러 모듈에서 공통으로 사용되는 기능을 중앙에서 관리할 수 있습니다. Spring 프레임워크와 같은 많은 프레임워크에서는 AOP를 지원하고 있어, 개발자가 횡단 관심사를 쉽게 모듈화 할 수 있습니다.
다음 포스팅에서는 간단한 AOP예제를 Java와 Spring AOP를 사용해보는 시간을 가져보겠습니다.
'Spring' 카테고리의 다른 글
[Spring] 빈 라이프 사이클 - 빈 객체의 초기화와 소멸 : 커스텀 메소드 (0) | 2024.01.29 |
---|---|
[Spring] 빈 라이프 사이클 : Bean 초기화, 소멸 (인터페이스) (1) | 2024.01.25 |
[Spring] Autowired 와 수동 Bean 등록 (@Qualifier) (0) | 2024.01.24 |
[Spring] @Autowired - 의존성 자동주입 (0) | 2024.01.24 |
[Spring] 의존성 주입 - 세터 주입, 생성자 주입방식과 비교 (0) | 2024.01.23 |