[Spring Boot] AOP와 Transactional

안승섭·2022년 4월 18일
0

Spring Boot

목록 보기
3/3

AOP?

Spring의 주요 특징 중 하나인 AOP에 대해 알아보자.
AOP(관점 지향 프로그래밍)란 기존의 객체 지향 프로그래밍을 돕는 보조적인 기술로, 핵심적인 관심 사항과 공통 관심 사항으로 분리시키고 각각을 모듈화 하는 것을 의미한다.

예를 들어 생각해보자. 필자는 맥도날드 아르바이트에서 점장을 맡았고 맥도날드에는 다양한 메뉴들이 있다. 필자는 교육 담당이라 모든 직원을 불러 빅맥은 빵을 굽고..., 베토디는 빵을 굽고... 이런 식으로 하나하나 교육을 진행해 어제 막 신입 교육을 마쳤다. 그런데 하필이면 오늘 본사지침으로 빵대신 밥을 올리기로 했다.


(이렇게 하나부터 열까지 가르칠 수도 있지만...)

필자는 너무 게을러서 이 과정들이 상당히 귀찮았다. 그래서 머리를 쓰기로 했는데 메뉴가 버거인지 확인하고(PointCut) 밥을 올린다라는 공통의 과정(Advice)을 가르치면서 각각의 버거의 고유한 레시피(핵심기능)를 가르치는 방법을 택했다.

Spring AOP

Spring AOP는 프록시 패턴을 사용하고 다음과 같이 동작한다.
1. 다이내믹 프록시 객체의 생성 요청
2. 포인트컷을 통해 부가 기능 대상 여부 확인
3. 어드바이스로 부가 기능 적용
4. 실제 기능 처리
어떤 Bean이 Spring AOP의 대상이라면 Bean이 만들어질때 Spring AOP가 해당 프록시를 만들고 이 프록시를 Bean으로 등록한다. 그리고 원본이 사용되는 시점에 프록시를 대신 사용한다.

@Transactional

@Transactional 애노테이션이 붙어있으면 OwnerRepository 타입의 프록시가 새로 만들어지고 Spring AOP에 의해 자동으로 생성되는 OwnerRepository의 프록시에는 @Transactional 애노테이션이 지시하는 코드가 삽입된다.

@Transactional 애노테이션에 의해 추가되는 기능은 다음과 같다.

JDBC에서 트랜잭션 처리를 하려면 SQL 실행문 앞뒤에 setAutoCommit()와 commit()/rollback() 코드가 항상 붙는데 @Transactional 애노테이션은 프록시에 자동으로 그 코드를 넣어서 반복, 중복되는 코드를 생략할 수 있게하는 것이다.




출처 - MangKyu's Diary
예제로 배우는 스프링 입문

profile
Just Do It!

0개의 댓글