참조
필드 타입 객체에 선언할 수 있는 모든 필드 타입 — 저장하는 값, 허용하는 옵션, 그리고 REST, Console, AI Builder에 노출되는 방식.
패밀리별로 분류된 48가지 기본 제공 필드 타입. 전체 Zod 스키마는
packages/spec/src/data/field.zod.ts 에 있으며, 이 페이지는 실용적인 요약입니다.
속성 타입 기본값 용도 namestring (snake_case) — 머신 식별자 — REST 경로 세그먼트, SQL 컬럼 labelstring — Console에 표시되는 라벨 typeFieldType — 아래 타입 표 참조 requiredboolean falseNOT NULL 제약 uniqueboolean false고유 인덱스 searchableboolean false/api/v1/search용 인덱싱multipleboolean false값의 배열로 저장 defaultValueunknown — 초기값 (리터럴 또는 CEL) columnNamestring = name 물리적 DB 컬럼 재정의 hiddenboolean false기본 Console 뷰에서 숨김 readonlyboolean false폼에서 비활성화 systemboolean false자동 주입됨 (id, created_at, …) indexboolean falseDB 인덱스 생성 externalIdboolean false외부 키를 통한 upsert 대상 inlineHelpTextstring — 툴팁 / 도움말 텍스트 conditionalRequiredP 술어— CEL이 true일 때 필수 trackHistoryboolean false값 변경을 레코드 활동 타임라인에 사람이 읽을 수 있는 항목으로 렌더링 (ADR-0052)
타입 용도 주요 옵션 text짧은 문자열 maxLength, minLengthtextarea여러 줄 maxLengthemail이메일 형식 검증됨, 소문자로 변환 urlURL 형식 검증됨 phone전화번호 E.164 password단방향 시크릿 인증 서브시스템이 해시 처리함, GET으로 반환되지 않음 secret가역 시크릿 (API 키, 토큰, DB 비밀번호) 크립토 제공자를 통해 저장 시 암호화되고, 불투명 참조로 저장되며, 읽기 시 마스킹됨. fail-closed — 제공자가 구성되지 않으면 쓰기가 평문을 저장하는 대신 예외를 던짐 markdown마크다운 본문 Console 미리보기에서 렌더링 html새니타이즈된 HTML 쓰기 시 DOMPurify 적용 richtextWYSIWYG Console 에디터 + 직렬화된 JSON
타입 용도 주요 옵션 number부동소수점 min, max, precision, scalecurrency금액 currencyConfig: { precision, currencyMode: 'fixed' | 'dynamic', defaultCurrency }percent0–100 % min, max, scale
integer와 decimal은 별도의 타입이 아닙니다 — 정수에는 scale: 0을 사용한 number를,
고정 소수에는 precision+scale을 사용한 number를 쓰세요.
타입 저장 내용 비고 date달력 날짜 시간대 없음 datetime시점 UTC time벽시계 시각 날짜 없음
타입 비고 boolean체크박스 toggleboolean과 동일, 스위치 UI
타입 비고 select단일 선택 — 옵션을 인라인으로 선언하거나 피크리스트에서 참조 multiselect다중 선택, 배열로 저장 radio라디오 렌더링을 사용하는 select의 UI 별칭 checkboxes체크박스 렌더링을 사용하는 multiselect의 UI 별칭
옵션 형태:
options : [
{ value: 'low' , label: 'Low' },
{ value: 'high' , label: 'High' , color: '#e02' },
{ value: 'urgent' , label: 'Urgent' , color: '#c00' }
]
타입 카디널리티 의미 lookup다대일 느슨한 참조, 부모를 삭제해도 기본적으로 자식은 삭제되지 않음 master_detail다대일, 캐스케이딩 부모 없이는 자식이 존재할 수 없음, 권한은 부모로부터 상속 tree자기 참조 계층 구조 (동일 객체의 parent_id)
공통 옵션:
{
type : 'lookup' ,
reference : 'account' , // target object name
referenceFilters : [ 'status:active' ], // narrow the lookup picker
deleteBehavior : 'set_null' // 'set_null' | 'cascade' | 'restrict'
}
타입 동작 주요 옵션 formula파생 값, 읽기 또는 재계산 시 평가됨 expression: F\record.qty * record.unit_price`` — CEL 참조summary자식 관계에 대한 롤업 summaryOperations: { object, field, function } (count | sum | avg | min | max)autonumber자동 증가 표시 번호 format (예: TKT-{0000}), startAt
수식 예시:
{
name : 'profit_margin' ,
type : 'formula' ,
expression : F `(record.revenue - record.cost) / record.revenue * 100`
}
타입 용도 주요 옵션 image이미지 첨부 fileAttachmentConfig (아래 참조)file모든 파일 동일 avatar프로필 사진 정사각형 크롭, 합리적인 기본값 video비디오 업로드 재생 시간 + 썸네일 캡처 audio오디오 파형 미리보기
fileAttachmentConfig : {
maxSize : 10_000_000 , // bytes
allowedTypes : [ 'image/png' , 'image/jpeg' ],
virusScan : true ,
storageProvider : 's3' , // see Configure → Storage
imageValidation : { minWidth : 200 , maxWidth : 4096 , generateThumbnails : [ 'sm' , 'md' , 'lg' ] }
}
타입 저장 내용 비고 json임의의 JSON Postgres에서 JSONB로 저장 composite명명된 필드를 가진 하위 레코드 인라인 구조체, 별도 테이블이 아님 repeatercomposite 값의 배열 자식 객체 없는 일대다
타입 비고 location위도/경도 + 정확도 address도로명 / 시 / 지역 / 우편번호 / 국가 code소스 코드 필드 — language, theme, lineNumbers colorcolorFormat: 'hex' | 'rgb' | 'rgba' | 'hsl', presetColors[]rating1–N 별점 — max, icon slider슬라이더 UI를 갖춘 범위 제한 숫자 signature그려진 서명, 이미지로 저장 qrcode값을 QR 또는 바코드(EAN / UPC / Code128)로 렌더링 progress막대로 렌더링되는 파생 백분율 tags자동 완성이 있는 자유 형식 태그 배열 vector임베딩 컬럼 — vectorConfig: { dimensions, distanceMetric: 'cosine' | 'euclidean', indexed, indexType: 'hnsw' | 'ivfflat' }
필드 타입 비고 idtext (ULID) 기본 키 created_atdatetime UTC 삽입 시각 updated_atdatetime UTC 마지막 쓰기 시각 created_bylookup → user 삽입한 사람 updated_bylookup → user 마지막으로 쓴 사람 versioninteger 낙관적 동시성 토큰
이 필드들은 직접 선언하지 않습니다 — 객체별로
ObjectSpec.systemFields: false로 옵트아웃할 수 있습니다 (대개 좋은 생각은 아닙니다).
*.object.ts (field spec)
│
├─► Postgres / MySQL / SQLite column + index + constraint
├─► REST: validated on POST/PATCH, exposed on GET
├─► Console: form widget + list column
├─► AI Builder: tool argument schema (so the AI knows what to ask)
└─► Audit: change-tracked if `trackHistory: true`