본문 바로가기
codeit sprint backend/weekly paper

[6-1] AOP(Aspect Oriented Programming)

by boolynn 2026. 2. 27.

✔️ AOP

AOP의 등장

AOP(관점 지향 프로그래밍)은 기존 OOP(객체 지향 프로그래밍)의 한계를 극복하기 위해 등장했다. 객체 지향 프로그래밍은 아래의 로직들이 반복적으로 등장하고, 이 중복을 제거하기 어렵다는 한계를 가지고 있었다.

  • 트랜잭션 처리(여러 개의 데이터를 하나의 트랜잭션으로 묶어 한 번에 처리되거나 모두 처리되지 않게 함, All or Nothing)
  • 로깅
  • 실행 시간 측정
  • 보안 검사

 

AOP란?

그렇다면 AOP는 어떻게 이러한 문제들을 해결할 수 있을까?

AOP는 핵심 비즈니스 로직과 별개인 공통 기능을 횡단 관심사로 분리해 관리하는 프로그래밍 패러다임이다.

 

이때 횡단 관심사란, 비즈니스 로직과 직접적인 관련은 없지만 여러 계층/컴포넌트에 걸쳐 반복적으로 나타나는 관심사이다. 위에서 언급한 객체 지향 프로그래밍으로 제거하기 어려운 중복 로직들(트랜잭션 처리, 로깅, 실행 시간 측정, 보안 검사)이 이에 해당한다고 볼 수 있다. 

 

실제 애플리케이션 개발 사례

아래는 실제 애플리케이션 개발 시 AOP의 사례이다.

  • 트랜잭션 관리
    • DB 작업 중 하나라도 실패하면 전체를 취소(Rollback)하는 로직으로, Spring에서 가장 많이 쓰이는 AOP
    • 사례: 매번 try-catch문이나 commit/rollback 코드를 직접 넣는 대신, @Transactional 어노테이션으로 트랜잭션 로직 처리 가능
  • 로깅 및 실행 시간 측정
    • 어느 API가 느린지 파악하기 위해 메소드의 시작/종료 시간을 기록하는 로직
    • 사례: com.example.service.* 패키지 내 모든 메소드에 대해 실행 시간을 측정하는 Aspect(공통 관심 사항에 대한 기능)를 적용하면, 소스코드의 수정 없이 전수 조사가 가능
  • 보안 및 권한 체크
    • 사용자가 특정 기능을 실행할 권한이 있는지 체크하는 로직
    • 사례: 관리자 전용 메뉴를 호출할 때마다 권한을 체크하는 코드를 넣는 대신, 어노테이션 기반 AOP를 통해 관리자 권한이 있는 사용자만 메소드에 진입 가능하도록 설계

 

✔️ 정리

AOP는 공통적인 부가 기능(횡단 관심사)을 핵심 로직에서 분리해 한 곳에서 관리하는 기술이다. 이를 통해 코드의 중복을 제거하고, 순수 비즈니스 로직을 더욱 효과적으로 관리할 수 있다.

'codeit sprint backend > weekly paper' 카테고리의 다른 글

[9-1] Spring JPA: N+1 문제  (0) 2026.03.30
[6-2] Spring MVC  (0) 2026.02.27
[5-2] Spring Boot의 Bean  (0) 2026.02.13
[5-1] 웹 서버 (Web Server) vs WAS (Web Application Server)  (0) 2026.02.13
[4] Spring  (0) 2026.02.09