에러 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] 이놈의 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 은 성능에 상당한 악영향을 미치기 때문에 최적화 과정에서 반드시 제...
프로그래밍 언어 게임 프로그래밍
문서 장세경/조서희
은행 최초 코어뱅킹 MSA 전환기 (feat. 지금 이자 받기)
문서 김자유
가이드라인을 시스템으로 만드는 법
문서 김자유