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

에러 0%, 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로 불일치를 감시할 수 있습니다.

소개

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

비슷한 학습 자료

컨퍼런스 NDC

NDC 2019 [이놈의 enum의 박싱을 어찌할꼬] 세션 공유드립니다. 상세 내용은 NDC Replay 홈페이지를 참고 부탁드려요. 😊 1. 발표자 성함 : 이무림 2. 발표자 소개 : 넥슨 데브캣 스튜디오에서 〈런웨이 스토리〉 리드 프로그래머로 일하고 있습니다. 〈마비노기 360〉, 〈마비노기 2〉, 〈링토스 세계여행〉,〈로드러너 원〉을 개발하였습니다. 지난 컨퍼런스에서 〈NDC 2008 마비노기 360 의 그래픽〉, 〈NDC 2009 플레이어를 받아들이는 게임디자인〉, 〈NDC 2010 마비노기2의 하우징 시스템〉, 〈NDC 2011 고양이가 개발한다. 데브캣 스튜디오의 프로그래밍 그룹웨어에 대하여〉, 〈NDC 2017 워크샵 게임 만들기: 부족전쟁〉 을 발표하였습니다. 3. 세션 소개 : C#에서는 enum 타입을 제네릭 컨테이너에 사용하면 Boxing 이 발생합니다. 세상에? Boxing 은 성능에 상당한 악영향을 미치기 때문에 최적화 과정에서 반드시 제...

프로그래밍 언어 게임 프로그래밍

문서 토스

Kafka Broker request log를 활용해서 서비스 간 의존성 파악하기

백엔드 데브옵스 · 인프라

문서 장세경/조서희

수십 년간 정체되어 있던 전통적인 은행 시스템의 모놀리식 소프트웨어 아키텍처를 MSA로 전환할 수 있을까요? 토스뱅크의 ‘코어뱅킹 MSA 전환’ 사례를 통해 향후 은행 시스템이 나아가야 할 방향을 소개합니다.

백엔드

문서 한규주

Kotlin의 Result로 MSA에서 에러가 전파되지 않는 안전한 환경을 만드는 방법을 알아봅니다.

백엔드 프로그래밍 언어

문서 김자유

UX 라이팅은 한 명이 아닌, 팀원 모두가 잘 쓰는 게 중요해요. 이전까지는 세션이나 가이드라인 등의 방법으로 이 문제를 접근해왔지만, 토스는 조금 다르게 풀어봤어요. 시스템으로요.

UI/UX

문서 김자유

좋은 에러 메시지란, 사용자가 다음 단계로 갈 수 있게 돕는 메시지예요. 사용자가 다음 단계로 가기 위해 필요한 내용은 어떤 것들이 있을까요? 토스는 6가지 에러 메시지 원칙을 생각하며 문구를 쓰고 있어요.

UI/UX