AOP는 잘 쓰면 생산성 도구지만, 잘못 쓰면 문제 은닉 도구
왜 문제 은닉 도구가 되나
1. 본질적 설계 문제를 가린다
- 트랜잭션 경계가 애매함
- 책임이 불분명한 서비스 계층
- 도메인 로직과 인프라 로직이 뒤섞임
→ 이걸 AOP로 감싸면 설계 부실이 안 보이게만 됩니다.
2. 실행 흐름이 코드에서 보이지 않는다
- 메서드 시그니처만 보면 정상
- 실제로는 로깅, 트랜잭션, 리트라이, 보안 체크가 뒤에서 개입
→ 장애 시 콜스택 추적 난이도 급상승, 신규 인력 온보딩 지옥.
3. “일단 붙이고 보자” 문화
- 에러 처리 → AOP
- 성능 문제 → AOP
- 보안 → AOP
→ 결국 비즈니스 로직이 얇아지는 게 아니라 공허해짐.
그럼 언제 써야 하나 (명확한 사용 조건)
AOP는 아래 조건을 모두 만족할 때만 의미가 있습니다.
- 횡단 관심사가 명확할 것
- 로깅, 모니터링, 인증/인가, 공통 트랜잭션 정책
- 비즈니스 규칙과 완전히 분리 가능할 것
- “업무 규칙”이 들어가면 그 순간 설계 실패
- 적용 범위가 문서화·가시화되어 있을 것
- 어떤 패키지/레이어에 걸리는지 팀 공통 인식 필요
실무 기준 한 줄 요약
- ❌ “귀찮아서 AOP” → 문제 은닉
- ❌ “설계 대신 AOP” → 기술 부채
- ✅ “설계가 끝난 뒤 반복 제거용” → 정상 사용
냉정한 결론
AOP는 문제를 해결하지 않는다.
문제를 ‘보이지 않게’ 만들 뿐이다.
그래서 공공 SI에서는:
- AOP 남용 = 운영 리스크
- 감사/장애/인수인계에서 반드시 터집니다.
LIST
'Spring & Backend' 카테고리의 다른 글
| 백엔드는 보이지 않지만, 모든 장애는 거기서 시작한다 (0) | 2026.02.02 |
|---|---|
| 설정이 적은 코드가 아니라 의도가 분명한 코드가 좋은 스프링 코드다 (0) | 2026.02.02 |
| 좋은 자바 코드는 JVM을 신뢰하되, 감시한다 (0) | 2026.02.02 |
| 동시성 버그는 재현이 아니라 운의 문제다 (0) | 2026.02.02 |
| 추상화는 힘이다. 하지만 과하면 미래의 디버깅 비용이다 (0) | 2026.02.02 |
