더북(TheBook)

4.1.1 분산 트랜잭션의 필요성

createOrder()는 주문 가능한 소비자인지 확인하고, 주문 내역(order detail)을 확인하고, 소비자의 신용카드를 승인하고, DB에 주문을 생성하는 작업입니다. 모놀리식 애플리케이션에서 이런 작업을 구현하기란 그리 어렵지 않습니다. 주문 검증에 필요한 데이터를 그냥 가져오면 됩니다. 스프링 프레임워크를 사용할 경우, createOrder() 앞에 @Transactional만 붙이면 ACID 트랜잭션이 자동으로 걸려 데이터 일관성이 보장됩니다.

반면 데이터가 여러 서비스에 흩어져 있는 마이크로서비스 아키텍처는 복잡합니다(그림 4-1). createOrder()는 소비자 서비스, 주문 서비스, 주방 서비스, 회계 서비스 등 여러 서비스에 있는 데이터에 접근해야 합니다.

서비스마다 DB가 따로 있기 때문에 여러 DB에 걸쳐 데이터 일관성을 유지할 수 있는 수단을 강구해야 합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.