Skip to content

MicroService Architecture ‐ TCC

woojin.jang edited this page Jun 24, 2026 · 1 revision

MicroService Architecture ‐ TCC

  • TCC(Try-Confirm-Cancel)는 분산 시스템에서 데이터 정합성을 보장하기 위해 사용하는 분산 트랜잭션 처리 방식이다.
  • 다음과 같이 3단계로 나누어 트랜잭션을 관리한다.
    • Try : 필요한 리소스를 점유할 수 있는지 검사하고 임시로 예약한다.
    • Confirm : 실제 리소스를 확정 처리해 반영한다.
    • Cancel : 문제가 발생한 경우 예약 상태를 취소하여 원복한다.
  • Try, Confirm, Cancel 단계는 멱등하게 설계가 되어야 한다.

TCC의 장·단점

  • 확장성과 성능에 유리하다. 2PC에 비해 데이터베이스 Lock 점유 시간이 짧고 Long Transaction에 덜 취약하다.
  • 장애 복구와 재시도 처리에 유연해서 비즈니스 정책에 따라 전략을 정할 수 있다.
  • 기존 시스템에 비해 설계와 구현이 복잡하다. 모든 단계 자체가 멱등하게 설계되어야 하며 네트워크 오류, 재시도 시나리오를 고려한 복잡한 로직 구현이 필요하다.

1. Try(예약)

  • 실제 확정이 아니라 "임시 점유"가 핵심이다.
  • 재고 100을 바로 차감하는 것이 아니라 가용재고 98 / 예약 2와 같이 예약 상태로 따로 잡아둔다.
  • 포인트라면 바로 차감이 아니라 동결. 이렇게 모든 변경을 되돌릴 수 있는 중간 상태로 만들어 두는 게 Try의 역할이다.
  • 만약 여기서 중간 상태로 전환할 자원이 부족하면 실패한다.

2. Confirm(확정)

  • 모든 서비스의 Try가 성공했을 때만 호출된다. Try에서 잡아둔 예약을 실제로 반영한다.
  • 예약 재고를 진짜 차감시키고 포인트 동결을 진짜 차감시킨다.
  • 여기서 중요한 부분은 Confirm은 실패하면 안 된다. 이미 Try에서 자원을 확보했기에 실패하면 무한 재시도로 끝까지 성공시키는게 원칙이다.

3. Cancel(보상, 원복)

  • Try 중 하나라도 실패하면 이미 성공한 Try들을 되돌린다.
  • 예약 재고를 가용으로 다시 반환하고 동결한 포인트를 다시 해제한다.

왜 멱등(Idempotent)이 필수인지?

  • 분산 환경에서 네트워크 타임아웃 때문에 Confirm/Cancel이 중복 호출되거나 응답을 못 받아서 재시도되는 일이 항상 있다고 생각해야 한다.
  • Confirm이 2번 와도 한 번만 차감해야 하고, Cancel이 2번 와도 한 번만 원복해야 한다.
  • 그래서 각 단계는 이미 처리했으면 무시하도록 멱등하게 짜야한다.

상품 주문 및 재고 차감에서의 TCC 시나리오 정리

📖 Java

📖 Kotlin

📖 Coroutine

📖 Spring

📖 Spring Security

📖 Spring Batch

📖 Reactive Programming

📖 Database

📖 MySQL

📖 Redis

📖 JPA

📖 QueryDsl

📖 MSA

📖 Kafka

📖 Apache Flink

  • [Apache Flink - Apache Flink Architecture]
  • [Apache Flink - Stream Processing]
  • [Apache Flink - Data Stream API & Window]
  • [Apache Flink - State Management]

📖 HTTP

📖 AWS

📖 Docker

📖 Kubernetes

📖 CI/CD

📖 Nginx

📖 Monitoring🥈

  • [Monitoring - Log Concept]
  • [Monitoring - Log Level & Filter]
  • [Monitoring - Logback]
  • [Monitoring - Log Collection with ELK Stack]
  • [Monitoring - Log Monitoring with Kibana]
  • [Monitoring - Building a Monitoring System with Spring Boot Actuator]
  • [Monitoring - Server Monitoring with Prometheus and Grafana with Discord Alerts]

📖 Test

📖 Effective Java 3/E

📖 Kotlin Academy - Effective Kotlin

📖 Kotlin Academy - 핵심편

📖 스프링으로 시작하는 리액티브 프로그래밍

📖 가상 면접 사례로 배우는 대규모 시스템 설계 기초 1

📖 가상 면접 사례로 배우는 대규모 시스템 설계 기초 2

📖 Clean Code

📖 리팩토링 2판

📖 주니어 백엔드 개발자가 반드시 알아야 할 실무 지식

📖 GraphQL

Clone this wiki locally