AOP [우테코 테코톡]

eunsiver·2023년 3월 20일
0

우테코 테크톡

목록 보기
1/3
post-thumbnail

AOP

Aspect Oriented Programming(관점 지향 프로그래밍)

횡단 관심사(Cross-Cutting Concern)의 분리를 허용함으로써 모듈성을 증가시키는 것이 목적인 프로그래밍 패러다임

여러 객체에 공통으로 적용할 수 있는 기능을 분리해서 개발자는 반복 작업을 줄이고 핵심 기능 개발에만 집중할 수 있음


기존 코드의 수정이 필요, 코드 중복 발생

이를 해결하기 위해 프록시를 사용!

프록시

자신이 클라이언트가 사용하려고 하는 실제 대상인 것처럼 위장해서 클라이언트의 요청을 받아주는 것(대리인, 대리자)

사용 목적에 따라

  1. 클라이언트가 타깃에 접근하는 방법을 제어하기 위해서

    프록시 패턴

  2. 타깃에 부가적인 기능을 부여해주기 위해서

    데코레이터 패턴

현재는 프록시 패턴과 데코레이터 패턴을 구분하지 않고 프록시로 통칭하겠다.

프록시를 사용하여 구현하면

  1. 기존 코드를 변경하지 않고 실행 시간을 출력할 수 있음
  2. 실행 시간을 구하는 코드의 중복 제거

핵심 기능과 부가 기능의 관점을 분리하여 부가 기능을 바라보는 공통된 부분을 추출하는 것이 AOP의 개념

이 부가 기능들은 가로 방향에서 공통된 부분을 추출했기 때문에 횡단 관심사 라고도 불린다.

정리

AOP에서 말하는 Aspect는 관심사라고도 할 수 있다.
횡단관심사의 분리를 허용함으로써 개발자는 반복작업을 줄이고 핵심 기능 개발에만 집중할 수 있다.

핵심 기능의 코드를 수정하지 않으면서 공통 기능의 구현을 추가하는 것

용어들

AOP를 사용하는 방법

핵심 기능에 공통 기능을 삽입하는 방법엔 무엇이 있을까?

  1. 컴파일 시점에 코드에 공통 기능 삽입
  2. 클래스 로딩 시점에 바이트 코드에 공통 기능 삽입
  3. 런타임 시점에 프록시 객체를 생성하여 공통 기능 삽입

세가지 방법 중 스프링에서는 어떤 방법을 사용할까?? 3번

나도 3번이라고 생각했다.
JPA에서도 프록시 객체에 대해 나오기 때문이다.

3번인 이유는?

  • 컴파일러나 클래스 로더 조작기를 설정하지 않아도 됨
  • 프록시는 메서드 오버라이딩 개념으로 동작하기 때문에, 스프링 AOP 메서드 실행 시점에만 AOP를 적용할 수 있음
  • 스프링 AOP는 스프링 컨테이너가 관리할 수 있는 빈에만 AOP를 적용할 수 있음
  • AspectJ를 직접 사용하는 것이 아니라, AspectJ의 문법을 차용하고 프록시 방식의 AOP를 적용

profile
Let's study!

0개의 댓글