AOP (Aspect Oriented Programming)란?
= 관심(Aspect) 지향 프로그래밍
AOP에서 말하는 관심 =
애플리케이션에 필요한 기능 중 공통적으로 적용되는 기능에 대한 관심
공통 관심 사항 & 핵심 관심 사항?
공통 관심 사항 : 애플리케이션 전반에 공통적으로 사용되는 기능들
(=부가적인 관심 사항)
↕
핵심 관심 사항 : 비즈니스 로직, 애플리케이션 주 목적 달성 위한 핵심 로직
ex) 커피 주문을 위한 애플리케이션 예시
AOP 적용 전
↕
AOP 적용 후
: 공통 기능 로직이 분리되어
핵심 업무 로직에 두루 사용되는 것을 확인 할 수 있다.
따라서 AOP = 애플리케이션의 핵심 업무 로직에서 공통 기능 로직들을 분리하는 것!
AOP가 필요한 이유
핵심 로직에서 공통 기능을 분리하는 이유 =
- 코드의 간결성 유지
- 객체 지향 설계 원칙에 맞는 코드 구현 (OOP 를 더욱 OOP 답게!)
- 코드의 재사용
- 핵심 로직에 공통 기능 코드들이 여기저기 보이면.. 코드 자체가 복잡해짐
- 유지 보수, 버그 ⬇를 위해 코드 구성 간단하게 필요하다
- 분리가 안되었을 때 공통 기능이 수정이 된다면?
--> 공통 기능 이용하는 애플리케이션의 모~든 코드들을 수정해줘야 하기 때문에 문제가 됨!
트랜잭션 (Transaction) ?
트랜잭션 = 데이터를 처리하는 하나의 작업 단위
All or Nothing으로, 둘 다 반영되거나 아님 아예 저장이 되지 않아야 함.
Commit - 모든 작업 성공, db에 반영
Rollback - 작업이 하나라도 실패ed, 작업 이전 상태로 되돌림
애플리케이션 전반에 걸쳐
트랜잭션 관련 중복 코드가 수도 없이 나타난다면,
'중복된 코드'를 '공통화'하여 재사용 가능하게 만들어야 한다! = AOP
==> Spring에서 @Transactional 애노테이션 붙인다면
공통 기능들을 비즈니스 로직에서 분리 가능하다.
분리하여 재사용 모듈로 사용함!
'Spring' 카테고리의 다른 글
[Spring] 아키텍쳐(Architecture)란? / Spring Framework 모듈 구성 보기 (0) | 2022.10.12 |
---|---|
[Spring] PSA 란? (Portable Service Abstraction) (0) | 2022.10.12 |
[Spring] IoC(Inversion of Control) / DI(Inversion of Control) 이란? (0) | 2022.10.12 |
[Spring] POJO란? (Plain Old Java Object) (0) | 2022.10.11 |
[Spring] Spring Framework란? / Framework과 Library의 차이 (1) | 2022.10.11 |
댓글