공통 샘플의 언어별 표현¶
공통 샘플의 서버 역할, 메시지 이름, DTO 필드, 상태 전이와 검증 기준은 각 시나리오 문서가
정의한다. C++, .NET, Java, Kotlin, Node.js 구현은 언어 문법에 맞는 struct, record,
class, data class, interface 등을 사용할 수 있지만, 공통 문서에 적힌 DTO 이름과 필드의
의미를 바꾸지 않는다.
언어별 문서는 기본적으로 만들지 않는다. 다음과 같이 공통 DTO 표나 공통 구현 기준만으로 동일한 구현을 만들기 어려운 차이가 확인된 경우에만 이 디렉터리 아래에 해당 언어 문서를 추가한다.
- null 허용 여부나 기본값을 언어 타입만으로 구분할 수 없는 경우
- enum의 wire 값이나 정수 크기를 별도로 고정해야 하는 경우
- collection, timestamp, identifier 표현이 공통 필드 의미를 바꿀 가능성이 있는 경우
- serializer의 공개 동작 때문에 동일한 wire 형태를 만들기 위한 선언이 필요한 경우
- reflection 같은 언어 runtime 기능이 없어 등록 방법을 다르게 고정해야 하는 경우
언어별 문서에는 필요한 DTO 선언과 공통 필드의 대응, 또는 언어 특성상 피할 수 없는 구현 표현만 기록한다. 실행 명령, 프로젝트 위치, 서버 구성, 메시지 흐름과 검증 순서는 반복하지 않는다. 언어별 별도 계약이 필요하지 않으면 해당 언어 문서를 두지 않는다.
현재 C++, .NET, Java, Kotlin, Node.js의 DTO 표현에는 언어별 추가 계약이 없다. C++의 handler 명시 등록 차이는 공통 샘플 문서와 C++ 공개 계약에 이미 정리되어 있으므로 이 디렉터리에서 다시 설명하지 않는다.