Blog

[Spring][HCD 8일차]63 AOP란?

Category
Author
Tags
PinOnMain
1 more property
AOP란?
'핵심기능': 각 API 별 수행해야 할 비즈니스 로직이다.
현재 프로젝트로는 회원 가입, 가게 등록, 주문, 가게 키워드 검색, 메뉴 등록 등 기본적인 서비스의 기능들이다.
‘부가기능’: 부가적인 기능
어플리케이션의 여러 부분에서 반복적으로 발생하는 기능으로 메인 기능 이전 또는 이후에 실행되야 하는 것이다.
AOP는 이러한 부가 기능을 모듈화하고 추상화한 것으로 주요 관심사는 보안, 로깅, 트랜잭션 관리 등과 같은 것들을 포함할 수 있다.
핵심 기능과 부가 기능을 구분하는 기준은?
이것이 AOP의 방향이다. AOP는 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고 불린다.
어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것이다.
간단히 말하면 다른 부분에 계속 반복해서 쓰는 코드들을 발견할 수 있는 데 이것을 흩어진 관심사 (Crosscutting Concerns)라 부른다.
위와 같이 흩어진 관심사를 Aspect로 모듈화하고 핵심적인 비즈니스 로직에서 분리하여 재사용하겠다는 것이 AOP의 취지다.
AOP 주요 개념
Aspect : 위에서 설명한 흩어진 관심사(부가기능)를 모듈화 한 것. 주로 부가기능을 모듈화함.
Target : Aspect를 적용하는 곳 (클래스, 메서드 .. )
Advice : 실질적으로 어떤 일을 해야할 지에 대한 것, 실질적인 부가기능을 담은 구현체
JointPoint : Advice가 적용될 위치, 끼어들 수 있는 지점. 메서드 진입 지점, 생성자 호출 시점, 필드에서 값을 꺼내올 때 등 다양한 시점에 적용가능
PointCut : JointPoint의 상세한 스펙을 정의한 것. 'A란 메서드의 진입 시점에 호출할 것'과 같이 더욱 구체적으로 Advice가 실행될 지점을 정할 수 있음
스프링 AOP 특징
프록시 패턴 기반의 AOP 구현체, 프록시 객체를 쓰는 이유는 접근 제어 및 부가기능을 추가하기 위해서임
스프링 빈에만 AOP를 적용 가능
모든 AOP 기능을 제공하는 것이 아닌 스프링 IoC와 연동하여 엔터프라이즈 애플리케이션에서 가장 흔한 문제(중복코드, 프록시 클래스 작성의 번거로움, 객체들 간 관계 복잡도 증가 ...)에 대한 해결책을 지원하는 것이 목적