Programming/Spring

AOP - 관점 지향 프로그래밍

Boxya 2025. 5. 20. 23:58

[KT] AIVLE SCHOOL 36일차

 

AOP(Aspect-Oriented Programming)

  • 관점 지향 프로그래밍
  • 핵심 관심사와 횡단 관심사에 대한 관점들로 프로그램을 분해하여 객체 지향이 추구하는 모듈을 효과적으로 지원하도록 하는 프로그래밍 기법
  • 기능별로 모듈을 분리했음에도 불구하고 생기는 중복 코드의 단점을 해결하고자 나온 방식
  • 공통 기능과 핵심 기능을 분리하여 필요할 때만 공통 기능을 핵심 기능에 넣어주는 형식
  • 핵심 기능
    • 비즈니스 로직에 대한 관심사로 애플리케이션 로직이 제공하는 고유의 업무 로직
  • 공통(부가) 기능
    • 핵심 관심사를 보조하기 위해 제공되는 기능으로 로그, 보안, 트랜잭션 기능 등을 포함
    • 단독으로 사용되지 않고 핵심 기능과 함께 사용
  • AOP 예시
    • 대학교 강의
      • 대학에서 여러 강의를 듣고 있다고 가정해보자. 강의는 다음과 같은 프로세스로 진행
        1. 출석 확인
        2. 강의 진행
        3. 중간고사 및 기말고사
        4. 성적 처리
      • 이러한 프로세스는 모든 강의에 해당되는 것
      • 여기서 핵심 관심사(Core Concerns)는 각각의 강의가 가지고 있는 독특한 내용과 각각에 맞춘 평가 방식
        • 알고리즘 강의의 알고리즘 문제 풀이
        • 데이터베이스 강의의 데이터베이스 설계
      • 반면에 횡단 관심사(Cross-cutting Concerns)는 출석 관리, 시험 관리, 성적 평가와 같이 모든 강의에서 공통적으로
        필요하지만, 각각의 핵심 내용과는 직접적인 관련이 없는 활동들을 의미
      • 즉, 이러한 활동들은 모든 강의에 걸쳐 일관되게 발생하며, 각 강의의 주된 목표를 달성하기 위해 필수적이지만 보조적인 역할을 수행
      • 따라서, 핵심 관심사와 횡단 관심사를 명확히 분리하여 관리하는 것이 바람직함
    • 쇼핑 프로세스
      • 우리가 마트에 간다고 가정하면 목적에 따라 옷 가게를 가거나, 가구 매장에 가거나, 서점에 갈 수 있음
      • 다음은 쇼핑할 시 행위에 대해 정의한 것
        1. 쇼핑할 물건 고르기
        2. 장바구니 담기
        3. 결제하기
        4. 영수증 받기
      • 해당 프로세스는 어느 가게를 가더라도 동일
      • 여기서 핵심 관심사(Core Concerns)는 가게마다 고르는 물건이 다르고 구매를 결정하는 요인이 다르다는 것
        이 핵심
        • 옷의 사이즈나 색상이 나와 잘 맞는 지 피팅하기
        • 구매하려는 가구가 실측된 공간에 맞는 지 사이즈를 확인하기
        • 구매하려는 책이 내가 원하는 주제나 방향성이 맞는지 확인하기
      • 반면에 횡단 관심사(Cross-cutting Concerns)는 장바구니 담기, 결제, 영수증 받기와 같이 모든 쇼핑에서 공통적으로 필요하지만, 각각의 핵심 내용과는 직접적인 관련이 없는 활동들을 의미
  • 핵심 관심사와 횡단 관심사 분리 이점
    1. 유지보수성 향상
      • • 코드가 더 명확해지고 가독성이 향상
      • • 수정이 필요한 경우 핵심 비즈니스 로직이나 반복되는 기능 중 변경할 위치를 찾기 쉬움
    2. 코드 재사용성 증가
      • • 횡단 관심사를 분리하여 모듈화함으로써 같은 기능이 필요한 다른 부분에서 이를 재사용할 수 있음
      • • 예를 들어, 로깅, 보안 검증, 트랜잭션 관리 같은 기능들을 여러 컴포넌트에서 공유할 수 있음
      • • 중복 코드를 줄이고 프로젝트의 일관성을 유지할 수 있음
    3. 테스트 용이성
      • • 핵심 로직이 횡단 관심사로부터 분리되면 핵심 기능을 독립적으로 테스트하기 훨씬 쉬워짐
      • • 특히, 단위 테스트를 수행할 때 필요한 설정이 줄어들어 테스트 작성이 간단해지고 빠른 수행이 가능
    4. 에러 추적과 디버깅 용이성
      • • 프로그램의 특정 부분에서 문제가 발생했을 때 오류의 원인을 찾아낼 수 있음
    5. 시스템의 확장성 향상
      • • 횡단 관심사를 모듈화하고 일관된 방식으로 적용함으로써 새로운 기능을 시스템에 통합하기가 더 쉬워짐
      • • 또한, 시스템을 확장하거나 변경해야 할 때 핵심 로직에 미치는 영향을 최소화할 수 있음
    6. 명확한 책임 분리
      • • 각각의 모듈이나 컴포넌트가 명확한 책임을 가지고 있음
  • AOP 간단 용어
    • 애스팩트(Aspect)
      • 핵심 기능에서 분리한 부가 기능과, 이를 어디에 적용할 지를 정의한 것
      • 횡단관심사를 구현하는 코드를 캡슐화하는 역할
      • 어드바이스와 포인트컷을 포함
    • 어드바이스 (Advice)
      • 애스팩트(Aspect)에서 정의되는 메소드
      • 횡단관심사를 구현하는 실제 코드를 담고 있음
      • Before, After, Around 등 다양한 종류가 존재
    • 조인포인트(Join Point)
      • 애스팩트(Aspect)가 적용될 수 있는 특정 지점
      • 메서드 실행, 필드 접근, 객체 생성 등 다양한 시점에 발생
      • AOP 프레임워크에서 제공
    • 포인트컷(Pointcut)
      • 조인포인트 중에서 애스팩트가 실제로 적용될 조건 또는 기준을 정의
      • 조인포인트들을 필터링하여 애스팩트 적용 위치를 결정
      • execution, within, this 등 다양한 표현식을 사용 가능
    • 관점 지향 프로그래밍은 공통 기능(트랜잭션, 로그, 보안 등)을 비즈니스 로직에서의 관점을 바탕으로 분리하여 객체 지향 프로그래밍 방식의 불필요한 반복을 해결하기 위한 방법
      • 부가 기능이 불특정 다수의 여러 곳에 작성되는 경우를 방지
      • 부가 기능 수정 시 사용된 모든 클래스를 수정하는 것이 아닌 하나로 관리할 수 있게 해줌

 

'Programming > Spring' 카테고리의 다른 글

MVC 디자인 패턴  (0) 2025.05.22
Spring Boot  (0) 2025.05.22
DI - 의존성 주입  (1) 2025.05.20
IoC - 제어의 역전(Inversion of Control)  (3) 2025.05.20
OOP + POJO  (0) 2025.05.20