본문 바로가기
Spring

[Spring] AOP란? (Aspect Oriented Programming)

by jungha_k 2022. 10. 12.

AOP (Aspect Oriented Programming)란?

= 관심(Aspect) 지향 프로그래밍

 

 

AOP에서 말하는 관심 =

애플리케이션에 필요한 기능 중 공통적으로 적용되는 기능에 대한 관심


공통 관심 사항 & 핵심 관심 사항?

 

공통 관심 사항 : 애플리케이션 전반에 공통적으로 사용되는 기능들

(=부가적인 관심 사항)

핵심 관심 사항 : 비즈니스 로직, 애플리케이션 주 목적 달성 위한 핵심 로직

 

 

ex) 커피 주문을 위한 애플리케이션 예시


 

https://creamilk88.tistory.com/148

AOP 적용 전 

 

 

https://creamilk88.tistory.com/148

AOP 적용 후

: 공통 기능 로직이 분리되어

핵심 업무 로직에 두루 사용되는 것을 확인 할 수 있다.

 

 

 

따라서 AOP = 애플리케이션의 핵심 업무 로직에서 공통 기능 로직들을 분리하는 것!

 


 

AOP가 필요한 이유

 

핵심 로직에서 공통 기능을 분리하는 이유 =

  • 코드의 간결성 유지
  • 객체 지향 설계 원칙에 맞는 코드 구현 (OOP 를 더욱 OOP 답게!)
  • 코드의 재사용

- 핵심 로직에 공통 기능 코드들이 여기저기 보이면.. 코드 자체가 복잡해짐

- 유지 보수, 버그 ⬇를 위해 코드 구성 간단하게 필요하다

- 분리가 안되었을 때 공통 기능이 수정이 된다면?

--> 공통 기능 이용하는 애플리케이션의 모~든 코드들을 수정해줘야 하기 때문에 문제가 됨!

 

 


트랜잭션 (Transaction) ?

 

트랜잭션 = 데이터를 처리하는 하나의 작업 단위

 

All or Nothing으로, 둘 다 반영되거나 아님 아예 저장이 되지 않아야 함.

 

Commit - 모든 작업 성공, db에 반영

Rollback - 작업이 하나라도 실패ed, 작업 이전 상태로 되돌림

 

애플리케이션 전반에 걸쳐

트랜잭션 관련 중복 코드가 수도 없이 나타난다면,

'중복된 코드'를 '공통화'하여 재사용 가능하게 만들어야 한다! = AOP

 

 

==> Spring에서 @Transactional 애노테이션 붙인다면

공통 기능들을 비즈니스 로직에서 분리 가능하다.

분리하여 재사용 모듈로 사용함!

공통기능 예시

 

댓글