4장 트랜잭션 관리 사가
4장 트랜잭션 관리 사가
목차
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
4장 트랜잭션 관리: 사가
4.1 마이크로서비스 아키텍처에서의 트랜잭션 관리
4.1.1 분산 트랜잭션의 필요성
4.1.2 분산 트랜잭션의 문제점
4.1.3 데이터 일관성 유지: 사가 패턴
4.2 사가 편성
4.2.1 코레오그래피 사가
4.2.2 오케스트레이션 사가
4.3 비격리 문제 처리
4.3.1 비정상 개요
4.3.2 비격리 대책
4.4 주문 서비스 및 주문 생성 사가 설계
4.4.1 OrderService 클래스
4.4.2 주문 생성 사가 구현
4.4.3 OrderCommandHandlers 클래스
4.4.4 OrderServiceConfiguration 클래스
4.5 마치며
정리 전략?
- 전부 정리는 NO
- 핵심중에서 꼭 적고 가야겠다 싶은 것만!
- 나의 생각을 섞어서 적을것..!
- 떠오르는 것 먼저 간단하게..!
내용 정리 4장 트랜잭션 관리: 사가
4.1 마이크로서비스 아키텍처에서의 트랜잭션 관리
4.1.1 분산 트랜잭션의 필요성
- 일단 이것을 이야기 한 이유가 msa에서는 서로 다른 서비스간의 일관성이 유지가 되어야한다. 그런데 보통의 경우 서비스마다 DB가 분리되어있다. 따라서 서비스 A가 서비스 B를 호출할 경우, B의 실패가 A에 전파되어야하는데 이것을 위해서 분산 트랜잭션이라는 것을 이용할 수 있다.
4.1.2 분산 트랜잭션의 문제점
- 일단 분산 트랜잭션이란, 특정한 표준을 이용하여 서로다른 분산된 DBMS에 광역적으로 트랜잭션을 거는 방법이다.
- 이 방법의 문제점은 최신 기술 중 일부는 이 기능을 지원하지 않는다는 것이다. 이것을 위해서 기술을 포기해야하는 이슈가 발생.
- FIXME 추가적인 관리 포인트는 무엇?
4.1.3 데이터 일관성 유지: 사가 패턴
- 그래서 분산 트랜잭션의 대안으로 사가 패턴이라는 것이 있다.
- 이 패턴은 2가지 종류가 있다.(아래서 설명)
4.2 사가 편성
4.2.1 코레오그래피 사가
- 이 방법은 중앙 통제 없이, 진행하는 방법임.(흐름 추적이 어려움.)
4.2.2 오케스트레이션 사가
- 중앙 통제로 트랜잭션을 관리하는 방법임.
- 이때 사용되는 용어.
- 보상 트랜잭션 : 특정 트랜잭션의 실패할경우, 보상용으로 사용할 트랜잭션
- 피벗 트랜잭션? : 특정 트랜잭션이후 실행이 보장되는 것.
- 재사용 트랜잭션? : 재사용이 가능한(멱등성 보장) 트랜잭션.
- 이때 사용되는 용어.
4.3 비격리 문제 처리
4.3.1 비정상 개요
- 단순한 SAGA의 문제점 : ACID중, I를 Isolation 격리를 보장하지 못함. 그래서 이것에 대한 대책이 필요함.
- 한가지 있음.(기억 안남. 채워 넣을것.)
- 더티 읽기
4.3.2 비격리 대책
- 대책을 한 7개 정도 이야기함.
- 시맨틱 락 걸기
- 값 다시 읽기
- 값 다시 쓰기.
4.4 주문 서비스 및 주문 생성 사가 설계
4.4.1 OrderService 클래스
4.4.2 주문 생성 사가 구현
4.4.3 OrderCommandHandlers 클래스
4.4.4 OrderServiceConfiguration 클래스
4.5 마치며
- 4.4 로직 요약.
- 일단 이벤츄에이트 트램이라는 프레임워크를 씀.
- 주문생성을 예로 들면
- 예시는 오케스트레이션 사가 방식임.
- CreateOrderSaga가 주문생성의 순서를 관장한다고 보면됨.
- 시작은 orderService의 createOrder로 부터, 사가 생성이 시작됨.
- 사가에 참여하는 구성원들은 이런 커맨드가 오면 이 서비스를 호출한다 라는 OrderCommandHandlers같은 클래스를 정의해둠.
- 이 채널에서 이런 메시지가 오면, 이런 서비스로직을 처리하고 이 메시지를 넘겨라.
내 생각
- 뒤에 있는 소스코드는 내용이 좀 복잡하고, 생소한 용어가 많이 나와 물음표 친 부분이 많았다. 핵심은 빠르게 보고, 필요한 부분만 챙기기다. 잊지 말자
참고자료
- https://freeend.tistory.com/110?category=137034
- https://m.blog.naver.com/leety72/221739596027
TODO
- 추후 더 보강 할것.
This post is licensed under CC BY 4.0 by the author.