관점 지향 프로그래밍(Aspect Oriented Programming, AOP)
개념 스터디

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

💡관점 지향 프로그래밍 등장 배경

프로그래밍을 하다보면 공통적인 기능이 많이 발생하는데
이러한 공통 기능을 모든 모듈에 적용하기 위해선 상속을 이용한다.
하지만 Java에서는 다중 상속이 불가능하며 상속만으로 공통 기능을 부여하기에는 한계가 있다.


예를 들어, 객체마다 핵심 기능을 수행하기 위한 로직과 함께 로깅, 트랜잭션 등의 코드가 있는데 로깅과 트랜잭션 코드는 객체마다 동일한 기능을 수행할 확률이 높고 동일한 코드가 각각의 객체에 포함될 수 있다. 

💡 이러한 문제를 해결하기 위해 AOP를 사용한다.

AOP는 관점을 기준으로 개발하는 방식을 의미하며 
여기서 관점이란 어떤 기능을 구현할 때 '핵심 기능'과 '부가 기능'으로 구분해 각각을 하나의 관점으로 보는 것을 의미한다

💡 핵심 기능은 비스니스 로직을 구현하는 과정에서 비즈니스 로직이 처리하려는 목적 기능을 말한다.

예를 들어, 클라이언트로부터 상품 정보 등록 요청을 받아 데이터베이스에 저장하고, 저장된 상품 정보 데이터를 보여주는 코드가 핵심 기능이다.

💡 부가기능은 핵심 기능에 부가기능(비즈니스 로직 사이에 로깅 처리를 하거나 트랜잭션을 처리하는 코드 등)을 추가하는 것이다.

예를 들어, 부가기능에는 호출 시간 측정 등이 있다.

AOP의 관점에서 부가 기능은 핵심 기능이 어떤 기능인지에 무관하게 로직이 수행되기 전 또는 후에 수행되기만 하면 된다. 여러 로직에서 반복되는 부가 기능을 하나의 공통 로직으로 처리화하도록 모듈화해서 삽입하는 방식을 AOP라고 한다.

💡 AOP의 장점

  • 공통 관심 사항을 핵심 관심사항으로 분리시켜 핵심 로직을 깔끔하게 유지할 수 있다
  • 코드의 가독성, 유지보수성 등을 높일 수 있다
  • 각각의 모듈에 수정이 필요하면 다른 모듈의 수정 없이 해당 로직만 변경하면 된다
  • 공통 로직을 적용할 대상을 선택할 수 있다
  • 개발자가 비즈니스 로직을 구현하는 데만 집중할 수 있게 도와준다

 

참고

도서-스프링부트 핵심 가이드
[SpringBoot] AOP(Aspect Oriented Programming, 관점 지향 프로그래밍)의 개념 및 사용 방법 예제 코드 - (2/3) - MangKyu's Diary (tistory.com)

'개념 스터디' 카테고리의 다른 글

REST API  (0) 2024.01.15
레이어드 아키텍처  (0) 2024.01.14
제어 역전(Inversion of Control, IoC)과 의존성 주입(Dependency Injection, DI)  (0) 2024.01.14
[개념스터디] 4주차  (0) 2021.08.25
[개념 스터디] 3주차  (0) 2021.08.17