수업 복습

Spring AOP 개념 / 용어 정리

_김영인 2026. 1. 23. 11:00

먼저 한 번에 그림부터 잡기

예를 들어 게시판 서비스에 이런 메서드들이 있다고 하면

  • 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)”를 묶어놓은 설정 단위다.

즉, 애스펙트는 이런 의미

  • “이 포인트컷에, 이 어드바이스를, 이 시점으로 붙여라”라는 규칙 묶음

결론

  • 애스펙트 설정에 따라 스프링이 위빙을 수행한다.

 

 

  • 핵심 관심 (비즈니스 메서드들)이 있고
  • 횡단 관심 (공통 기능)이 있다
  • 조인 포인트는 “공통 기능을 붙일 수 있는 후보 자리들”이고
  • 포인트컷은 “그중 실제로 붙일 자리 (선택 규칙)”이고
  • 어드바이스는 “실제로 실행될 공통 코드 + 언제 실행할지 (시점)”이고
  • 애스펙트는 “포인트컷 + 어드바이스 결합 규칙”이고
  • 위빙은 “호출 순간에 실제로 끼워져 실행되는 것 (스프링은 런타임 위빙)”