Spring - AOP (관점 지향 프로그래밍)

hisungmi·2024년 12월 19일

Java-Spring

목록 보기
4/8
post-thumbnail

AOP - 관전 지향 프로그래밍

AOP란?

💡핵심 관심사와 횡단 관심사에 대한 관점들로 프로그램을 분해하여 객체 지향이 추구하는 모듈을
  효과적으로 지원하도록하는 프로그래밍 기법을 의미
  • 기능별로 모듈을 분리 했음에도 불구하고 생기는 중복 코드의 단점을 해결하고자 ➡️ 공통 기능과 핵심 기능을 분리 ➡️ 필요할 때만 공통 기능을 핵심 기능에 넣어주는 형식
핵심 기능공통 기능
• 비즈니스 로직에 대한 관심사
• 애플리케이션 로직이 제공하는 고유의 업무 로직
• 핵심 관심사를 보조하기 위해 제공되는 기능
• 로그, 보안, 트랜잭션 기능 등
• 단독으로 사용되지 않고 핵심 기능과 함께 사용

실생활 예시

강의 프로세스쇼핑 프로세스
1. 출석 확인
2. 강의 진행
3. 중간고사 및 기말고사
4. 성적 처리
1. 쇼핑할 물건 고르기
2. 장바구니 담기
3. 결제하기
4. 영수증 받기

핵심 관심사(Core Concerns)횡단 관심사(Cross-cutting Concerns)
• 각각의 강의가 가지고 있는 독특한 내용과 각각에 맞춘 평가 방식
• 알고리즘 강의의 알고리즘 문제 풀이
• 데이터베이스 강의의 데이터베이스 설계
• 모든 강의에서 공통적으로 필요하지만, 각각의 핵심 내용과는 직접적인 관련이 없는 활동들을 의미
• 이러한 활동들은 모든 강의에 걸쳐 일관되게 발생
• 각 강의의 주된 목표를 달성하기 위해 필수적이지만 보조적인 역할을 수행
• 옷의 사이즈나 색상이 나와 잘 맞는 지 피팅하기
• 구매하려는 가구가 실측된 공간에 맞는 지 사이즈를 확인하기
• 구매하려는 책이 내가 원하는 주제나 방향성이 맞는지 확인하기
• 모든 쇼핑에서 공통적으로 필요하지만, 각각의 핵심 내용과는 직접적인 관련이 없는 활동들을 의미


👾 핵심 관심사와 횡단 관심사 분리 이점

1. 유지보수성 향상

  • 코드가 더 명확해지고 가독성이 향상
  • 수정이 필요한 경우 핵심 비즈니스 로직이나 반복되는 기능 중 변경할 위치를 찾기 쉬움

2. 코드 재사용성 증가

  • 횡단 관심사를 분리하여 모듈화함으로써 같은 기능이 필요한 다른 부분에서 이를 재사용할 수 있음
  • ex) 로깅, 보안 검증, 트랜잭션 관리 같은 기능들을 여러 컴포넌트에서 공유할 수 있음
  • 중복 코드를 줄이고 프로젝트의 일관성을 유지할 수 있음

3. 테스트 용이성

  • 핵심 로직이 횡단 관심사로부터 분리되면 핵심 기능을 독립적으로 테스트하기 쉬워짐
  • 단위 테스트를 수행할 때 필요한 설정이 줄어들어 테스트 작성이 간단해지고 빠른 수행이 가능함

4. 에러 추적과 디버깅 용이성

  • 프로그램의 특정 부분에서 문제가 발생했을 때 오류의 원인을 찾아내기 쉬움

5. 시스템의 확장성 향상

  • 횡단 관심사를 모듈화하고 일관된 방식으로 적용함으로써 새로운 기능을 시스템에 통합하기 더 쉬워짐
  • 시스템을 확장하거나 변경해야 할 때 핵심 로직에 미치는 영향을 최소화할 수 있음

6. 명확한 책임 분리

  • 각각의 모듈이나 컴포넌트가 명확한 책임을 가지고 있음



AOP 용어 설명

  • Aspect
    • 핵심 기능에서 분리한 부가 기능과, 이를 어디에 적용할 지를 정의한 것
    • 횡단 관심사를 구현하는 코드를 캡슐화하는 역할
    • AdvicePoint cut 포함
  • Advice
    • Aspect에서 정의되는 메소드
    • 횡단 관심사를 구현하는 실제 코드를 담고 있음
    • Before, After, Around 등 다양한 종류가 존재함
  • Join Point
    • Aspect가 적용될 수 있는 특정 지점
    • 메서드 실행, 필드 접근, 객체 생성 등 다양한 시점에 발생
    • AOP 프레임워크에서 제공

✅ Point cut

  • 조인 포인트 중에서 애스팩트가 실제로 적용될 조건 또는 기준을 정의
  • 조인 포인트들을 필터링하여 애스팩트 적용 위치를 결정
  • execution, within, this 등 다양한 표현식 사용 가능

관점 지향 프로그래밍
➡️ 공통 기능(트랜잭션, 로그, 보안 등)을 비즈니스 로직에서의 관점을 바탕으로 분리하여 객체 지향 프로그래밍 방식의 불필요한 반복을 해결하기 위한 방법

  • 부가 기능이 불특정 다수의 여러 곳에 작성되는 경우를 방지
  • 부가 기능 수정 시 사용된 모든 클래스를 수정하는 것이 아닌 하나로 관리할 수 있게 해줌
profile
난 성미다.

0개의 댓글