티스토리 뷰

728x90
반응형

 

이전 글에서 스프링 프레임워크의 네 가지 특징과 AOP에 대해 살펴봤었다.

 

관련 글: https://gnidinger.tistory.com/450

 

[Spring]Spring Framework, Spring Triangle

Spring Framework, 혹은 Spring은 Java/Kotlin을 기반으로 한 오픈소스 웹 프레임워크이다. 특히나 엔터프라이즈급 애플리케이션 개발에 필요한 기능이 종합적으로 포함되어 있는데, 대한민국 전자정부

gnidinger.tistory.com

다시 불러오자면 AOP(관심 지향 프로그래밍)는 OOP(Object Oriented Programming)를 구현(보완)하는 방식으로,

 

관심사(기능)의 분리를 통해 문제를 해결하는 패러다임이다.

 

구체적으로는 공통 관심사항(Cross-Cutting Concern, Aspect, 부가 기능, 횡단 관심사라고도 불림)과

 

핵심 관심사항(Core Concern, 핵심 기능)을 분리해

 

흩어진 횡단 관심사항을 Aspect로 모듈화*, 재사용성을 높이고 핵심 기능 개발에 집중하는 패러다임이라고 볼 수 있다.

 

*모듈화 - 공통된 로직이나 기능을 하나의 단위로 묶는 것

 

위의 그림을 조금 다른 관점에서 보면 아래와 같이 될 수도 있다.

 

여기서 공통 관심사항이란 그림에서도 보듯이 로깅, 보안, 트랜잭션 등 앱 전반에 공통으로 사용되는 기능을 말하는데,

 

핵심 기능을 보조하기 위해 사용되며, 단독이 아닌 핵심기능과 함께 사용되는 기능이다.

 

즉 필수적이지만 핵심적이지 않아 반복해 나타나는 코드이며, 이 코드의 리팩터링이 AOP의 핵심이라 볼 수도 있다.

 

트랜잭션에 대해선 아래 글에서 설명했다.

https://gnidinger.tistory.com/444

 

[데이터베이스]SQL

SQL(Structured Query Language - 구조화된 쿼리 언어)은 데이터베이스용 프로그램 언어이다. 에스큐엘 혹은 시퀄이라고 읽으며, 데이터베이스 시스템에서 자료를 처리하는 용도로 사용된다. 이름에서

gnidinger.tistory.com

OOP에서는 공통적인 기능을 각 객체의 횡단으로 입력했다면, AOP는 공통적인 기능을 종단 간으로 삽입해

 

관점별로 외부에서 접근할 수 있게 했는데, 이는 OOP의 한계를 극복할 수 있게 도와준다.

 

만약 AOP, 즉 관심사의 분리가 없다면 비즈니스 클래스에 횡단 관심사와 핵심 관심사가 공존하게 된다. 이는

 

  • 메서드의 복잡도를 증가시켜 코드 파악과 수정을 어렵게 만들고,
  • 부가기능 메서드의 반복적 구현으로 인해 횡단 관심사의 모듈화를 어렵게 만든다.

따라서 이를 뒤집으면 AOP의 장점이 되는데, 

 

  • 중복되는 코드 제거
  • 재활용성의 극대화
  • 변화,수용의 용이성

이 그것이다.

 

계속해서 AOP에서 쓰이는 용어들에 대해 짚고 넘어가자.

 

  • Aspect

    • 흩어진 공통 관심사항을 모듈화 한 것
    • Aspect = (여러) Advice + (여러) Pointcut
  • Target

    • Aspect가 적용되는, 핵심 기능을 담고 있는 모듈(클래스, 메서드,...)
    • 기본적으로 Adivce를 받는 객체이며 포인트 컷으로 결정
  • Join Point

    • Advice가 적용되는 위치, 혹은 AOP를 적용할 수 있는 모든 지점
    • 클래스 초기화, 객체 인스턴스화, 메서드 호출, 필드 접근, 예외 발생과 같은 애플리케이션 실행 흐름에서의 특정 포인트
    • 공통 관심사항은 조인 포인트 전/후로 AOP에 의해 자동으로 추가됨
    • 스프링 AOP는 프록시 방식을 사용하기 때문에 조인 포인트는 항상 메서드 실행 지점으로 제한
    • Advice의 적용이 필요한 곳은 앱 내에 메서드를 갖는다.
  • Pointcut

    • Join Point의 상세한 스펙 정의
    • 'A 메서드의 진입 시점에 호출할 것'과 같이 구체적으로 Advice가 실행될 지점을 정할 수 있음
    • AspectJ 표현식을 사용해서 지정
    • 프록시를 사용하는 스프링 AOP는 메서드 실행 지점만 포인트 컷으로 선별 가능
  • Advice

    • Join Point에서 수행되는 코드, 실질적인 부가기능을 담은 구현체
    • Aspect를 언제 핵심 코드에 적용할지 정의
    • 시스템 전체 Aspect에 API 호출 제공
    • 상세 정보와 모든 메서드를 로그로 남기기 위해 메서드 시작 전의 조인 포인트 S를 선택
  • Weaving

    • Pointcut으로 결정한 Target의 Join Point에 Advice를 적용하는 것 - Advice를 핵심 코드에 적용
    • 구체적으로는 Aspect를 Target 객체에 제공하여 새로운 프록시 객체를 생성하는 과정
    • 핵심 기능 코드에 영향을 주지 않으면서 부가 기능을 추가할 수 있음
    • 스프링 AOP에서는 프록시 객체를 생성하는 것 까지가 위빙
  • AOP 프록시(Proxy)

    • 해당 객체에 Advice가 적용된 후 생성된 객체
    • AOP 기능을 구현하기 위해 만든 프록시 객체
    • 스프링에서 AOP 프록시는 JDK 동적 프록시 또는 CGLIB 프록시
  • Advisor

    • 하나의 Advice와 하나의 Pointcut으로 구성
    • 스프링 AOP에서만 사용되는 개념

마지막으로 스프링 AOP의 특징에 대해 살펴보고 글을 마치자.

 

  • 스프링 빈에만 AOP를 적용 가능
  • 프록시 패턴 기반의 AOP 구현체인 프록시 객체를 쓰는 이유는 접근 제어 및 부가기능 추가를 위해
  • 모든 AOP 기능을 제공하는 것이 아닌 스프링 IoC와 연동하여 가장 흔한 문제(중복코드, 프록시 클래스 작성의 번거로움, 객체들 간 관계 복잡도 증가 ...)에 대한 해결책을 지원하는 것이 목적 
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함