기본 구성 (IDL·CLI·파싱)¶
.deuk(및 가져온 .proto·.thrift 등)를 엔진이 어떻게 구조화하는지, 명령줄에서 무엇을 줄 수 있는지 요약합니다.
IDL 선언 종류 (declarationKind)¶
파서는 struct 계열 선언을 네 가지로 태그합니다. 와이어 레이아웃은 대부분 record와 동일하게 취급할 수 있고, 코드 생성·검증에서 구분됩니다.
| 키워드 | 의미 (요약) |
|---|---|
struct / record |
일반 DTO·행 데이터. 기본 declarationKind는 record. |
message |
네트워크 메시지·프로토콜 쪽 이름 관례. ProtocolRegistry·msgId 매핑과 함께 쓰기 좋음. |
table |
테이블 정의·메타 테이블(header+infos 패턴 등). MetaTableRegistry·로드 경로와 연결. |
entity |
DB 영속 행 스키마. [Table]/[Key]/[Column] 등 C# 데이터 어노테이션 생성. --ef 시 DbContext까지. |
그 외 AST에는 enum, typedef, const, service(Thrift RPC 호환), namespace 등이 올 수 있습니다.
CLI·include (어디까지 공통인가)¶
- 진입:
npx deukpack <IDL파일> <출력폴더> [옵션]또는--pipeline <config.json>. - include:
-I/-i(경로 하나),-r/--include-recursive(해당 경로 및 모든 하위 디렉터리, 깊은 재귀). - IDL 루트 이름:
--define-root(기본_deuk_define, 레거시_thrift). - 코드 생성:
--csharp,--cpp,--ts,--js(조합 가능). - C# 부가:
--csharp-project-name,--csharp-nullable,--no-csharp-csproj,--allow-multi-namespace,--brace-less-namespace. - 기타:
--protocol,--endianness,--convert-to-deuk,--emit-per-file,--wire-profile, OpenAPI/표 형식 머지·출력(아래 통합 절).
전체 표와 설명: API·타입 참조 — CLI.
프로그램 방식 (Node 라이브러리)¶
- 파싱·AST:
DeukPackCodec등으로 동일 규칙을 코드에서 호출 가능. 다언어 emit:** v1에서는 **CLI 사용을 권장합니다 (v1 범위).
와이어 패밀리 한 줄¶
- 득팩 전용 (
deuk):pack,json,yaml— npm JSWireSerializer·serialize()기본(pack)이 여기. - 호환 (
interop, Thrift):tbinary,tcompact,tjson— C#·C++ 중심, JS 는interopRootStruct로 동일 와이어 지원.
표·npm 단순 API: 와이어 프로토콜 계열. 스펙 문서: 호환 vs 네이티브 와이어.
타입·상속¶
확장 타입·Protobuf/Thrift 대조는 API·타입 참조 — Extended types에 표로 정리했습니다. extends(다단 상속)는 튜토리얼: 통합 Write와 메시지·와이어에서 이어집니다.
[!IMPORTANT] 동적 언어 vs 정적 언어 간 구조체 데이터 시맨틱 (Null 맵핑 특이점) - 크로스 언어 구성에서 동적 런타임 언어(
JavaScript**)가 중첩 구조체 데이터를null로 내려보낼 때, 메모리 맵핑을 엄격히 준수하는 네이티브 백엔드(**C#, Java**)는 이를 파싱하여 해당 언어의기본 구조체 인스턴스(Default Instantiation) 로 치환하여 메모리에 할당합니다. (즉, 내부의 빈 필드들은""나0으로 일괄 초기화됨). - 인메모리 다중 순회(Multi-Pass):** 객체를 변형하여 수 많은 핸들러로 전달할 때는 반드시 C#/Java는.clone()이나 C++스마트포인터 Detach를, Elixir는 불변형 구조체 업데이트 레이아웃(%{obj | ...})을 활용해 Caller 의 메모리를 오염시키지 않도록 권장합니다.
손으로 익히기¶
- 제1장 · 입구의 십자로 — 한 줄기 정의가 갈라지는 지도.
- 와이어·직렬화 개요 — 표·메시지·스택을 짧은 글로 잇기.