본문으로 건너뛰기

용어

문서가 설명 없이 쓰는 말들입니다. 한 줄로 뜻만 적고, 자세한 것은 링크가 있는 문서에 있습니다.

문서 목록으로


시트에 적는 것

엔티티시트에서 선언 하나로 읽히는 단위. 테이블 · enum · 상수셋 · 매트릭스 넷입니다 — 개념
선언 셀:table Item처럼 엔티티가 시작하는 자리를 나타내는 셀. 괄호에 그 엔티티의 설정을 적습니다 — :table Item(side=s)
마커 열선언 셀이 놓인 열. 그 아래 칸에 행 키(:field · :type · …)를 적고, 데이터 행에서는 비어 있습니다
테이블행과 열로 된 데이터. 데이터 파일로 나갑니다
enum이름 붙은 정수 값의 집합. 코드로만 나갑니다
상수셋이름·타입·값의 목록. 행이 아니라 개별 상수이고, 데이터 파일에 흔적이 없습니다
기본 인덱스행을 특정하는 컬럼. 지정이 없으면 첫 필드 컬럼이고, 선언 셀의 key=로 다른 컬럼을 지정합니다 — 주 레이아웃 §3.5
보조 인덱스*를 붙여 조회 함수를 하나 더 내는 컬럼
복합 키성분이 여러 컬럼인 키. 유일 · 옵셔널 불가 같은 기존 규칙이 성분마다 걸리고, 조회는 FindByFromAndTo처럼 다인자가 됩니다. 와이어는 안 움직입니다
참조 (foreign)값이 다른 테이블의 이라는 선언. 대상은 테이블 하나입니다. 파일에는 키로 실리고 로드 후 연결됩니다 — 참조가 내는 이름
refs=값이 목록의 어느 테이블에 있는지 검사만 하는 괄호 메타. 컬럼의 타입도 와이어도 그대로입니다 — 시트 작성
배열 컬럼한 셀 안을 구분자로 나누거나(DefaultDelimiter), name[0]·name[1] 처럼 칸을 나눠 적은 것
SerialFieldname[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

TCBTabbit Compiled Binary. 빌드의 결과물인 런타임 데이터 형식 — 바이너리 형식
와이어파일에 실제로 실리는 바이트 배치. 「형식 무변경」은 이것이 그대로라는 뜻입니다
컬럼 지향행이 아니라 컬럼별로 값을 모아 싣는 배치 — 고른 이유
디스크립터값 블록 앞에 각 블록의 길이와 인코딩을 적어 두는 부분
와이어 태그컬럼마다 붙는 식별자(@N). 이것이 있어서 컬럼이 추가·삭제·이동되어도 읽는 쪽이 밀리지 않습니다. 행 태그·메타 태그와 다른 것이고, 낱말이 아니라 번호입니다 — 시트 작성
판별자다형 레코드에서 그 행이 어느 변종인지 정하는 번호. 변종 선언의 @N이고, 와이어 태그와 다른 번호입니다 — 다형과 참조 배열 §5.1.1
컬럼 인코딩컬럼마다 그 값들에 가장 짧은 표현을 고르는 것 — 사전·RLE·델타·비트폭 패킹 등 13종
presence 비트맵옵셔널 필드의 존재 여부를 모아 담는 비트열 — v103
layer바이트에 차례로 얹히는 처리. 인코딩 → (압축, 예약) → 암호화 → MAC 순입니다
envelope가장 바깥 layer. 파일 암호화가 여기 있습니다 — v104
MAC변조 검출. 암호화만으로는 값을 바꿔치기하는 것을 막지 못합니다 — 설계
스키마 스큐쓴 세대와 읽는 세대가 다른 상황. 읽을 수 있으면 정확히 읽고, 없으면 이름과 양쪽 타입을 대고 멈춥니다
타입 승격스큐에서 좁은 타입이 넓은 타입으로 읽히는 것(intbigint 등)
베이스라인배포 전 비교 대상으로 두는 이전 산출물

검증

정적 검증코어가 내장으로 하는 검사 — 타입 · 인덱스 유니크 · 컬럼 제약 · 참조
규칙 파일시트로 나타낼 수 없는 규칙을 적은 프로젝트의 .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/이고, 게이트가 아니라 읽기 위한 것입니다

골든과 게이트의 차이. 골든이 판정하는 것은 「출력이 바뀌었는가」이고, 게이트가 판정하는 것은 「출력이 동작하는가」입니다. 둘은 서로를 대신하지 못합니다 — 골든은 잘못된 출력도 그대로 기록하고, 게이트는 바뀌지 않은 것을 알려주지 않습니다.