Entity란?
Entity는 다음을 포함하는 데이터 모델 정의입니다:- 데이터베이스 스키마 - 테이블 구조, 컬럼, 인덱스
- TypeScript 타입 - 타입 안전성을 위한 타입 정의
- 관계(Relations) - 다른 Entity와의 연결
- Subset - API 응답을 위한 필드 조합
- Enum - 열거형 타입과 레이블
Entity 정의 방법
Entity는 Sonamu UI(
http://localhost:1028/sonamu-ui)에서 시각적으로 정의하는 것을 권장합니다. Sonamu UI는 자동 완성, 유효성 검사, 실시간 미리보기 기능을 제공합니다.entity.json 파일 구조
Entity는entity.json 파일로 저장되며, 다음과 같은 구조를 가집니다:
api/src/application/{entity}/{entity}.entity.json
필수 필드
id
Entity의 고유 식별자입니다. PascalCase로 작성합니다.- Entity 클래스명, 타입명에 사용됩니다
- 예:
UserModel,User,UserBaseSchema
table
데이터베이스 테이블 이름입니다. snake_case로 작성합니다.title
Entity의 한글 또는 표시용 이름입니다.props
Entity의 속성(컬럼) 배열입니다. 각 속성은 타입과 옵션을 정의합니다.| 옵션 | 타입 | 설명 | 기본값 |
|---|---|---|---|
name | string | 속성명 (snake_case) | 필수 |
type | string | 데이터 타입 | 필수 |
desc | string | 설명 | - |
nullable | boolean | NULL 허용 여부 | false |
dbDefault | string | DB 기본값 | - |
더 알아보기
- Field Types - 사용 가능한 모든 데이터 타입
- Relations - Entity 간 관계 정의
선택 필드
parentId
다른 Entity를 상속할 때 사용합니다.indexes
데이터베이스 인덱스를 정의합니다.index- 일반 인덱스 (검색 성능 향상)unique- 유니크 인덱스 (중복 방지)hnsw- Vector 검색용 HNSW 인덱스ivfflat- Vector 검색용 IVFFlat 인덱스
subsets
API 응답에서 사용할 필드 조합을 정의합니다.Subset의
. 표기법으로 연관 Entity의 필드를 포함할 수 있습니다. Sonamu가 자동으로 JOIN을 생성합니다.enums
열거형 타입과 레이블을 정의합니다.실제 예제
기본 Entity 예제
user.entity.json
Relation 포함 예제
employee.entity.json
Sonamu UI에서 Entity 정의하기
-
Sonamu UI 접속
-
Entity 생성
- “Entities” 탭 클릭
- “Create Entity” 버튼 클릭
- Entity ID, 테이블명, Title 입력
-
속성(Props) 추가
- “Add Property” 버튼으로 새 속성 추가
- 타입 선택 및 옵션 설정
- 드래그 앤 드롭으로 순서 변경
-
Subset 정의
- “Subsets” 탭에서 subset 키 추가
- 체크박스로 포함할 필드 선택
- Relation 필드는 트리 형태로 펼쳐서 선택
-
저장 및 생성
- “Save” 버튼 클릭
- Entity 파일 자동 생성
- Migration 자동 생성
📸 필요: Sonamu UI에서 Entity 생성하는 전체 과정 (스크린샷 또는 GIF)
더 알아보기
- Sonamu UI 사용하기 - UI 상세 가이드
Entity 정의 후 자동 생성되는 것들
Entity를 정의하고 저장하면 Sonamu가 자동으로 다음을 생성합니다:TypeScript 타입
{entity}.types.ts 파일에 타입과 Zod 스키마 생성데이터베이스 마이그레이션
테이블 생성 SQL이 포함된 마이그레이션 파일 생성
Base 스키마
sonamu.generated.ts에 Base 스키마와 Enum 추가Model Scaffold
{entity}.model.ts 템플릿 생성 (선택 시)