먼저 한 번에 그림부터 잡기
예를 들어 게시판 서비스에 이런 메서드들이 있다고 하면
- insertBoard() 글 작성
- updateBoard() 글 수정
- deleteBoard() 글 삭제
- getBoard() 글 1개 조회
- getBoardList() 목록 조회
이 메서드들이 하는 본업은 글 저장 / 수정 / 조회 같은 비즈니스 기능이다.
그런데 거의 항상 아래 같은 공통 작업이 따라붙는다.
- 시작 / 종료 로그 찍기
- DB 변경이면 트랜잭션 시작 / 커밋 / 롤백
- 로그인 / 권한 체크
- 예외 발생 시 에러 로그 남기기
문제는 이 공통 작업을 각 메서드 안에 직접 다 넣기 시작하면 모든 메서드가 비슷한 코드로 덕지덕지해지고 정책 하나 바꾸려면 여러 파일을 수정하게 된다는 점이다.
AOP는 딱 이 상황을 해결하려고 등장한다.
1) 관심 분리 (SoC: Separation of Concerns)
한 줄 정의
- 서로 다른 목적의 코드가 한 메서드 / 클래스 안에 섞여 있으면 복잡해지므로 역할 (관심사)을 분리해서 관리하는 설계 원리다.
쉬운 설명
- 글 작성 로직은 글 저장만 집중하고
- 로그 / 트랜잭션 / 보안 같은 공통 작업은 “공통 작업 담당 클래스”로 따로 빼서 관리한다.
왜 좋은가
- 코드가 짧아지고 읽기 쉬워진다
- 공통 정책 (로그 포맷, 예외 처리 방식)을 바꿔도 핵심 로직을 덜 건드린다
- 결과적으로 유지보수가 쉬워진다
2) 횡단 관심 (Cross-cutting Concerns)
한 줄 정의
- 여러 비즈니스 메서드를 가로질러 공통으로 적용되는 기능이다.
대표 예시
- 로깅, 트랜잭션, 인증 / 인가, 예외 처리
왜 횡단인가?
- 글 작성에도 필요하고 글 수정에도 필요하고 글 삭제에도 필요하다.
- 기능 하나에만 붙는 게 아니라 여러 기능을 가로질러 반복된다.
3) 핵심 관심 (Core Concerns)
한 줄 정의
- 서비스가 진짜로 제공해야 하는 본업 로직이다.
예시
- 게시글 CRUD (등록 / 수정 / 삭제 / 조회), 결제 처리, 회원가입 처리 같은 것들
핵심 포인트
- 핵심 관심은 “이 서비스가 존재하는 이유”이고
- 횡단 관심은 “거기에 공통으로 붙는 보조 기능”이다.
4) 조인 포인트 (JoinPoint)
한 줄 정의
- 횡단 관심 (공통 기능)이 끼어들 수 있는 후보 지점이다.
스프링 AOP에서의 현실적인 의미
- 대부분 “메서드 실행 시점”을 조인 포인트로 본다.
insertBoard()가 실행되는 순간, getBoardList()가 실행되는 순간이 모두 후보가 된다.
비유로 이해하기
- 조인 포인트 = “공통 기능을 붙일 수 있는 자리 후보 (자리 목록)”
5) 포인트컷 (Pointcut)
한 줄 정의
- 조인 포인트 후보들 중에서 실제로 적용할 대상 (조건)을 고르는 규칙이다.
예시로 바로 이해하기
- 조인 포인트 후보가 5개라고 하자 (글 작성 / 수정 / 삭제 / 조회 / 목록).
- “로그는 5개 전부에 붙이자” → 포인트컷이 5개 전부 선택
- “트랜잭션은 DB 바꾸는 CUD에만 붙이자” → 포인트컷이 3개 (CUD)만 선택
- “조회 (get으로 시작하는 것)에만 성능 측정 붙이자” → get*만 선택
정리
- JoinPoint = 후보 전체
- Pointcut = 그 후보 중 “여기만 적용하자”라고 선택된 대상
6) 어드바이스 (Advice)
한 줄 정의
- 횡단 관심을 실제로 실행하는 공통 기능 코드다.
중요: 어드바이스에는 ‘동작 시점 (When)’이 따라온다
공통 코드를 언제 실행할지를 정해야 결과가 달라진다.
- Before: 핵심 메서드 실행 전
- After Returning: 정상 반환 직후
- After Throwing: 예외 발생 후
- After: 메서드 실행 후 (성공 / 실패와 무관하게 마무리 느낌)
- Around: 실행 전 / 후를 감싸서 제어 (가장 강력)
감각적으로 이해하기
- “로그를 시작 전에 찍을지, 끝나고 찍을지, 예외일 때만 찍을지”가 전부 어드바이스의 시점 문제다.
7) 위빙 (Weaving)
한 줄 정의
- 포인트컷으로 선택한 핵심 메서드가 호출될 때,
어드바이스 (공통 기능)가 끼워져서 함께 실행되도록 결합되는 과정이다.
스프링 특징
- 스프링 AOP는 기본적으로 런타임 위빙이다.
실제로 메서드가 호출되는 그 순간에 공통 기능이 적용된다.
8) 애스펙트 (Aspect) / 어드바이저(Advisor)
한 줄 정의
- “어디에 (Pointcut) 무엇을 / 언제 (Advice)”를 묶어놓은 설정 단위다.
즉, 애스펙트는 이런 의미
- “이 포인트컷에, 이 어드바이스를, 이 시점으로 붙여라”라는 규칙 묶음
결론
- 애스펙트 설정에 따라 스프링이 위빙을 수행한다.
- 핵심 관심 (비즈니스 메서드들)이 있고
- 횡단 관심 (공통 기능)이 있다
- 조인 포인트는 “공통 기능을 붙일 수 있는 후보 자리들”이고
- 포인트컷은 “그중 실제로 붙일 자리 (선택 규칙)”이고
- 어드바이스는 “실제로 실행될 공통 코드 + 언제 실행할지 (시점)”이고
- 애스펙트는 “포인트컷 + 어드바이스 결합 규칙”이고
- 위빙은 “호출 순간에 실제로 끼워져 실행되는 것 (스프링은 런타임 위빙)”
'수업 복습' 카테고리의 다른 글
| XML 기반 AOP 설정 실습 흐름 (0) | 2026.01.23 |
|---|---|
| AOP 동작 시점 (Advice 타입) 5가지 (0) | 2026.01.23 |
| Spring MVC / JSP Q&A 정리 (0) | 2026.01.22 |
| Spring Boot + JSP 로그인부터 게시판 조회 (0) | 2026.01.20 |
| 커맨드 객체 바인딩과 DI 흐름 정리 (0) | 2026.01.19 |