AOP란?
AOP를 한글로 번역하면 관심 지향 프로그래밍 정도로 해석할 수 있다.
객체 지향 프로그래밍 즉, 객체 간의 관계를 지향하는 프로그래밍 방식
애플리케이션을 개발하다보면 애플리케이션 전반에 걸쳐 공통적으로 사용되는 기능들이 있기 마련인데, 이러한 공통 기능들에 대한 관심사를 바로 공통 관심 사항(Cross-cutting concern)이라고 한다.
그리고 우리가 흔히들 말하는 비즈니스 로직 즉, 애플리케이션의 주목적을 달성하기 위한 핵심 로직에 대한 관심사를 핵심 관심 사항(Core concern)이라고 한다.
핵심 관심 사항에 반대되는 개념으로 공통 관심 사항을 부가적인 관심 사항이라고 표현하기도 한다.
커피 주문을 위한 애플리케이션을 예로 들면,
커피 전문점의 주인이 고객에게 제공하는 커피 메뉴를 구성하기 위해 커피 종류를 등록하는 것과 고객이 마시고 싶은 커피를 주문하는 기능은 애플리케이션의 핵심 관심 사항에 해당 됩니다.
하지만 커피 주문 애플리케이션에 아무나 접속하지 못하도록 제한하는 애플리케이션 보안에 대한 부분은 애플리케이션 전반에 공통적으로 적용되는 기능이기 때문에 공통 관심 사항에 해당 됩니다.
커피 주문 애플리케이션에서 핵심 관심 사항과 공통 관심 사항을 그림으로 표현한 것이다.
보다시피 로깅, 보안, 트랜잭션 같은 공통 관심 사항 기능들의 화살표가 애플리케이션의 핵심 관심 사항들을 관통하고 있다.
이것은 공통 관심 사항의 기능들이 애플리케이션의 핵심 로직에 전반적으로 두루 사용된다는 의미다.
그리고 그림에서 보면 공통 관심 사항이 핵심 관심 사항에 멀찌감치 떨어져 있는 것을 볼 수 있는데 이는 공통 관심 사항이 핵심 관심 사항에서 분리 되어 있다는 것을 의미한다.
AOP라는 것은 애플리케이션의 핵심 업무 로직에서 로깅이나 보안, 트랜잭션 같은 공통 기능 로직들을 분리하는 것
AOP를 활용하면 애플리케이션에 전반에 걸쳐 적용되는 공통 기능(트랜잭션, 로깅, 보안, 트레이싱, 모니터링) 등을 비즈니스 로직에서 깔끔하게 분리하여 재사용 가능한 모듈로 사용할 수 있습니다.
'데이터를 처리하는 하나의 작업 단위’를 의미
예를 들어, 데이터베이스에 A 데이터와 B 데이터를 두 번에 걸쳐 각각 insert 하는 작업을 하나의 트랜잭션으로 묶는다면 A 데이터와 B 데이터는 모두 데이터베이스에 저장되던가 아니면
둘 중에 하나라도 오류로 인해 저장되지 않는다면 A, B 데이터는 모두 데이터베이스에 반영되지 않아야 한다(All or Nothing).
이러한 처리를 위해 일반적으로 트랜잭션에는 커밋(commit) 또는 롤백(rollback)이라는 기능이 있다.
커밋은 모든 작업이 성공적으로 수행되었을 경우 수행한 작업을 데이터베이스에 반영하는 것이고,
롤백은 작업이 하나라도 실패한다면 이전에 성공한 작업들을 작업 수행 이전 상태로 되돌리는 것을 말한다.