본문으로 이동
에러 0%, MSA에서의 Enum 관리 전략
문서

에러 0%, MSA에서의 Enum 관리 전략

김인회/이준영 · 토스 · 토스 기술 블로그

원본 보기

소개

토스뱅크 여신의 발전하는 MSA에서 Enum을 안전하게 사용하는 노하우를 알려드립니다.

AI 핵심 요약

MSA에서 서비스 간 Enum 정의가 어긋나면 역직렬화 오류가 발생하고, 담당자 변경이나 서비스 확장 때 같은 문제가 반복될 수 있었습니다. 토스뱅크는 알 수 없는 값을 소비자가 직접 처리하도록 EnumString을 만들고, ArchUnit으로 제공자에서 소비자로 전달되는 Enum에 사용을 강제했습니다. 함께 버전업해야 하는 Enum은 Meta-Expose가 서비스별 정의를 수집·비교하고 Prometheus와 Grafana로 불일치를 보여주도록 했습니다. 이처럼 입력 방향과 도메인 요구에 따라 오류 처리와 버전 감시를 나누어 설계해, 배포 누락을 사전에 발견하고 Enum 역직렬화 문제를 예방했습니다.

  • 요청을 받는 서버는 알 수 없는 Enum을 엄격히 검증해 400 오류로 처리하는 편이 안전합니다.
  • 응답을 받는 소비자는 알 수 없는 값을 무시하거나 기본값으로 대체하는 등 상황에 맞는 정책을 선택할 수 있어야 합니다.
  • EnumString은 원본 문자열을 보존하고, `toEnumOrNull`, `toEnumOrElse`, `toEnumOrThrow`로 변환 실패 동작을 명시하게 합니다.
  • ArchUnit 규칙을 빌드 테스트에 적용하면 제공자에서 소비자로 전달되는 Enum에 EnumString 사용을 강제할 수 있습니다.
  • 서비스 간 버전 동기화가 필수인 Enum은 Meta-Expose로 정의를 비교하고 Prometheus·Grafana로 불일치를 감시할 수 있습니다.