용어
문서가 설명 없이 쓰는 말들입니다. 한 줄로 뜻만 적고, 자세한 것은 링크가 있는 문서에 있습니다.
시트에 적는 것
| 말 | 뜻 |
|---|---|
| 엔티티 | 시트에서 선언 하나로 읽히는 단위. 테이블 · enum · 상수셋 · 매트릭스 넷입니다 — 개념 |
| 선언 셀 | :table Item처럼 엔티티가 시작하는 자리를 나타내는 셀. 괄호에 그 엔티티의 설정을 적습니다 — :table Item(side=s) |
| 마커 열 | 선언 셀이 놓인 열. 그 아래 칸에 행 키(:field · :type · …)를 적고, 데이터 행에서는 비어 있습니다 |
| 테이블 | 행과 열로 된 데이터. 데이터 파일로 나갑니다 |
| enum | 이름 붙은 정수 값의 집합. 코드로만 나갑니다 |
| 상수셋 | 이름·타입·값의 목록. 행이 아니라 개별 상수이고, 데이터 파일에 흔적이 없습니다 |
| 기본 인덱스 | 행을 특정하는 컬럼. 지정이 없으면 첫 필드 컬럼이고, 선언 셀의 key=로 다른 컬럼을 지정합니다 — 주 레이아웃 §3.5 |
| 보조 인덱스 | *를 붙여 조회 함수를 하나 더 내는 컬럼 |
| 복합 키 | 성분이 여러 컬럼인 키. 유일 · 옵셔널 불가 같은 기존 규칙이 성분마다 걸리고, 조회는 FindByFromAndTo처럼 다인자가 됩니다. 와이어는 안 움직입니다 |
참조 (foreign) | 값이 다른 테이블의 행이라는 선언. 대상은 테이블 하나입니다. 파일에는 키로 실리고 로드 후 연결됩니다 — 참조가 내는 이름 |
refs= | 값이 목록의 어느 테이블에 있는지 검사만 하는 괄호 메타. 컬럼의 타입도 와이어도 그대로입니다 — 시트 작성 |
| 배열 컬럼 | 한 셀 안을 구분자로 나누거나(DefaultDelimiter), name[0]·name[1] 처럼 칸을 나눠 적은 것 |
| SerialField | name[0]·name[1] 처럼 번호가 붙은 컬럼들이 이루는 배열 그룹. 원소가 스칼라일 수도 레코드일 수도 있습니다 — 중첩 필드 |
| 중첩 필드 | Group.Member 표기. 컬럼 여러 개가 레코드 하나로 접힙니다 |
| 레코드 그룹 | 중첩 필드가 만드는 레코드 하나치의 컬럼 묶음 |
필드 변형 (:variant) | 한 필드의 값 컬럼을 여러 벌 적고 빌드가 하나를 고르는 표기. 지역별 가격처럼 컬럼 하나만 갈리는 데이터가 대상입니다 |
| 행 태그 | 마커 열에 적은 낱말. 레시피의 ExcludeTags가 부르면 그 행이 산출에서 빠집니다. 와이어 태그와 무관합니다 — 시트 작성 |
| 메타 태그 | 선언과 컬럼의 tag=에 적은 key=value. 이 도구는 읽어서 담기만 하고 검사하지 않습니다 — 설계 §6 |
| 행 벌 | 한 테이블이 데이터를 여러 벌 가지는 것. 스키마는 하나이고 행만 갈립니다 — recipe의 TableRowSets가 이름에서 벌을 읽습니다 — 설계 |
| 합성 값 타입 | vec3f · quat · color처럼 성분이 여러 개인 값을 셀 하나에 적는 표기. 파싱이 끝나면 레코드로 접히므로 와이어는 그대로입니다 — 설계 |
text · asset | 값이 아니라 역할이 붙는 타입. 값은 string 그대로이고, text는 번역 수집 대상이 되며 asset은 그 파일이 있어야 합니다 — 시트 작성 |
struct 선언 (.tbs) | 임베딩 오브젝트와 enum을 시트 밖의 파일에서 선언하는 것. 같은 타입을 쓰는 테이블마다 헤더를 다시 적지 않기 위한 자리입니다 |
| 매트릭스 표 | 컬럼 이름이 행 id인 격자. :matrix 로 적지 않은 시트를 판독 규칙으로 알아보는 쪽입니다 — 설계 |
매트릭스 선언 (:matrix) | 행과 열이 둘 다 키인 격자를 선언으로 적는 것. 선언 하나가 테이블 둘이 되고 축의 키는 정수가 아니어도 됩니다 — 표기 |
| 비트셋 | 최대 64개의 플래그. 파일에는 64비트 정수 하나입니다 — 설계 |
| 옵셔널 | 타입 끝의 ?. 빈 칸을 받고, 존재 여부가 와이어에 실립니다 — 설계 |
| 컬럼 제약 | 타입으로 나타낼 수 없는 것 — 범위·허용값·필수 여부 — 설계 |
대상 (TargetSide) | 그 테이블·컬럼이 서버와 클라이언트 중 어느 빌드에 들어가는지 |
| 레이아웃 | 시트를 읽는 규칙. 선언 셀 방식이 tabbit이고, 다른 규칙으로 쓰인 시트는 다른 레이아웃이 읽습니다 — 개념 |
변환의 단계
| 말 | 뜻 |
|---|---|
| recipe | 무엇을 어디서 읽어 어디로 낼지 적는 파일 — Recipe 파일 |
| 소스 | 읽는 곳. 엑셀 · 구글 스프레드시트 |
| 타깃 | 내는 것 하나. binary · csharp · mysql처럼 이름이 있고, recipe의 Targets에 나열합니다 |
| 임포트 | 시트를 셀 격자로 만드는 단계. 아직 타입도 이름 규칙도 모릅니다 |
| 쿠킹 | 격자를 Model로 만드는 단계. 값 해석·타입·이름 규칙이 전부 여기 있어서, 레이아웃이 둘이어도 같은 답을 냅니다 |
| Model | 모든 산출물이 나오는 하나의 중간 표현. 산출물은 Model의 결정적 사영입니다 |
| 익스포터 | Model을 데이터로 내는 것. .tcb를 쓰는 writer가 형식을 정의하는 코드입니다 |
| 제너레이터 | Model을 코드로 내는 것. 언어마다 하나이고 템플릿(.sbn)을 씁니다 |
| 접근자 (액세서) | 생성된 코드에서 테이블에 닿는 진입점 타입. 이름은 recipe의 AccessorName이 정합니다 — 설계 |
| 테이블 리더 | 생성된 코드가 .tcb를 읽는 부분. 언어마다 별도 구현입니다 |
형식 — TCB
| 말 | 뜻 |
|---|---|
| TCB | Tabbit Compiled Binary. 빌드의 결과물인 런타임 데이터 형식 — 바이너리 형식 |
| 와이어 | 파일에 실제로 실리는 바이트 배치. 「형식 무변경」은 이것이 그대로라는 뜻입니다 |
| 컬럼 지향 | 행이 아니라 컬럼별로 값을 모아 싣는 배치 — 고른 이유 |
| 디스크립터 | 값 블록 앞에 각 블록의 길이와 인코딩을 적어 두는 부분 |
| 와이어 태그 | 컬럼마다 붙는 식별자(@N). 이것이 있어서 컬럼이 추가·삭제·이동되어도 읽는 쪽이 밀리지 않습니다. 행 태그·메타 태그와 다른 것이고, 낱말이 아니라 번호입니다 — 시트 작성 |
| 판별자 | 다형 레코드에서 그 행이 어느 변종인지 정하는 번호. 변종 선언의 @N이고, 와이어 태그와 다른 번호입니다 — 다형과 참조 배 열 §5.1.1 |
| 컬럼 인코딩 | 컬럼마다 그 값들에 가장 짧은 표현을 고르는 것 — 사전·RLE·델타·비트폭 패킹 등 13종 |
| presence 비트맵 | 옵셔널 필드의 존재 여부를 모아 담는 비트열 — v103 |
| layer | 바이트에 차례로 얹히는 처리. 인코딩 → (압축, 예약) → 암호화 → MAC 순입니다 |
| envelope | 가장 바깥 layer. 파일 암호화가 여기 있습니다 — v104 |
| MAC | 변조 검출. 암호화만으로는 값을 바꿔치기하는 것을 막지 못합니다 — 설계 |
| 스키마 스큐 | 쓴 세대와 읽는 세대가 다른 상황. 읽을 수 있으면 정확히 읽고, 없으면 이름과 양쪽 타입을 대고 멈춥니다 |
| 타입 승격 | 스큐에서 좁은 타입이 넓은 타입으로 읽히는 것(int → bigint 등) |
| 베이스라인 | 배포 전 비교 대상으로 두는 이전 산출물 |
검증
| 말 | 뜻 |
|---|---|
| 정적 검증 | 코어가 내장으로 하는 검사 — 타입 · 인덱스 유니크 · 컬럼 제약 · 참조 |
| 규칙 파일 | 시트로 나타 낼 수 없는 규칙을 적은 프로젝트의 .cs. 변환할 때 컴파일해서 돕니다 — 검증 |
| 단계 폴더 | rules/ 아래의 pre · tables · global · runtime. 폴더가 실행 시점과 받는 것을 정합니다 |
rules/shared/ | 단계가 아닌 다섯 번째 폴더. 모든 규칙과 함께 컴파일되고 그 자체로는 실행되지 않습니다 |
| 진단 | 규칙이 내는 보고 하나. 오류 · 경고 · 정보이고 어느 셀인지가 함께 붙습니다 |
| 티어 | [RulePriority(n)]가 나누는 실행 순서. 앞 티어가 오류를 낸 자리에서 뒤 티어는 돌지 않습니다 — 설계 |
| 알려진 문제 | 검증이 잡은 것 중 지금 고칠 수 없는 것을 recipe에 적어 두고 변환을 계속하는 장치. 적어 둔 자리에 하나가 더 생기면 다시 멈춥니다 — 설계 |
| 계약 어셈블리 | 규칙이 대고 컴파일되는 Tabbit.Validation.dll. 여기 있는 것이 곧 규칙이 쓸 수 있는 것입니다 |
배포와 운영
| 말 | 뜻 |
|---|---|
| 데이터 패치 | 코드를 다시 배포하지 않고 데이터 파일만 갈아끼우는 것 |
| 업데이터 | 생성되는 갱신기. 매니페스트를 비교해 바뀐 파일만 받고 해시로 검증합니다 |
| 매니페스트 | 산출물의 파일 목록과 해시 |
| 스테이징 | 파일을 한곳에 모았다가 마지막에 한 번에 옮기는 자리. 실패한 실행이 흔적을 남기지 않는 이유입니다 |
| 섀도 테이블 | 데이터베이스에 채운 뒤 통째로 바꾸는 임시 테이블 |
요약 (summary) | 이번 변환이 무엇을 냈는지 적는 산출물 |
| 히스토리 | 커밋마다 무엇이 바뀌었는지 셀 단위로 남기는 기록 — Summary와 히스토리 |
이 저장소에서
개발과 테스트 문서가 쓰는 말입니다.
| 말 | 뜻 |
|---|---|
| 스위트 | dotnet test 전체. 게이트들의 모음입니다 |
| 게이트 | 통과하지 못하면 빌드를 세우는 검사 하나. 스스로 꺼지는 게이트는 두지 않습니다 — 툴체인이 없으면 건너뛰지 않고 실패합니다 |
| 픽스처 | 게이트가 입력으로 쓰는 것 — 워크북(.xlsx) · recipe · 규칙 폴더. test/fixtures/에 있고 워크북은 FixtureGen이 코드로 만듭니다 |
| 골든 (골든 트리) | 변환 결과를 바이트 단위로 비교하는 기준. test/fixtures/golden/이고, 의도한 변경이면 다시 기록하고 그 diff를 리뷰합니다 — 절차 |
| 적합성 코퍼스 | 경계값을 담은 테이블 하나. 모든 언어로 각각 컴파일·실행해 읽고 익스포터 JSON과 대조합니다 |
| 스큐 코퍼스 | 세대가 다른 두 워크북. 한쪽 세대의 코드로 다른 세대의 데이터를 읽습니다 |
| 하네스 | 한 언어의 게이트를 돌리는 최소한의 드라이버. 언어를 추가하는 비용에 이것 하나가 들어갑니다 |
| 전 언어 비교본 | reserved-words 픽스처를 생성기 전부로 낸 결과를 나란히 커밋해 둔 것. test/reserved-words/이고, 게이트가 아니라 읽기 위한 것입니다 |
골든과 게이트의 차이. 골든이 판정하는 것은 「출력이 바뀌었는가」이고, 게이트가 판정하는 것은 「출력이 동작하는가」입니다. 둘은 서로를 대신하지 못합니다 — 골든은 잘못된 출력도 그대로 기록하고, 게이트는 바뀌지 않은 것을 알려주지 않습니다.