AOP(Aspect Oriented Programming) 관점 지향 프로그래밍이란 무엇인가?
횡단 관심사(Cross Cutting Concern), 말이 어렵다.
어려운건 역시 그림으로..
위 그림처럼 여러가지 로직들에 공통적으로 들어가는 로직이 있을 것이다.
예를들면 로그같은 것들은 여러 로직들의 상/하단에 들어가는 경우도 많다.
이렇게 횡단으로 분류할 수 있는 관심사를 Cross Cutting Concern 이라고도 부른다.
이런경우, 로그의 내용을 변경하고 싶을 때마다 여러 로직들을 모두 찾아다니면서 수정해야 하는 불편함도 있다.
그래서 공통적으로 들어가있는 로직들을 따로 분리해서 모듈화 하는것을 AOP라고 한다.
특징은, 소스코드도 아예 로직에서 제거하는 것이고, 이 제거한 코드를 실행 시켜줄수 있는 방법을 Spring에서 쉽게 제공 한다는 것이다.
즉, 기존 코드를 손대지 않고도 새 기능을 추가할 수 있다.
여러가지 AOP 구현 방법
- 컴파일시 코드를 넣어주는 방법 (AspectJ 라이브러리)
java파일 -> AOP 삽입 -> class파일로 컴파일
java 파일을 컴파일 할때, 중간에 우리가 원하는 로직을 끼워 넣는다.
컴파일 전에는 코드가 없었지만, 컴파일된 파일에는 로직이 끼워져 있다.
- 컴파일 이후, 바이트코드를 조작하는 방법 (AspectJ 라이브러리)
java파일 -> class파일 컴파일 완료 -> 클래스 로더로 읽음 -> AOP 삽입 -> 메모리에 올라감
컴파일 된 파일까지도 빼놓은 코드가 없고, 메모리에 올릴때 삽입 하는 방법이고,
이 역시 AspectJ 가 제공한다.
- 프록시 패턴 (Spring AOP)
디자인 패턴중에 하나를 사용하여, AOP와 같은 효과를 내는 패턴이다.
분리할 로직을 따로 모듈로 떼어놓고, 프로그램 실행 시 떼어놓은 모듈을 거쳐갈 수 있도록
프록시 패턴을 사용한다.
'Spring Boot' 카테고리의 다른 글
[Spring Boot] Gradle 로 빌드 하는 법 (0) | 2021.10.17 |
---|---|
[Java] 8 에서 11로 변경 잘 안될 때 (0) | 2021.10.17 |
[Spring Boot] 스프링부트 간단 세팅 3분컷!! (0) | 2021.10.16 |
[Spring Boot] 로그레벨 Debug 설정 (0) | 2021.10.16 |
[Spring Boot] 프로젝트 실행 시 8080 was already in use 에러 (0) | 2021.10.16 |