핵심: 횡단 관심사(Cross-cutting Concerns)의 모듈화
상위 맥락
01. AOP 기본 개념 < 01. AOP와 빈 관리 원리 < 01. Spring MVC1 기초와 아키텍처 < MVC < Spring < Web
핵심 정리
AOP의 출발점은 애플리케이션 곳곳에 반복해서 등장하는 공통 기능을 별도의 관점으로 분리하는 데 있습니다. 인증, 권한 검사, 트랜잭션 처리, 예외 처리, 성능 모니터링, 로깅 같은 기능은 특정 비즈니스 로직 하나에만 속하지 않고 여러 계층과 여러 메서드에 걸쳐 반복됩니다. 이런 기능을 횡단 관심사라고 부릅니다.
AOP는 이 횡단 관심사를 비즈니스 로직 안에 직접 섞지 않고 독립적인 모듈로 분리합니다. 그 결과 서비스나 컨트롤러는 자신이 맡은 핵심 업무에 집중하고, 로깅이나 캐싱 같은 시스템 성격의 코드는 따로 관리됩니다.
왜 필요한가
전통적인 방식에서는 여러 메서드마다 비슷한 로그 코드, 트랜잭션 코드, 예외 처리 코드가 반복됩니다. 요구사항이 바뀌면 여러 곳을 동시에 수정해야 하고, 핵심 로직과 부가 로직이 섞이면서 코드의 의도가 흐려집니다.
AOP는 이 문제를 다음과 같이 정리합니다.
- 핵심 비즈니스 로직은 Target에 남깁니다.
- 반복되는 시스템 기능은 Aspect로 분리합니다.
- 어디에 적용할지는 Pointcut으로 지정합니다.
- 언제 실행할지는 Advice의 종류로 정합니다.
Spring MVC와 연결되는 의미
Spring MVC에서 컨트롤러는 요청 매핑, 파라미터 처리, Model 저장, View 또는 데이터 반환에 집중합니다. 여기에 로깅, 캐싱, 비동기 처리 같은 코드를 직접 섞으면 컨트롤러의 책임이 비대해집니다. AOP는 이런 공통 기능을 컨트롤러나 서비스 코드 밖으로 빼내어 계층의 순수성을 유지하게 합니다.
다만 Spring AOP는 프록시 기반이므로, 횡단 관심사가 실제로 적용되려면 호출이 프록시를 통과해야 합니다. 이 원리는 프록시 메커니즘과 내부 호출 문제에서 이어서 정리합니다.
한 문장 요약
횡단 관심사의 모듈화란 여러 비즈니스 로직에 흩어질 수밖에 없는 공통 시스템 기능을 별도 관점으로 분리하여, 핵심 로직을 깨끗하게 유지하는 AOP의 핵심 원리입니다.