장점: 비즈니스 로직과 시스템 서비스(로깅, 트랜잭션 등) 분리
상위 맥락
01. AOP 기본 개념 < 01. AOP와 빈 관리 원리 < 01. Spring MVC1 기초와 아키텍처 < MVC < Spring < Web
핵심 정리
AOP의 대표적인 장점은 비즈니스 로직과 시스템 서비스를 분리한다는 점입니다. 로깅, 트랜잭션, 인증, 예외 처리, 성능 모니터링 같은 기능은 애플리케이션 전체에 반복해서 등장하지만, 실제 업무 규칙 자체는 아닙니다. AOP는 이런 시스템 서비스를 비즈니스 코드에서 떼어내어 별도의 관점으로 관리합니다.
분리의 효과
비즈니스 메서드 안에 로그 코드와 트랜잭션 코드가 섞이면 코드의 중심이 흐려집니다. 반대로 AOP를 사용하면 서비스 메서드는 자신이 처리해야 할 업무 흐름만 표현하고, 부가 기능은 프록시와 Advice가 담당합니다.
이 구조의 효과는 다음과 같습니다.
- 핵심 로직의 가독성이 좋아짐.
- 공통 기능을 여러 곳에서 재사용할 수 있음.
- 로깅, 캐싱, 트랜잭션 정책 변경 시 수정 범위가 줄어듦.
- 컨트롤러와 서비스가 단일 책임에 가까워짐.
Spring MVC에서의 의미
Spring MVC에서 @Controller는 HTTP 요청을 분석하고, Service를 호출하고, Model에 데이터를 담고, View 이름 또는 데이터를 반환하는 역할에 집중해야 합니다. 여기에 시스템 서비스가 직접 섞이면 컨트롤러가 비대해지고 유지보수가 어려워집니다.
AOP는 컨트롤러나 서비스 빈을 프록시로 감싼 뒤, 메서드 호출 전후에 필요한 부가 기능을 처리합니다. 이 덕분에 Spring MVC의 계층 구조는 웹 요청 처리, 비즈니스 처리, 시스템 공통 기능을 분리한 형태로 유지됩니다.
주의할 점
분리가 가능하다고 해서 모든 내부 메서드에 어노테이션을 붙이면 되는 것은 아닙니다. Spring AOP는 프록시 기반이므로 동일 클래스 내부 호출에는 적용되지 않습니다. 이 한계는 내부 호출 문제에서 별도로 정리합니다.
한 문장 요약
AOP는 여러 계층에 반복되는 시스템 서비스를 별도 관점으로 분리하여, 컨트롤러와 서비스가 본래의 비즈니스 책임에 집중하도록 만듭니다.