Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- next-stock
- 아키텍쳐 개선
- 관측가능성
- 알람시스템
- JPA
- ai agent
- 디버깅
- 백준
- 완전탐색
- langgraph
- 쿠키
- 프로그래머스
- ipo 매매자동화
- 셀러리
- 카카오
- 베타적락
- 구현
- docker
- dau 3만명
- piplining
- AWS
- 몽고 인덱스
- spring event
- BFS
- 크롤링
- gRPC
- 결제서비스
- 이분탐색
- 누적합
- 추천 검색 기능
Archives
- Today
- Total
코딩관계론
AOP의 필요성 및 개념 본문
반응형
AOP의 필요성
AOP(Aspect-Oriented Programming)는 주요 기능과 부가 기능을 효과적으로 분리하고 관리할 수 있는 개념으로, 여러 클래스에 걸쳐 공통적으로 나타나는 부가 기능을 모듈화하여 코드의 중복을 줄이고 유지보수를 용이하게 합니다. AOP가 필요한 이유와 등장 배경을 좀 더 구체적으로 설명하면 다음과 같습니다.
1. AOP의 필요성
서비스를 구현할 때, 우리는 다음과 같이 두 가지로 나눌 수 있습니다:
- 핵심 기능: 애플리케이션의 주요 로직을 담당하는 부분입니다. 예를 들어, 주문 시스템에서는 주문 생성, 결제 처리 등이 핵심 기능에 해당합니다.
- 부가 기능: 핵심 기능을 지원하는 공통 기능들입니다. 예를 들어, 로깅, 보안, 트랜잭션 관리 등이 부가 기능에 해당합니다.
핵심 기능과 부가 기능을 구분하는 기준은 이 기능들이 단독으로 사용될 수 있는지 여부입니다. 핵심 기능은 단독으로 사용되지만, 부가 기능은 여러 클래스에서 공통적으로 사용됩니다.
2. 부가 기능의 문제점
부가 기능이 여러 클래스에서 반복적으로 사용될 때, 다음과 같은 문제들이 발생할 수 있습니다:
- 코드 중복: 부가 기능을 각 클래스마다 구현하면 중복된 코드가 많아집니다.
- 유지보수 어려움: 부가 기능의 변경이 필요할 때, 여러 클래스의 코드를 수정해야 하므로 유지보수가 어렵습니다.
- 가독성 저하: 핵심 기능과 부가 기능이 섞여 있어 코드의 가독성이 떨어집니다.
이런 부가 기능들의 문제점을 해결하기 위해서 AOP 패러다임이 탄생하게 되었습니다.
AOP란 무엇인가
프로그래밍 방식을 관점 지향 프로그래밍(AOP)라고 합니다. AOP를 사용하면 핵심 기능과 부가 기능을 분리하여 작성할 수 있고, 부가 기능을 중앙 집중화하여 유지보수의 용이성을 가질 수 있습니다.
AOP의 주요 요소는 다음과 같습니다
- Aspect (애스펙트): 부가 기능을 모듈화한 것입니다. 애스펙트는 특정 부가 기능을 어디에 적용할지 정의합니다.
- Advice (어드바이스): 애스펙트가 적용될 때 실행되는 구체적인 동작입니다.
- Pointcut (포인트컷): 어드바이스가 적용될 지점을 정의하는 표현식입니다.
- Join Point (조인 포인트): 애스펙트가 적용될 수 있는 프로그램의 특정 지점입니다. 메소드 실행 지점으로 제한됨
- Weaving (위빙): 애스펙트를 실제 객체에 적용하는 과정입니다.
- Target(타켓): 어드바이스를 받는 객체
AOP 적용 방식
AOP를 적용하는 방식은 주로 세 가지가 있습니다. 각각의 방식은 AOP가 언제, 어떻게 코드에 삽입되는지에 따라 다릅니다.
1. 컴파일 타임
컴파일 타임에 AOP를 적용하는 방식은 다음과 같습니다:
- 동작 방식: 클래스 파일을 디컴파일러를 사용해 바이트코드를 조작하여 부가 기능을 삽입합니다.
- 특징: 특정 컴파일러를 사용해야 하며, 일반적으로 잘 사용되지 않습니다.
2. 클래스 로딩 타임
클래스 로딩 타임에 AOP를 적용하는 방식은 다음과 같습니다:
- 동작 방식: JVM의 클래스 로더에 클래스가 로딩되기 직전에 바이트코드를 조작합니다.
- 특징: 복잡하고, 잘 사용되지 않습니다.
3. 런타임 시점의 프록시 패턴 (Spring AOP)
Spring AOP는 런타임에 프록시 패턴을 사용하여 부가 기능을 적용합니다:
- 동작 방식: 스프링 빈을 프록시 객체로 감싸고, 메서드 호출 시 프록시를 통해 부가 기능을 수행합니다.
- 특징: 프록시로 동작하기 때문에 메서드 호출에만 적용할 수 있으며, 스프링 빈에만 AOP를 적용할 수 있다는 한계가 있습니다.
반응형
'개발 > Java' 카테고리의 다른 글
스프링 JPA 영속성 컨텍스트란? (EntityManger, Entity 생명주기, 1차 캐시, 쓰기 지연, dirty checking, flush) (0) | 2024.07.22 |
---|---|
Bean 의존관계 주입 방법 - 생성자 주입을 사용하자 (0) | 2024.07.14 |
스프링의 IoC(Inversion of Control)과 DI(Dependency Injection) (0) | 2024.07.10 |
디자인 패턴 - 팩토리 패턴 (0) | 2024.07.08 |
디자인패턴 - 어댑터 패턴 (0) | 2024.07.08 |