Spring Boot

[Spring] AOP 관점 지향 프로그래밍

먹세 2021. 10. 17. 09:11

AOP(Aspect Oriented Programming) 관점 지향 프로그래밍이란 무엇인가?

위키백과

횡단 관심사(Cross Cutting Concern), 말이 어렵다.

어려운건 역시 그림으로..

구글 이미지 검색

위 그림처럼 여러가지 로직들에 공통적으로 들어가는 로직이 있을 것이다.

예를들면 로그같은 것들은 여러 로직들의 상/하단에 들어가는 경우도 많다.

이렇게 횡단으로 분류할 수 있는 관심사를 Cross Cutting Concern 이라고도 부른다.

이런경우, 로그의 내용을 변경하고 싶을 때마다 여러 로직들을 모두 찾아다니면서 수정해야 하는 불편함도 있다.

그래서 공통적으로 들어가있는 로직들을 따로 분리해서 모듈화 하는것을 AOP라고 한다.

특징은, 소스코드도 아예 로직에서 제거하는 것이고, 이 제거한 코드를 실행 시켜줄수 있는 방법을 Spring에서 쉽게 제공 한다는 것이다.

즉, 기존 코드를 손대지 않고도 새 기능을 추가할 수 있다.

 

여러가지 AOP 구현 방법

- 컴파일시 코드를 넣어주는 방법 (AspectJ 라이브러리)

java파일 -> AOP 삽입 -> class파일로 컴파일

java 파일을 컴파일 할때, 중간에 우리가 원하는 로직을 끼워 넣는다.

컴파일 전에는 코드가 없었지만, 컴파일된 파일에는 로직이 끼워져 있다.

 

- 컴파일 이후, 바이트코드를 조작하는 방법 (AspectJ 라이브러리)

java파일 -> class파일 컴파일 완료 -> 클래스 로더로 읽음 -> AOP 삽입 -> 메모리에 올라감

컴파일 된 파일까지도 빼놓은 코드가 없고, 메모리에 올릴때 삽입 하는 방법이고,

이 역시 AspectJ 가 제공한다.

 

 

AspectJ - 위키백과, 우리 모두의 백과사전

AspectJ는 PARC에서 개발한 자바 프로그래밍 언어용 관점 지향 프로그래밍 (AOP) 확장 기능이다. 이클립스 재단 오픈 소스 프로젝트에서 독립형 또는 이클립스로 통합하여 이용 가능하다. AspectJ는 최

ko.wikipedia.org

 

- 프록시 패턴 (Spring AOP)

디자인 패턴중에 하나를 사용하여, AOP와 같은 효과를 내는 패턴이다.

분리할 로직을 따로 모듈로 떼어놓고, 프로그램 실행 시 떼어놓은 모듈을 거쳐갈 수 있도록

프록시 패턴을 사용한다.

 

 

Proxy

There are dozens of ways to utilize the Proxy pattern. Let’s go over the most popular uses. Access control (protection proxy). This is when you want only specific clients to be able to use the service object; for instance, when your objects are crucial p

refactoring.guru

 

 

반응형