1. MSA(Microservice Architecture)
Microservice Architecture 는 Monolithic Architecture와 달리,
여러 개의 서비스로 나누어서 API 서비스의 책임분리를 한 아키텍쳐 이다.
한 서비스의 장애가 다른 서비스에 영향을 주는 현상을 SPOF(Single Point Of Failure)라 하는데,
MSA는 서비스가 독립적으로 실행되기에 특정 서비스가 다른 서비스에 주는 영향이 적다.
그렇지만, 이 서비스를 사용하기 위해서는 필연적으로 여러 서버를 유지해야 함과 동시에
이를 중앙화할 API GW라는 추가적인 인스턴스의 사용도 필요하다.
2. 분산 트랜잭션
한편, 각 서비스에 대한 DB 운영 방식 또한 어떻게 해야할 지를 생각해봐야 한다.
Monolithic이라면 여러 DB에 대한 하나의 connection을 통해 Global Transaction으로 여러 DB에 동시에 접근 하거나
혹은 여러 connection을 만들어서 Local Transaction을 여럿 관리하는 방식,
커밋에 대한 배분을 해줘야 하는 등의 여러 설정이 필요하기에 DB관리에서는 상당히 어려운 측면이 있다.
그렇지만 MSA의 경우, 각 서비스는 하나의 DB에만 연결이 되어 있는 connection을 통해 Local Transaction으로
단일 DB에 접근 후, 이 한 개의 DB에 대한 Transaction을 신경써주면 된다.
그렇기에 각각의 서비스는 단일 connection(물론, 트랜잭션을 여러번 쓸 수는 있지만)
그리고 이와 같은 서비스를 가진 여러 서버 인스턴스가 각각의 단일 DB에 대해 트랜잭션을 관리하게 되는데,
이것이 바로 분산 트랜잭션이다.
문제점이라면, 분산된 트랜잭션이 어떻게 다수의 DB의 일관성을 모두 관리하느냐 인 것이다.
가령 한 개의 DB의 트랜잭션만으로 여러 테이블의 일관성을 유지하는 과정을 살펴보자.
예를 들어 패키지 여행에 비행기, 숙소 예약이 완료되어야만 commit, 즉 트랜잭션 수행이 된다고 가정하자.
비행기 예약을 완료 후 숙소 예약을 하려고 했는데 숙소 예약이 되지 않는다면,
이전의 비행기 예약을 롤백해서 전체 패키지 여행에 대한 트랜잭션이 롤백되는 것으로 일관성을 관리한다.
그런데, 분산된 트랜잭션이라면 서로다른 서비스 묶음 A,B,C에 대한 트랜잭션이 한 번에 이뤄지지 않기 때문에
(즉, 서로 다른 DB에 대한 롤백이 자동적으로 이뤄지지 않기 때문)
이것에 대한 일관성을 유지할 방법을 따로 구현해야 한다. 따라서 분산 트랜잭션의 경우, 아래와 같은 방법을 사용한다.
3. Saga 패턴?
" The Saga design pattern is a way to manage data consistency across microservices in distributed transaction scenarios. A saga is a sequence of transactions that updates each service and publishes a message or event to trigger the next transaction step. If a step fails, the saga executes compensating transactions that counteract the preceding transactions. "
- MSA의 분산 트랜잭션 상황에서 data 일관성을 관리하기 위한 디자인 패턴이다.
- saga란 트랜잭션의 시퀀스이다.
- 각각의 서비스가 메세지를 발행하고,
- 다음 트랜잭션을 위한 event를 trigger함.
- 만약 해당 단계가 실패할 경우, saga 는 이전 트랜잭션으로 돌아가기 위한 보상 트랜잭션을 실행한다.
위와 같은 식으로 작동이 되는 것이다.
이러한 방식으로 진행이 된다면, MSA에서 각각의 서비스에 대한 DB, 그리고 전체 DB에 대한 무결성을 유지할 수가 있게 된다.
https://learn.microsoft.com/en-us/azure/architecture/reference-architectures/saga/saga
Saga pattern - Azure Design Patterns
Use the Saga design pattern to ensure data consistency on distributed transactions in microservices architectures.
learn.microsoft.com
https://www.baeldung.com/orkes-conductor-saga-pattern-spring-boot
https://www.baeldung.com/cs/saga-pattern-microservices
'연재작 > DevOps' 카테고리의 다른 글
Terraform 핵심 프로세스 (0) | 2025.01.29 |
---|---|
Terraform을 통한 Infrastructure Provisioning (1) | 2025.01.27 |
EC2 Tomcat Server pipeline 구축 + S3 정적 웹서버와 연동 (1) | 2024.11.09 |
AWS S3를 통한 React SPA의 CI/CD Pipeline (0) | 2024.11.07 |
SPA 기능을 구현하는 웹 페이지의 CI/CD Pipeline (1) | 2024.11.01 |