본문 바로가기
  • Where there is a will there is a way.
카테고리 없음

스프링 트랜잭션 서비스 추상화

by 소확행개발자 2020. 6. 3.

2020/05/24 - [개발/기타개발] - 마이크로 서비스 트랜잭션

 

마이크로 서비스 트랜잭션

내가 정리한 내용은 마이크로 서비스 패턴 (공)저: 크리스 리처드슨 에서 참조한 내용이다. 기존 앤터프라이즈 애플리케이션을 개발할 때 createOrder() 를 만든다고 해보자 1. 주문 가능한 소비자인

derekpark.tistory.com

2020/04/23 - [개발/spring-boot] - spring transaction 이란

 

spring transaction 이란

나는 spring 개발을 하면서 흔히 서비스 메소드에 @Transaction 어노테이션을 보곤했다.  처음엔 아무것도 모르고 개발을 했었지만 점차 여러가지 문제에 직면하게 되었고 그러다 보니 Transaction 에 ��

derekpark.tistory.com

지난 글들에서 spring 트랜잭션에 대해서 알아봤고 분산 트랜잭션과 분산 트랜잭션의 한계를 극복하는 사가 패턴에 대해서 알아봤었다.

 

이번엔 스프링에서 트랜잭션을 어떻게 추상화 하는지에 대해서 정리한다.

 

스프링 트랜잭션 서비스 추상화

스프링은 트랜잭션 기술의 공통점을 담는 트랜잭션 추상화 기술들을 제공하고 있다.

이를 이용하면 애플리케이션에서 직접 각 기술의 트랜잭션 API 를 이용하지 않고도, 일관된 방식으로 트랜잭션을 제어하는 트랜잭션 경계설정 작업이 가능해진다. 

-> 기존의 트랜잭션을 서비스에서 이용하면 서비스에서 의존도가 발생하게 되어 OCP 를 제대로 지키지 못하게 된다. 자세한 내용을 스프링 5장에 정리되어 있음

 

platformTransactionManager 가 스프링이 제공하는 트랜잭션 경계설정을 위한 추상 인터페이스다.

 

멀티스레드 환경에서 안전하지 않은 클래스를 빈으로 무작정 등록하면 심각한 문제가 발생하기 때문에 먼저 싱글톤으로 만들어져도 괜찮은지 생각하고 해당 Connection 을 bean 으로 등록해야 하지만 위의 manager 는 싱글톤으로 이용이 가능하게끔 설계되어 있다.

 

 

서비스 추상화와 단일 책임의 원칙

 

기술과 서비스에 대한 추상화 기법을 이용하면 특정 기술환경에 종속되지 않는 포터블한 코드를 만들 수 있다. 

 

userDao 와 UserService 는 각각 담당하는 코드의 기능적인 관심에 따라 분리되고, 서로 불필요한 영향을 주지 않으면서 독자적으로 확장이 가능하도록 만든 것이다. 

 

같은 애플리케이션 로직을 담은 코드지만 내용에 따라 분리했다. 같은 계층에서 수평적인 분리라고 볼 수 있다.

 

트랜잭션 추상화는 이와는 좀 다르다.

애플리케이션의 비즈니스 로직과 그 하위에서 동작하는 로우레벨의 트랜잭션 기술이라는 아예 다른 계층의 특성을 갖는 코드를 분리한 것이다. 

 

 

 애플리케이션 로직의 종류에 따른 수평적인 구분이든, 로직과 기술이라는 수직적인 구분이든 모두 결합도가 낮으며, 서로 영향을 주지 않고 자유롭게 확장될 수 있는 구조를 만들 수 있는 데는 스프링의 DI 가 중요한 역할을 하고 있다.

 

 

댓글