| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
Tags
- 프로세스
- 낙관적 락
- prim 알고리즘
- 이진탐색트리
- NoArgsConstructor
- kruskal 알고리즘
- 프로세스의 상태
- 정적 팩토리 메서드 패턴
- max idle time
- 알고리즘
- 후위 표기법
- 최대 유휴 시간
- @version
- 중위 표기법
- query methods
- 트리
- quick-sort
- JPA
- 최대 유지 시간
- 자료구조
- disjoint-sets
- static factory method pattern
- binary search
- jparepository
- max lifetime
- force=true
- 쿼리메소드
- BST
- merge-sort
- 비관적 락
Archives
- Today
- Total
Dionysus
[개념] AOP 본문
< 목차 >
📍 AOP (Aspect-Oriented Programming)
'관점 지향 프로그래밍'으로, 어떤 로직을 기준하여 핵심적인 관점과 부가적인 관점을 나누어보고, 그 관점을 기준으로 각각 모듈화하는 것을 의미함 (*모듈화란? 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것)
- 코드의 횡단 관심사(Cross-Cutting Concerns)를 모듈화하는 기법
- 즉 코드를 부분적으로 나누어 흩어진 횡단 관심사를 Aspect로 모듈화하고, 핵심적인 비즈니스 로직에서 분리하여 재사용하겠다는 의미
- 핵심적인 관점: 핵심적 비즈니스 로직
- 부가적인 관점: 핵심 로직을 실행하기 위해 행해지는 DB 연결, 로깅, 파일 입출력에 해당
- AOP의 효과
- 중복 제거
- 유지보수 용이
- 비즈니스 로직과의 분리
💡 횡단 관심사(Cross-Cutting Concerns)란?
비즈니스 로직과는 직접적인 관련이 없지만, 애플리케이션 여러 부분에서 공통적으로 사용되는 기능을 말한다. 이 관심사는 수직적인 계층 구조를 가로질러(cross-cut) 여러 모듈에 걸쳐 반복되기 때문에 "횡단 관심사"라고 부른다.
→ 포커스: "무엇이 공통적으로 존재하는가?"
👉🏻 횡단 관심사에 속하는 기능의 예시
로깅(Logging), 보안 인증 및 권한, 트랜잭션 처리, 예외 처리, 성능 모니터링, 캐싱
💡 흩어진 관심사(Scattered Concerns)란?
소스 코드상에서 하나의 관심사(기능)가 여러 클래스나 모듈에 흩어져서 계속 반복하여 쓰는 코드들이 존재하는 상태를 '흩어진 관심사'라고 한다. AOP의 관점에서는 반복되어 사용되는 부가적인 기능을 하나의 모듈(Aspect)로 분리 생성하여 재사용하는 것이 목적이다.
→ 포커스: "어디에 흩어져 있는가?"출처: https://www.javaguides.net/2019/05/understanding-spring-aop-concepts-and-terminology-with-example.html

🍃 Spring AOP의 특징과 동작 원리
Spring AOP는 Spring 프레임워크에서 AOP를 구현한 것이다.
- Aspect: 부가적 기능에 해당하는 흩어진 관심사를 모듈화한 것
- Target: Aspect를 적용하는 곳(클래스, 메서드 등)
- Advice: 실질적으로 어떤 일을 해야 할지에 대한 것으로, 실질적인 부가 기능을 담은 구현체에 해당
- JointPoint: Advice가 적용될 위치 (메서드 진입 시점, 생성자 호출 시점, 필드에서 값을 꺼내올 때 등 다양한 시점에 적용 가능)
- PointCut: JointPoint의 상세 스펙을 정의한 것 (즉, "A란 메서드의 진입 지점에 호출할 것"과 같이 더욱 구체적으로 Advice가 실행될 지점을 정할 수 있음)
- Weaving: Aspect를 핵심 비즈니스 로직에 적용하는 과정 (컴파일 타임, 로드 타임, 런타임 등에서 가능)
✔️ 예시 코드
🙅🏻♀️ 흩어진 관심사 예시
public void order() {
logger.info("로그 시작"); // 반복
// 주문 처리 로직
...
logger.info("로그 끝"); // 반복
}
🙆🏻♀️ AOP를 통해 해결 (중앙집중화)
@Aspect
@Component
public class LogAspect {
@Before("execution(* com.example..*(..))")
public void logStart(){
logger.info("로그 시작");
}
@After("execution(* com.example..*(..))")
public void logEnd(){
logger.info("로그 끝");
}
}
OOP(Object-Oriented Programming)의 한계를 AOP가 보완한다고 하는데, 이는 다음 포스팅에서 알아보겠다! 🫠
'웹 개발 > 백엔드' 카테고리의 다른 글
| [개념] 최대 유휴 시간(MIT)과 최대 유지 시간(ML) (0) | 2025.06.20 |
|---|---|
| [개념] IOC 와 DI (2) | 2025.06.12 |
| [개념] GenericDAO (0) | 2025.06.06 |
