피드로 돌아가기
Algebraic Data Types in TS: Indestructible Payment Flows
Dev.toDev.to
Frontend

Discriminated Unions 기반 ADT 도입을 통한 결제 상태 무결성 보장

Algebraic Data Types in TS: Indestructible Payment Flows

Hugo Campañoli2026년 4월 10일3intermediate

Context

결제 플로우 내 상태 관리를 단순 string 필드와 Optional 필드 조합으로 설계하여 런타임 타입 불안정성 발생. 상태와 데이터 간의 논리적 연결 부재로 인한 잘못된 데이터 접근 및 중복 결제 위험 상존.

Technical Solution

  • 상태별 데이터 구조를 엄격히 분리한 Discriminated Unions 도입을 통한 불가능한 상태(Illegal State)의 컴파일 타임 차단
  • 각 상태(Idle, Pending, Processing, Success, Failed)에 필요한 최소 데이터만 정의하여 Optional 필드 제거 및 데이터 정밀도 향상
  • TypeScript의 Type Narrowing 기능을 활용한 상태별 최적화된 데이터 접근 경로 확보
  • never 타입을 이용한 Exhaustive Check 구현으로 신규 상태 추가 시 처리 누락을 방지하는 컴파일 단계의 안전장치 구축
  • 런타임 오버헤드가 없는 Type-level 설계로 시스템 성능 유지와 타입 안정성 동시 달성

1. 상태에 따라 필수 데이터가 변하는 인터페이스 설계 시 Optional 필드 대신 Discriminated Unions 검토

2. switch-case 문 작성 시 default 절에 `never` 타입을 할당하여 모든 케이스 처리 여부 강제

3. 런타임 에러 방지를 위해 '발생 가능성'이 아닌 '표현 불가능성(Impossible to represent)' 관점에서 도메인 모델링 수행

원문 읽기