재생성 흐름도
Entity 저장 시
.entity.json 파일을 저장하면 다음 파일들이 재생성됩니다.
재생성되는 파일
1
1. {Entity}.types.ts
Entity별 TypeScript 타입과 Zod 스키마위치:
api/src/application/{entity}/{entity}.types.ts생성 조건: Entity가 처음 생성될 때 (이후 자동 재생성 안됨)user.types.ts
2
2. sonamu.generated.ts
프로젝트 전체의 베이스 타입과 Enum위치:
api/src/application/sonamu.generated.ts항상 재생성: ✅3
3. sonamu.generated.sso.ts
Subset 쿼리 함수들위치:
api/src/application/sonamu.generated.sso.ts항상 재생성: ✅4
4. 타겟 복사
위 파일들이 타겟 프로젝트에 복사됨위치:
web/src/services/user/user.types.tsweb/src/services/sonamu.generated.tsweb/src/services/sonamu.generated.sso.tsapp/src/services/...(동일)
트리거 예시
Model 저장 시
.model.ts 파일을 저장하면 다음 파일들이 재생성됩니다.
재생성되는 파일
1
1. services.generated.ts
API 클라이언트 함수와 TanStack Query hooks위치:생성 기준: Model의
web/src/services/services.generated.tsapp/src/services/services.generated.ts
@api 데코레이터가 있는 메서드2
2. sonamu.generated.http
REST Client용 HTTP 테스트 파일위치:
api/sonamu.generated.http항상 재생성: ✅3
3. queries.generated.ts
SSR용 Query Options위치:
web/src/queries.generated.ts항상 재생성: ✅4
4. entry-server.generated.tsx
SSR Entry Server 코드위치:
web/src/entry-server.generated.tsx항상 재생성: ✅트리거 예시
Types 저장 시
.types.ts 파일을 저장하면 타겟에 복사됩니다.
재생성되는 파일
1
타겟 복사
수정된 Types 파일이 타겟 프로젝트에 복사위치:
web/src/services/{entity}/{entity}.types.tsapp/src/services/{entity}/{entity}.types.ts
sonamu → ./sonamu.shared트리거 예시
Config 저장 시
sonamu.config.ts 파일을 저장하면 환경 변수가 동기화됩니다.
재생성되는 파일
1
.sonamu.env
API 서버 정보를 담은 환경 변수 파일위치:
web/.sonamu.envapp/.sonamu.env
트리거 예시
i18n 파일 저장 시
src/i18n/**/*.ts 파일을 저장하면 SD 파일이 재생성됩니다.
재생성되는 파일
1
1. Locale 파일 복사
i18n 파일이 타겟에 복사됨위치:
web/src/i18n/{locale}.tsapp/src/i18n/{locale}.ts
2
2. sd.generated.ts
Sonamu Dictionary 파일 생성위치:
api/src/sd.generated.tsweb/src/sd.generated.tsapp/src/sd.generated.ts
재생성 매트릭스
파일 변경과 재생성 관계를 한눈에 보여주는 표입니다.| 변경 파일 | .types.ts | sonamu.generated.ts | sonamu.generated.sso.ts | services.generated.ts | sonamu.generated.http | queries.generated.ts | entry-server.generated.tsx | .sonamu.env | sd.generated.ts |
|---|---|---|---|---|---|---|---|---|---|
| .entity.json | ✅ (첫 생성) | ✅ | ✅ | - | - | - | - | - | - |
| .model.ts | - | - | - | ✅ | ✅ | ✅ | ✅ | - | - |
| .types.ts | 복사 | - | - | - | - | - | - | - | - |
| sonamu.config.ts | - | - | - | - | - | - | - | ✅ | - |
| i18n/.ts | - | - | - | - | - | - | - | - | ✅ |
- ✅ = 항상 재생성
- ✅ (첫 생성) = 첫 생성 시에만
- 복사 = 타겟에 복사
-
- = 재생성 안됨
재생성 방지하기
생성된 파일을 수정하면 다음 재생성 시 덮어씌워집니다.❌ 잘못된 방법
services.generated.ts 직접 수정
✅ 올바른 방법
- 별도 파일 생성
- Types 파일 활용
- Model에서 처리
services/user/user.custom.ts
재생성 강제하기
파일이 재생성되지 않을 때 강제로 재생성하는 방법입니다.Checksum 초기화
특정 파일 재생성
강제 Overwrite
재생성 최적화
재생성 시간을 줄이는 팁입니다.필요한 파일만 변경
필요한 파일만 변경
Types만 수정했다면 Entity를 다시 저장할 필요 없음
- Types 변경 → 타겟 복사만 (빠름)
- Entity 변경 → 모든 스키마 재생성 (느림)
불필요한 타겟 제거
불필요한 타겟 제거
사용하지 않는 타겟을
sonamu.config.ts에서 제거@api 데코레이터 최소화
@api 데코레이터 최소화
필요한 메서드에만
@api 추가- 내부 메서드는
@api불필요 - API 수가 적을수록 빠른 재생성
HMR 최적화
HMR 최적화
Node.js v22+ 사용 및 SSD 활용
