Spring AOP 개념 정리: 핵심 기능과 공통 기능의 분리

안세홍·2025년 11월 24일
post-thumbnail

📌 1. AOP란?

AOP(Aspect Oriented Programming)는

핵심 관심사(Core Concern)

횡단 관심사(Cross-cutting Concern) 를 분리하여 프로그램을 구성하는 기법이다.

💡 핵심 로직에 집중하면서, 반복되는 공통 기능(로깅, 보안, 트랜잭션)을 따로 모듈화할 수 있도록 도와주는 기술

즉, 객체 지향이 놓치는 “중복되는 부가 기능을 하나로 모아 관리하는 방법”.


📌 2. 왜 AOP가 필요한가?

서비스 클래스를 여러 개 만들다 보면

모든 클래스에 이런 코드가 흩어져 나타난다:

  • 로그 출력
  • 인증/인가 체크
  • 트랜잭션 시작/종료
  • 실행 시간 측정
  • 예외 로깅

이런 코드들이 여러 곳(C, D, E…)에 똑같이 흩어져 있으면 문제가 생긴다.

❌ 문제점

  • 공통 기능이 여러 클래스에 중복 작성됨
  • 공통 기능 수정 시 관련 파일 여러 개를 수정해야 함
  • 핵심 비즈니스 로직이 공통 코드 때문에 지저분해짐
  • 유지보수성 저하

그래서 공통 기능을 한 곳에 모아서 처리하는 방식이 필요해졌고,

그것이 바로 AOP다.


📌 3. 핵심 관심사 vs 횡단 관심사

✔ 핵심 관심사(Core Concern)

  • 각 클래스가 수행해야 할 비즈니스 고유 기능
  • 예:
    • 주문 서비스 → 주문 생성
    • DB 강의 → DB 설계
    • 알고리즘 강의 → 알고리즘 풀이

✔ 횡단 관심사(Cross-cutting Concern)

  • 모든 클래스에 공통적으로 필요한 기능
  • 예:
    • 로그인 체크
    • 로그 출력
    • 예외 처리
    • 트랜잭션 관리
    • 보안 검사

🔥 핵심 포인트

횡단 관심사는 어떤 모듈에도 포함되지만, 실제 핵심 로직과 직접 연관되지 않음

→ 그러나 모든 곳에서 함께 실행됨

→ 그래서 “흩어진 관심사”라고 부름


📌 4. 생활 속 예시로 보는 AOP

✔ 예시 1: 대학 강의 시스템

공통된 프로세스

출석 확인 → 강의 진행 → 중간/기말고사 → 성적 처리

이 흐름은 모든 과목에 동일하게 적용됨.

핵심 관심사는 과목마다 다름

  • 알고리즘 강의 → 알고리즘 문제 풀이
  • 데이터베이스 강의 → 테이블 설계
  • 운영체제 강의 → 프로세스 관리

횡단 관심사는 모든 강의에 동일

  • 출석 체크
  • 시험 관리
  • 성적 계산

바로 이런 공통 로직을 AOP가 묶어서 처리해준다.


✔ 예시 2: 쇼핑 과정

가게가 달라도 다음 과정은 같다:

물건 고르기 → 장바구니 담기 → 결제하기 → 영수증 받기

여기서

  • ‘물건 고르기’는 가게마다 다르므로 핵심 관심사
  • 장바구니 담기, 결제, 영수증 받기 같은 과정은 모든 가게에서 공통 → 횡단 관심사

AOP는 공통 단계(횡단 관심사)를 하나로 모아 관리한다.


📌 5. AOP가 주는 장점

✔ 유지보수성 향상

  • 코드가 더 깔끔하고 핵심 비즈니스 로직만 남음
  • 수정해야 할 공통 기능의 위치가 명확해짐

✔ 코드 재사용성 증가

  • 로깅, 보안, 트랜잭션 같은 기능을 한 번만 구현하면 여러 클래스에서 재사용 가능

✔ 테스트 용이성

  • 핵심 로직을 공통 로직에서 분리하여 독립적으로 테스트 가능

✔ 디버깅 쉬움

  • 공통 기능이 중앙 집중되어 있어 추적이 빠름

✔ 시스템 확장성 증가

  • 새로운 공통 기능을 추가하더라도 기존 핵심 로직에 영향이 거의 없음

✔ 책임 분리 명확

  • 각 모듈이 담당해야 할 역할이 분명해짐

📌 6. AOP 주요 용어

용어설명
Aspect부가 기능(횡단 관심사)를 모듈화한 것, 로깅/보안/트랜잭션 등
Advice언제 실행할지 정의한 코드(메서드) Before / After / Around 등
Join PointAdvice가 삽입될 수 있는 지점 (메서드 실행 등)
PointcutAdvice가 실제로 적용될 위치를 지정하는 필터 조건

📌 7. AOP 핵심 매커니즘 한 번에 정리

✔ Aspect = 부가 기능을 모듈화한 클래스

예: LoggingAspect, TransactionAspect

✔ Pointcut = 어디에 적용할지 정의

예:

execution(* com.example.service.*.*(..))

✔ Advice = 언제 실행할지 정의

예:

  • @Before
  • @AfterReturning
  • @Around

✔ Join Point = 적용 가능한 모든 지점

스프링에서는 주로 “메서드 실행 시점”


📌 8. 실제 적용 개념 요약

AOP는 아래와 같은 방식으로 동작한다.

핵심 기능 호출 전   → @Before
핵심 기능 실행       → 비즈니스 로직
핵심 기능 실행 후   → @After, @AfterReturning
예외 발생 시         → @AfterThrowing
전체 제어 필요 시     → @Around

공통 관심사를 핵심 로직에 섞지 않고도

필요한 순간에 적절하게 섞어서 실행할 수 있게 해주는 기술이다.


📌 9. AOP 최종 핵심 정리

✔ 핵심 비즈니스 로직과 공통 기능을 분리하는 프로그래밍 방법
✔ 공통 기능(로깅/보안/트랜잭션 등)을 Aspect로 모듈화
✔ 핵심 코드가 깔끔해지고 유지보수성이 좋아짐
✔ 코드 재사용성 크게 증가
✔ 스프링의 대표적인 장점 중 하나
profile
나만의 개발 일기

0개의 댓글