create-sonamu 0.0.1 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +365 -2
- package/index.js +632 -0
- package/package.json +30 -20
- package/template/src/README.md +274 -0
- package/template/src/packages/api/.swcrc +18 -0
- package/template/src/packages/api/custom-sequencer.ts +23 -0
- package/template/src/packages/api/database/docker-compose.yml +19 -0
- package/template/src/packages/api/database/fixtures/init.sh +15 -0
- package/template/src/packages/api/database/scripts/dump.sh +62 -0
- package/template/src/packages/api/database/scripts/seed.sh +60 -0
- package/template/src/packages/api/package.json +55 -0
- package/template/src/packages/api/package.json.bak +55 -0
- package/template/src/packages/api/src/application/.gitkeep +1 -0
- package/template/src/packages/api/src/i18n/en.ts +59 -0
- package/template/src/packages/api/src/i18n/ko.ts +57 -0
- package/template/src/packages/api/src/index.ts +6 -0
- package/template/src/packages/api/src/migrations/.gitkeep +1 -0
- package/template/src/packages/api/src/sonamu.config.ts +162 -0
- package/template/src/packages/api/src/testing/fixture.ts +6 -0
- package/template/src/packages/api/src/testing/global.ts +6 -0
- package/template/src/packages/api/src/testing/setup-mocks.ts +44 -0
- package/template/src/packages/api/src/typings/fastify.d.ts +7 -0
- package/template/src/packages/api/src/typings/sonamu.d.ts +19 -0
- package/template/src/packages/api/src/utils/subset-loaders.ts +11 -0
- package/template/src/packages/api/tsconfig.json +60 -0
- package/template/src/packages/api/tsconfig.schemas.json +5 -0
- package/template/src/packages/api/tsconfig.types.json +5 -0
- package/template/src/packages/api/vitest.config.ts +36 -0
- package/template/src/packages/web/.sonamu.env +2 -0
- package/template/src/{web → packages/web}/index.html +3 -3
- package/template/src/packages/web/package.json +49 -0
- package/template/src/packages/web/package.json.bak +49 -0
- package/template/src/packages/web/src/App.tsx +17 -0
- package/template/src/packages/web/src/admin-common/ApiLogViewer.tsx +285 -0
- package/template/src/packages/web/src/admin-common/CommonModal.tsx +91 -0
- package/template/src/packages/web/src/contexts/sonamu-provider.tsx +41 -0
- package/template/src/packages/web/src/entry-client.tsx +72 -0
- package/template/src/packages/web/src/entry-server.generated.tsx +58 -0
- package/template/src/packages/web/src/i18n/en.ts +63 -0
- package/template/src/packages/web/src/i18n/ko.ts +61 -0
- package/template/src/packages/web/src/routeTree.gen.ts +27 -0
- package/template/src/packages/web/src/routes/__root.tsx +44 -0
- package/template/src/packages/web/src/routes/index.tsx +14 -0
- package/template/src/packages/web/src/styles/tailwind.css +5 -0
- package/template/src/packages/web/src/vite-env.d.ts +2 -0
- package/template/src/packages/web/tailwind.config.ts +8 -0
- package/template/src/{web → packages/web}/tsconfig.json +5 -3
- package/template/src/packages/web/vite.config.ts +51 -0
- package/template/src/api/README.md +0 -3
- package/template/src/api/database/docker-compose.yml +0 -17
- package/template/src/api/package.json +0 -39
- package/template/src/api/sonamu.config.json +0 -11
- package/template/src/api/src/configs/db.ts +0 -25
- package/template/src/api/src/index.ts +0 -36
- package/template/src/api/src/testing/bootstrap.ts +0 -20
- package/template/src/api/src/testing/fixture.ts +0 -18
- package/template/src/api/src/testing/global.ts +0 -7
- package/template/src/api/src/typings/sonamu.d.ts +0 -5
- package/template/src/api/tsconfig.json +0 -115
- package/template/src/api/vite.config.mts +0 -15
- package/template/src/web/package.json +0 -40
- package/template/src/web/public/vite.svg +0 -1
- package/template/src/web/src/App.css +0 -34
- package/template/src/web/src/App.tsx +0 -15
- package/template/src/web/src/assets/react.svg +0 -1
- package/template/src/web/src/index.css +0 -76
- package/template/src/web/src/main.tsx +0 -30
- package/template/src/web/src/pages/index.tsx +0 -11
- package/template/src/web/src/vite-env.d.ts +0 -1
- package/template/src/web/vite.config.ts +0 -20
- /package/template/src/{web/src/services → packages/api/database/dumps}/.gitkeep +0 -0
- /package/template/src/{api/database/scripts/init.sql → packages/web/src/services/.gitkeep} +0 -0
- /package/template/src/{web → packages/web}/tsconfig.node.json +0 -0
package/README.md
CHANGED
|
@@ -1,3 +1,366 @@
|
|
|
1
|
-
# create-
|
|
1
|
+
# 🌲 create-sonamu
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
> Sonamu 프로젝트를 30초 만에 시작하세요.
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/create-sonamu)
|
|
6
|
+
[](https://opensource.org/licenses/MIT)
|
|
7
|
+
|
|
8
|
+
Sonamu는 **Entity-driven 풀스택 TypeScript 프레임워크**입니다. 엔티티를 정의하면 타입, API, 프론트엔드 서비스 코드가 자동으로 생성됩니다.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## 주요 특징
|
|
13
|
+
|
|
14
|
+
- **즉시 시작** - 프로젝트 생성부터 개발 서버 실행까지 1분
|
|
15
|
+
- **코드 자동 생성** - 엔티티 정의 → 타입, API, 서비스 코드 자동 생성
|
|
16
|
+
- **타입 안전성** - Zod 스키마 기반 End-to-End 타입 보장
|
|
17
|
+
- **HMR 지원** - 코드 변경 시 서버 재시작 없이 즉시 반영
|
|
18
|
+
- **SSR 지원** - React Server-Side Rendering 기본 탑재
|
|
19
|
+
- **PostgreSQL** - Docker로 간편한 데이터베이스 설정
|
|
20
|
+
- **Sonamu UI** - 브라우저에서 엔티티 관리 및 마이그레이션
|
|
21
|
+
- **Modern Stack** - TanStack Router, React Query, Tailwind CSS
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 빠른 시작
|
|
26
|
+
|
|
27
|
+
### 대화형 모드
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
pnpm create sonamu
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
? Project name: my_app
|
|
35
|
+
? Would you like to set up pnpm? Yes
|
|
36
|
+
? Would you like to set up a database using Docker? Yes
|
|
37
|
+
? Enter the Docker project name: my-app-container
|
|
38
|
+
? Enter the database user: postgres
|
|
39
|
+
? Enter the container name: my-app-pg
|
|
40
|
+
? Enter the database name: my-app
|
|
41
|
+
? Enter the database password: ****
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
> **프로젝트명 규칙**
|
|
45
|
+
> - 공백(space) 사용 불가
|
|
46
|
+
> - 하이픈(`-`) 사용 불가 (PostgreSQL DB 이름, 환경변수 호환성)
|
|
47
|
+
> - 언더스코어(`_`) 권장 (예: `my_project`, `test_app`)
|
|
48
|
+
|
|
49
|
+
### CLI 옵션 모드
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
# 프로젝트명만 지정 (언더스코어 사용)
|
|
53
|
+
pnpm create sonamu my_project
|
|
54
|
+
|
|
55
|
+
# 모든 질문을 기본값으로 자동 응답
|
|
56
|
+
pnpm create sonamu my_project --yes
|
|
57
|
+
|
|
58
|
+
# pnpm/docker 설정 여부를 명시적으로 지정
|
|
59
|
+
pnpm create sonamu my_app --pnpm y --docker y
|
|
60
|
+
|
|
61
|
+
# pnpm만 자동 진행 (docker는 프롬프트로 물어봄)
|
|
62
|
+
pnpm create sonamu my_app --pnpm y
|
|
63
|
+
|
|
64
|
+
# docker만 자동 진행 (pnpm은 프롬프트로 물어봄, DB 옵션은 기본값)
|
|
65
|
+
pnpm create sonamu my_app --docker y
|
|
66
|
+
|
|
67
|
+
# pnpm 설치 스킵
|
|
68
|
+
pnpm create sonamu my_app --pnpm n
|
|
69
|
+
# 또는
|
|
70
|
+
pnpm create sonamu my_app --skip-pnpm
|
|
71
|
+
|
|
72
|
+
# Docker 설정 스킵
|
|
73
|
+
pnpm create sonamu my_app --docker n
|
|
74
|
+
# 또는
|
|
75
|
+
pnpm create sonamu my_app --skip-docker
|
|
76
|
+
|
|
77
|
+
# 완전한 비대화형 모드 (모든 옵션 지정)
|
|
78
|
+
pnpm create sonamu my_app \
|
|
79
|
+
--pnpm y \
|
|
80
|
+
--docker y \
|
|
81
|
+
--db-user=postgres \
|
|
82
|
+
--db-password=1234 \
|
|
83
|
+
--db-name=myapp \
|
|
84
|
+
--container-name=myapp-pg \
|
|
85
|
+
--docker-project=myapp-docker
|
|
86
|
+
|
|
87
|
+
# DB 옵션만 지정 (pnpm/docker 설정은 프롬프트로 물어봄)
|
|
88
|
+
pnpm create sonamu my_app \
|
|
89
|
+
--db-name=myapp \
|
|
90
|
+
--db-password=1234
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
#### 사용 가능한 옵션
|
|
94
|
+
|
|
95
|
+
| 옵션 | 설명 | 기본값 |
|
|
96
|
+
| ------------------ | -------------------------------- | ---------------------- |
|
|
97
|
+
| `--yes`, `-y` | 모든 질문에 기본값으로 자동 응답 | - |
|
|
98
|
+
| `--pnpm` | pnpm 설치 여부 (`y`/`n`) | (프롬프트로 질문) |
|
|
99
|
+
| `--docker` | Docker DB 설정 여부 (`y`/`n`) | (프롬프트로 질문) |
|
|
100
|
+
| `--skip-pnpm` | pnpm 설치 건너뛰기 (`--pnpm n`과 동일) | false |
|
|
101
|
+
| `--skip-docker` | Docker DB 설정 건너뛰기 (`--docker n`과 동일) | false |
|
|
102
|
+
| `--db-user` | 데이터베이스 사용자 | postgres |
|
|
103
|
+
| `--db-password` | 데이터베이스 비밀번호 | 1234 |
|
|
104
|
+
| `--db-name` | 데이터베이스 이름 | {프로젝트명} |
|
|
105
|
+
| `--container-name` | Docker 컨테이너 이름 | {프로젝트명}-container |
|
|
106
|
+
| `--docker-project`, `--docker-pj-name` | Docker Compose 프로젝트명 | {프로젝트명}-docker |
|
|
107
|
+
|
|
108
|
+
> **참고**: `--pnpm y`, `--docker y`에서 `y`는 `yes`, `true`, `1`로도 지정할 수 있습니다. 마찬가지로 `n`은 `no`, `false`, `0`으로도 지정할 수 있습니다.
|
|
109
|
+
|
|
110
|
+
### 실행하기
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
# 1. 데이터베이스 시작
|
|
114
|
+
cd my_app/packages/api
|
|
115
|
+
pnpm docker:up
|
|
116
|
+
|
|
117
|
+
# 2. API 서버 시작 (Sonamu UI 포함)
|
|
118
|
+
pnpm dev
|
|
119
|
+
|
|
120
|
+
# 3. Web 서버 시작 (새 터미널)
|
|
121
|
+
cd my_app/packages/web
|
|
122
|
+
pnpm dev
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
🎉 **완료!**
|
|
126
|
+
|
|
127
|
+
- API: http://localhost:1028
|
|
128
|
+
- Sonamu UI: http://localhost:1028/sonamu-ui (엔티티 관리)
|
|
129
|
+
- Web: http://localhost:3028
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## 📁 생성되는 프로젝트 구조
|
|
134
|
+
|
|
135
|
+
```
|
|
136
|
+
├── packages/
|
|
137
|
+
│ ├── api/ # 백엔드 (Sonamu based on Fastify)
|
|
138
|
+
│ │ ├── src/
|
|
139
|
+
│ │ │ ├── application/ # 엔티티, 모델, 타입 (Entity 추가 후 생성)
|
|
140
|
+
│ │ │ ├── i18n/ # 다국어 지원 (ko, en)
|
|
141
|
+
│ │ │ ├── testing/ # 테스트 유틸리티
|
|
142
|
+
│ │ │ ├── index.ts # 서버 엔트리포인트
|
|
143
|
+
│ │ │ └── sonamu.config.ts # Sonamu 설정
|
|
144
|
+
│ │ ├── database/
|
|
145
|
+
│ │ │ ├── docker-compose.yml
|
|
146
|
+
│ │ │ ├── fixtures/ # DB 초기화 스크립트
|
|
147
|
+
│ │ │ └── scripts/ # dump, seed 스크립트
|
|
148
|
+
│ │ └── vitest.config.ts # 테스트 설정
|
|
149
|
+
│ │
|
|
150
|
+
│ └── web/ # 프론트엔드 (React + Vite + SSR)
|
|
151
|
+
│ └── src/
|
|
152
|
+
│ ├── routes/ # TanStack Router (파일 기반 라우팅)
|
|
153
|
+
│ ├── services/ # API 클라이언트 (Entity 추가 후 생성)
|
|
154
|
+
│ ├── i18n/ # 다국어 지원
|
|
155
|
+
│ ├── contexts/ # React Context (Sonamu Provider)
|
|
156
|
+
│ ├── admin-common/ # 공통 컴포넌트 (ApiLogViewer 등)
|
|
157
|
+
│ ├── entry-client.tsx # 클라이언트 엔트리
|
|
158
|
+
│ └── entry-server.generated.tsx # SSR 엔트리
|
|
159
|
+
└── pnpm-workspace.yaml # pnpm workspace 설정
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## 포트 구성
|
|
165
|
+
|
|
166
|
+
> 여러 프로젝트를 동시에 실행할 수 있습니다.
|
|
167
|
+
|
|
168
|
+
| 서비스 | 포트 | URL |
|
|
169
|
+
| -------------- | ------------------ | -------------------------------- |
|
|
170
|
+
| **API 서버** | `BASE_PORT` (1028) | http://localhost:1028 |
|
|
171
|
+
| **Sonamu UI** | - | http://localhost:1028/sonamu-ui |
|
|
172
|
+
| **Web 개발** | `BASE_PORT + 2000` (3028) | http://localhost:3028 |
|
|
173
|
+
| **PostgreSQL** | 5432 | - |
|
|
174
|
+
|
|
175
|
+
**참고**:
|
|
176
|
+
- Sonamu UI는 API 서버에 통합되어 있어 별도 실행이 필요 없습니다
|
|
177
|
+
- Web은 개발 중에는 Vite dev 서버(3028)로, 프로덕션에서는 빌드 후 API 서버에서 서빙됩니다
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## 📜 스크립트 레퍼런스
|
|
182
|
+
|
|
183
|
+
### API (`api/`)
|
|
184
|
+
|
|
185
|
+
| 명령어 | 설명 |
|
|
186
|
+
| ---------------- | ----------------------------------------- |
|
|
187
|
+
| `pnpm dev` | 개발 서버 시작 (HMR, Sonamu UI 포함) |
|
|
188
|
+
| `pnpm build` | 프로덕션 빌드 |
|
|
189
|
+
| `pnpm start` | 프로덕션 서버 실행 |
|
|
190
|
+
| `pnpm test` | 테스트 실행 |
|
|
191
|
+
| `pnpm db:up` | Docker 데이터베이스 시작 |
|
|
192
|
+
| `pnpm db:down` | Docker 데이터베이스 중지 |
|
|
193
|
+
| `pnpm db:reset` | 데이터베이스 초기화 (볼륨 삭제 후 재시작) |
|
|
194
|
+
| `pnpm dump` | 테스트 DB → 덤프 파일 생성 |
|
|
195
|
+
| `pnpm seed` | 덤프 파일 → fixture DB 적용 |
|
|
196
|
+
|
|
197
|
+
### Web (`web/`)
|
|
198
|
+
|
|
199
|
+
| 명령어 | 설명 |
|
|
200
|
+
| -------------- | ----------------------------- |
|
|
201
|
+
| `pnpm dev` | 개발 서버 시작 (Vite) |
|
|
202
|
+
| `pnpm build` | 프로덕션 빌드 (Client + SSR) |
|
|
203
|
+
| `pnpm preview` | 빌드 결과 미리보기 |
|
|
204
|
+
|
|
205
|
+
**참고**: `pnpm build`는 클라이언트와 SSR 서버를 모두 빌드합니다. 빌드 결과는 `api/public/web`과 `api/dist/ssr`에 복사됩니다.
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## 🔄 개발 워크플로우
|
|
210
|
+
|
|
211
|
+
### 1. 엔티티 생성
|
|
212
|
+
|
|
213
|
+
API 서버를 실행한 상태에서 http://localhost:1028/sonamu-ui 접속 → **Entities** 탭 → **+ Entity** 클릭
|
|
214
|
+
|
|
215
|
+
### 2. 자동 생성되는 파일들
|
|
216
|
+
|
|
217
|
+
**주의**: 프로젝트를 처음 생성했을 때는 Entity가 없으므로 이 파일들이 생성되지 않습니다.
|
|
218
|
+
첫 번째 Entity를 추가하면 다음 파일들이 자동으로 생성됩니다:
|
|
219
|
+
|
|
220
|
+
```
|
|
221
|
+
api/src/application/
|
|
222
|
+
├── user/
|
|
223
|
+
│ ├── user.entity.json # 엔티티 정의 (SSoT)
|
|
224
|
+
│ ├── user.types.ts # Zod 스키마 & 타입
|
|
225
|
+
│ └── user.model.ts # 비즈니스 로직
|
|
226
|
+
├── sonamu.generated.ts # 모든 Entity의 공통 타입 (자동 생성)
|
|
227
|
+
└── sonamu.generated.sso.ts # 서브셋 쿼리 (자동 생성)
|
|
228
|
+
|
|
229
|
+
web/src/services/
|
|
230
|
+
├── user/
|
|
231
|
+
│ ├── user.types.ts # (api에서 복사됨)
|
|
232
|
+
│ └── user.service.ts # API 클라이언트 (자동 생성)
|
|
233
|
+
├── sonamu.generated.ts # (api에서 복사됨)
|
|
234
|
+
├── sonamu.shared.ts # 공통 유틸 (josa, dateReviver 등)
|
|
235
|
+
└── services.generated.ts # 통합 서비스 (자동 생성)
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
**초기 상태**: 빌드 가능하도록 최소한의 스텁 파일들이 포함되어 있습니다.
|
|
239
|
+
**Entity 추가 후**: 실제 코드 생성 파일들로 자동 교체됩니다.
|
|
240
|
+
|
|
241
|
+
### 3. API 작성
|
|
242
|
+
|
|
243
|
+
```typescript
|
|
244
|
+
// api/src/application/user/user.model.ts
|
|
245
|
+
import { api } from "sonamu";
|
|
246
|
+
|
|
247
|
+
class UserModelClass extends BaseModelClass {
|
|
248
|
+
@api({ httpMethod: "GET" })
|
|
249
|
+
async findById(id: number): Promise<UserSubsetA | null> {
|
|
250
|
+
// 구현
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
@api({ httpMethod: "POST" })
|
|
254
|
+
async create(params: UserCreateParams): Promise<number> {
|
|
255
|
+
// 구현
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
저장하면 프론트엔드 서비스 코드가 자동 생성됩니다:
|
|
261
|
+
|
|
262
|
+
```typescript
|
|
263
|
+
// web/src/services/user/user.service.ts (자동 생성)
|
|
264
|
+
export const UserService = {
|
|
265
|
+
findById: (id: number) => fetch<UserSubsetA | null>({ ... }),
|
|
266
|
+
create: (params: UserCreateParams) => fetch<number>({ ... }),
|
|
267
|
+
};
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
### 4. 프론트엔드에서 사용
|
|
271
|
+
|
|
272
|
+
```tsx
|
|
273
|
+
// web/src/routes/users/index.tsx
|
|
274
|
+
import { createFileRoute } from "@tanstack/react-router";
|
|
275
|
+
import { useQuery } from "@tanstack/react-query";
|
|
276
|
+
import { UserService } from "@/services/user/user.service";
|
|
277
|
+
|
|
278
|
+
export const Route = createFileRoute("/users/")({
|
|
279
|
+
component: UserListPage,
|
|
280
|
+
});
|
|
281
|
+
|
|
282
|
+
function UserListPage() {
|
|
283
|
+
const { data: users } = useQuery({
|
|
284
|
+
queryKey: ["users"],
|
|
285
|
+
queryFn: () => UserService.findMany({ num: 10, page: 1 }),
|
|
286
|
+
});
|
|
287
|
+
// users는 ListResult<UserSubsetA> 타입으로 자동 추론됨
|
|
288
|
+
|
|
289
|
+
return <div>{/* ... */}</div>;
|
|
290
|
+
}
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
---
|
|
294
|
+
|
|
295
|
+
## 🗄️ 데이터베이스
|
|
296
|
+
|
|
297
|
+
### Docker 이미지
|
|
298
|
+
|
|
299
|
+
기본적으로 `pgvector/pgvector:pg18` 이미지를 사용합니다. 이 이미지에는 다음 extension이 포함되어 있습니다:
|
|
300
|
+
|
|
301
|
+
- **pgvector** - 벡터 검색 (AI/임베딩용)
|
|
302
|
+
|
|
303
|
+
> **pgroonga (전문 검색)가 필요한 경우**
|
|
304
|
+
>
|
|
305
|
+
> pgroonga는 C 라이브러리 기반으로 별도 컴파일이 필요하여 기본 이미지에 포함되어 있지 않습니다.
|
|
306
|
+
> 전문 검색이 필요하다면 [pgroonga Docker 이미지](https://hub.docker.com/r/groonga/pgroonga)를 사용하거나,
|
|
307
|
+
> 직접 Dockerfile을 작성하여 pgroonga를 설치하세요.
|
|
308
|
+
|
|
309
|
+
### 데이터베이스 구성
|
|
310
|
+
|
|
311
|
+
| DB 이름 | 용도 |
|
|
312
|
+
| ------------------ | --------------- |
|
|
313
|
+
| `{name}` | 메인 개발 DB |
|
|
314
|
+
| `{name}_fixture` | fixture DB |
|
|
315
|
+
| `{name}_test` | 테스트 실행용 |
|
|
316
|
+
|
|
317
|
+
### Fixture 워크플로우
|
|
318
|
+
|
|
319
|
+
```bash
|
|
320
|
+
# 테스트 데이터 수정 후
|
|
321
|
+
pnpm dump # 덤프 생성
|
|
322
|
+
git add database/dumps/
|
|
323
|
+
git commit -m "update fixture"
|
|
324
|
+
|
|
325
|
+
# 동료가 받을 때
|
|
326
|
+
git pull
|
|
327
|
+
pnpm seed # fixture DB에 적용
|
|
328
|
+
pnpm sonamu fixture sync # 테스트 DB로 동기화
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
---
|
|
332
|
+
|
|
333
|
+
## 📋 요구사항
|
|
334
|
+
|
|
335
|
+
- **Node.js** >= 18
|
|
336
|
+
- **pnpm** >= 10
|
|
337
|
+
- **Docker** (데이터베이스용)
|
|
338
|
+
|
|
339
|
+
---
|
|
340
|
+
|
|
341
|
+
## ❓ FAQ
|
|
342
|
+
|
|
343
|
+
### Q: yarn이나 npm으로도 사용할 수 있나요?
|
|
344
|
+
|
|
345
|
+
- 프로젝트는 pnpm workspace를 사용하도록 설계되었습니다. pnpm 사용을 권장합니다.
|
|
346
|
+
|
|
347
|
+
### Q: MySQL을 사용할 수 있나요?
|
|
348
|
+
|
|
349
|
+
- PostgreSQL만 지원합니다. create-sonamu 템플릿은 PostgreSQL 기준으로 설정되어 있습니다.
|
|
350
|
+
|
|
351
|
+
### Q: 기존 프로젝트에 Sonamu를 추가할 수 있나요?
|
|
352
|
+
|
|
353
|
+
- `create-sonamu`는 새 프로젝트용입니다. 기존 프로젝트에는 `sonamu` 패키지를 직접 설치하고 설정하세요.
|
|
354
|
+
|
|
355
|
+
---
|
|
356
|
+
|
|
357
|
+
## 📚 더 알아보기
|
|
358
|
+
|
|
359
|
+
- 📖 [Sonamu 공식 문서](https://rurruur.github.io/test-docs)
|
|
360
|
+
- 💬 [이슈 & 피드백](https://github.com/cartanova-ai/sonamu/issues)
|
|
361
|
+
|
|
362
|
+
---
|
|
363
|
+
|
|
364
|
+
## 📄 라이선스
|
|
365
|
+
|
|
366
|
+
MIT
|