[Spring] AOP가 필요한 이유

SEB_BE_43_yeori316·2023년 2월 8일
0

Spring

목록 보기
14/22

AOP가 필요한 이유

기본 개념

  • 핵심 기능(Core Concerns) : 업무 로직을 포함하는 기능
  • 부가 기능(CROSS-CUTTING CONCERNS) : 핵심 기능을 도와주는 부가적인 기능
    • 로깅, 보안, 트랜잭션 등이 있습니다.
  • Aspect : 부가 기능을 정의한 코드인 어드바이스(Advice)와 어드바이스를 어디에 적용할지 결정하는 포인트컷(PointCut)을 합친 개념입니다. (Advice + PointCut ⇒ Aspect)

주요 개념

  • 추후 배울 Spring MVC 구조@Controller, @Service, @Repository와 같이 관심사 별로 계층을 나눠 객체를 관리하게 됩니다.
  • 관심사의 분리는 모듈화의 핵심입니다.

문제점

  • 업무 관련 코드는 핵심 관심사(Core Concerns: 핵심 기능)라고 합니다.

  • 특정 관심사 업무 코드에 트랜잭션, 보안, 로깅 등의 코드가 존재하고 업무와는 관련이 없지만 애플리케이션에 필수적인 부가 기능입니다.

  • 트랜잭션, 보안, 로깅 기능은 불특정 다수의 클래스에서 존재하게 됩니다.

  • 관심사 관점에서는 트랜잭션, 보안, 로깅 코드들을 횡단 관심사(Cross-cutting Concerns: 부가 기능)라고 합니다.

  • 비즈니스 클래스에 횡단 관심사와 핵심 관리사가 공존하게 됩니다.

  • 메소드 복잡도 증가 → 비즈니스 코드 파악이 어렵게 됩니다.

  • 부가 기능의 불특정 다수 메소드가 반복적으로 구현 → 횡단 관심사의 모듈화가 어렵습니다.

AOP의 등장

  • OOP만 사용해선 횡단 관심사 코드를 깔끔하게 분리하고 비즈니스 코드에 적용하기 어려웠습니다.
  • 이러한 OOP의 관심사 분리에 대한 한계적인 부분을 해결하고자 AOP가 등장

AOP란 무엇일까?

AOP(Aspect-Oriented Programming)는 기존과 다른 프로그램 구조 사고 방식을 제공함으로써 객체 지향 프로그래밍(OOP)의 부족한 부분을 보완합니다.

OOP의 모듈화의 핵심 단위는 클래스이고, AOP의 모듈화의 핵심 단위는 관점입니다.
Aspect는 여러 유형과 객체 간에 발생하는 문제 (ex - 트랜잭션)의 모듈화를 가능하게 합니다.


AOP의 핵심 기능과 부가 기능

  • 핵심 기능(Core Concerns)
    • 객체가 제공하는 고유의 기능(업무 로직 등을 포함)입니다.
  • 부가 기능(CROSS-CUTTING CONCERNS)
    • 핵심 기능을 보조하기 위해 제공되는 기능입니다.
    • 로그 추적 로직, 보안, 트랜잭션 기능 등이 있습니다.
    • 단독으로 사용되지 않고 핵심 기능과 함께 사용됩니다.
  • 부가 기능이 필요한 경우엔 핵심 기능과 부가 기능 로직이 하나의 객체 형태로 합쳐져서 하나의 로직으로 완성되며, 서비스를 실행하면 핵심 기능과 부가 기능이 함께 실행됨

AOP가 필요한 이유

  • 소프트웨어 개발에서 변경 지점은 하나가 될 수 있도록 잘 모듈화 되어야 합니다.
    부가 기능처럼 특정 로직을 애플리케이션 전반에 적용하는 문제는 일반적인 OOP 방식으로는 해결이 어렵기 때문에 핵심 기능과 부가 기능을 분리하는 AOP 방식이 필요합니다.

핵심 포인트

  • 객체 지향 프로그래밍(OOP)는 객체 지향 프로그래밍이다.
  • OOP 방식의 프로그래밍을 했을 때 여러 곳에서 공통적으로 사용되는 부가 기능의 중복 코드가 발생
  • 중복되는 부가 기능에 수정 및 삭제가 필요하게 되면 사용되는 모든 곳에 수정 및 삭제 필요
  • 관심 지향 프로그래밍(AOP)은 OOP 방식의 불필요한 반복을 해결하기 위한 방법

0개의 댓글