Model 생성 과정
1
Entity 정의
먼저 Entity를 정의해야 합니다.
user.entity.json
2
자동 타입 생성
Entity 저장 시 자동으로 타입 파일이 생성됩니다.생성되는 파일:
user.types.ts- TypeScript 타입과 Zod 스키마sonamu.generated.ts- Base 스키마와 Enumsonamu.generated.sso.ts- Subset 쿼리 함수
3
Model Scaffold 생성
Sonamu CLI를 사용하여 Model 템플릿을 생성합니다.또는 Sonamu UI의 Scaffolding 탭에서 생성할 수 있습니다.
4
Model 커스터마이징
생성된 Model에 비즈니스 로직을 추가합니다.
Scaffold로 Model 생성하기
CLI 사용
Sonamu UI 사용
1
Scaffolding 탭 열기
Sonamu UI(
http://localhost:1028/sonamu-ui)에서 Scaffolding 탭을 클릭합니다.2
Model 템플릿 선택
“Model” 템플릿을 선택하고 Entity를 지정합니다.
3
옵션 설정
- Default Search Field: 기본 검색 필드 (예:
email) - Default Order By: 기본 정렬 (예:
id-desc) - Overwrite: 기존 파일 덮어쓰기 여부
4
생성 실행
“Generate” 버튼을 클릭하면 Model 파일이 생성됩니다.
📸 필요: Sonamu UI의 Scaffolding 탭 - Model 생성 화면
생성되는 Model 구조
Scaffold로 생성된 Model의 기본 구조입니다:user.model.ts
생성된 메서드 설명
Scaffold가 생성하는 기본 메서드들입니다:1. findById
단일 레코드를 ID로 조회합니다.- Subset을 파라미터로 받아 필요한 필드만 조회
- 레코드가 없으면
NotFoundException발생 @api데코레이터로 HTTP 엔드포인트 생성
2. findOne
조건에 맞는 첫 번째 레코드를 조회합니다.- 레코드가 없으면
null반환 (예외 발생 안함) - 내부적으로
findMany를 호출하여num: 1, page: 1사용
3. findMany
여러 레코드를 조건에 따라 조회합니다.- 페이지네이션 지원 (
num,page) - 검색/필터링 (
search,keyword) - 정렬 (
orderBy) ListResult타입으로{ rows, total }반환
4. save
레코드를 생성하거나 수정합니다.- Upsert Builder 사용 (Insert or Update)
- 배열로 여러 레코드 한번에 처리
- 트랜잭션으로 묶어서 실행
- 생성/수정된 ID 배열 반환
5. del
레코드를 삭제합니다.- 여러 ID를 배열로 받음
- 트랜잭션으로 실행
guards: ["admin"]으로 관리자만 삭제 가능- 삭제된 레코드 수 반환
수동으로 Model 생성하기
Scaffold를 사용하지 않고 직접 작성할 수도 있습니다.최소 구조
네이밍 규칙
| 구분 | 패턴 | 예시 |
|---|---|---|
| 클래스명 | {Entity}ModelClass | UserModelClass |
| Export명 | {Entity}Model | UserModel |
| 파일명 | {entity}.model.ts | user.model.ts |
Model 파일 위치
Model 파일은 Entity와 같은 디렉토리에 위치합니다:Types 파일 작성
Model과 함께 사용할 파라미터 타입을 정의합니다:user.types.ts
{Entity}ListParams: 목록 조회용{Entity}SaveParams: 생성/수정용{Entity}{Action}Params: 특정 액션용 (예:LoginParams)
Model 등록 확인
생성된 Model이 제대로 로드되는지 확인합니다:api/src/application/sonamu.generated.ts
