반응형
관점 지향 프로그래밍(AOP : Aspect-Oriented Programming)
- 객체지향 프로그래밍(OOP : Object-Oriented PRogramming)과 다른 것
AOP란?
- AOP는 관점을 기준으로 묶어 개발하는 방식을 의미 == 핵심 로직과 부가 기능을 분리해서 코드를 깔끔하게 관리하는 방식
- 여기서 관점(aspect)이란 어떤 기능을 구현할 때 그 기능을 ‘핵심 기능’과 ‘부가 기능’으로 구분해 각각을 하나으로 보는 것을 의미
그럼 ‘핵심 기능’과 ‘부가 기능’의 의미를 알아보자
핵심 기능
- 비즈니스 로직을 구현하는 과정에서 비즈니스 로직이 처리하려는 목적 기능을 말한다.
- ex → 클라인어트로부터 상품 정보 등록 요청을 받아 DB에 저장하고 그 상품 정보를 조회하는 비즈니스 로직을 구현했다면 (1) 상품 정보를 데이터베이스에 저장하고, (2) 저장된 상품 정보 데이터를 보여주는 코드가 핵심 기능
부가 기능
- 핵심 기능인 비즈니스 로직 사이에 로깅 처리를 하거나 트랜잭션을 처리하는 코드를 예로 들 수 있다.
일반적인 OOP 형식으로 비즈니스 로직을 작성하면 그림 1.1과 같이 비즈니스 동작 흐름이 발생한다.
- 상품 정보 등록, 상품 정보 조회는 다른 기능이기에 각자 로직이 구현돼 있다.
- 하지만 유지 보수 목적이나 DB에 접근을 위해 작성된 로깅과 트랜잭션 영역은 상품 정보를 등록 할 때나 상품 정보를 조회할 때 동이란 기능을 수행할 확률이 높다
현재 이 그림에서 핵심 기능을 구현한 두 로직에 동일한 코드가 포함되어 있다.
AOP 관점으로 만든다면
- 이처럼 여러 비즈니스 로직에서 반복되느 부가 기능을 하나의 공통 로직으로 초리하도록 모듈화해 삽입하는 방식을 AOP라고 한다.
코드 예시
- AOP 없이 모든 기능을 직접 넣은 코드
public void placeOrder() {
System.out.println("[Log] 주문 시작"); // 로그
checkAuth(); // 인증 검사
orderService.order(); // 핵심 기능
System.out.println("[Log] 주문 완료"); // 로그
}
- AOP로 부가 기능 분리
- 로그 기록, 인증, 트랜잭션 같은 공통 로직은 AOP에서 따로 처리함
- 핵심 로직은 더 간단하고 읽기 쉬워짐
@LogExecutionTime // AOP로 감싼 로그 어노테이션
public void placeOrder() {
orderService.order(); // 핵심 로직만 남음!
}
AOP 구현 방식 3가지
- 컴파일 과정에 삽입하는 방식
- 바이트코드를 메모리에 로드하는 과정에 삽입하는 방식
- 프락시 패턴을 이용한 방식
스프링 AOP의 목적은 OOP와 마찬가지로 모듈화해서 재사용 가능한 구성을 만드는 것이고, 모듈화된 객체를 편하게 적용할 수 있게 함으로써 개발자가 로직을 구현하는 데만 집중할 수 있게 도와주는 것
반응형
'Spring Boot > 관점 지향 프로그래밍(AOP), 다양한 모듈' 카테고리의 다른 글
[Spring boot] 다양한 모듈 (0) | 2025.07.21 |
---|