전체 구조

pnpm 워크스페이스
루트의pnpm-workspace.yaml에서 패키지와 공통 의존성 버전을 관리합니다:
pnpm-workspace.yaml
API 디렉토리 (백엔드)
루트 파일

주요 파일 설명
주요 파일 설명
package.json
- 백엔드 의존성 관리
- npm 스크립트:
dev,build,test,docker:up/down,dump,seed등
- Vitest 테스트 설정
getSonamuTestConfig()함수로 Sonamu 최적화 설정- 커버리지, 리포터, 시퀀서 설정
- 메인 TypeScript 컴파일러 설정
tsconfig.schemas.json: Zod 스키마 생성 전용tsconfig.types.json: 타입 정의 생성 전용
- 데이터베이스 연결 정보 (DB_HOST, DB_PORT, DB_USER, DB_PASSWORD)
- 프로젝트 설정 변수 (DATABASE_NAME, CONTAINER_NAME, PROJECT_NAME)
pnpm create sonamu실행 시 자동 생성
src/ 디렉토리

엔티티 파일 생성 과정
application/{entity}/ 폴더 내의 파일들은 Sonamu UI를 통해 엔티티를 생성하고 스캐폴딩해야 생성됩니다:- .entity.json: Sonamu UI에서 엔티티 정의 시 자동 생성
- .model.ts:
pnpm scaffold model또는 Sonamu UI의 Scaffolding 탭에서 생성 - .types.ts: 엔티티 저장 시 자동 생성
- .model.test.ts:
pnpm scaffold model_test또는 Sonamu UI의 Scaffolding 탭에서 생성 (선택사항)
application/ 폴더가 비어 있습니다. 첫 번째 엔티티를 생성하면 해당 폴더가 만들어집니다.주요 디렉토리 설명
주요 디렉토리 설명
application/
- 첫 엔티티 생성 시 자동으로 생성됨
- 각 엔티티마다 별도 디렉토리 생성
- 예:
User엔티티 →application/user/디렉토리
- 엔티티 정의 파일
- Sonamu UI에서 작성
- 데이터베이스 스키마의 소스
- 비즈니스 로직 구현
- API 엔드포인트 정의 (
@api데코레이터) - 직접 작성하는 파일
- TypeScript 타입 정의
- Zod validation 스키마
- 자동 생성되지만 확장 가능
- 프론트엔드와 공유
- 모든 엔티티의 Base 스키마 자동 생성
- Enum 타입 및 레이블 정의
- 직접 수정하지 말 것
- 다국어 번역 파일
ko.ts: 한국어,en.ts: 영어- Entity 추가 시
sd.generated.ts가 자동 생성됨
- Sonamu UI에서 생성한 DB 마이그레이션 파일
pnpm sonamu migrate run으로 실행
- Vitest 테스트 환경 설정
global.ts:export { setup } from "sonamu/test"패턴 사용- Fixture 데이터 관리
더 알아보기 - 엔티티 파일 - 엔티티 정의하기 -
entity.json 작성법 - Model 만들기 - model.ts 작성
가이드 - 타입 시스템 - types.ts 이해하기 - 자동
생성되는 것들 - 어떤 파일이 자동
생성되는지 - 테스트 작성하기 - 테스트 파일 구조
database/ 디렉토리
주요 파일 설명
주요 파일 설명
docker-compose.yml
- PostgreSQL + pgvector 이미지
- 컨테이너 이름, 포트, 환경 변수 설정
pnpm docker:up으로 실행
- 데이터베이스 초기화 쉘 스크립트
- pgvector 확장 설치 및 데이터베이스 생성
- 환경변수로 데이터베이스 이름 지정 (
DATABASE_NAME,_fixture,_test) pnpm create sonamu실행 시 자동 생성
pnpm dump명령으로 생성된 SQL 파일- 데이터 백업 저장소
dump.sh: 현재 DB 데이터를 dumps/에 백업seed.sh: dumps/의 데이터를 DB에 복원
더 알아보기 - 설정 파일 - sonamu.config.ts
설정 - 프로젝트 전체 설정 - 데이터베이스
설정 - DB 연결 및 설정 - 서버
설정 - Fastify 서버 설정 - TypeScript
설정 - 컴파일러 옵션 - 환경
변수 - .env 파일 관리
Web 디렉토리 (프론트엔드)
루트 파일

주요 파일 설명
주요 파일 설명
vite.config.ts
- Vite 개발 서버 설정
- TanStack Router, Tailwind CSS v4, unplugin-icons 플러그인
- API 프록시 설정 (
/api→http://localhost:34900) - SSR 설정 포함
- Tailwind CSS v4 설정
- API 서버 연결 정보
API_HOST,API_PORT설정
src/ 디렉토리
주요 디렉토리 설명
주요 디렉토리 설명
routes/
- TanStack Router 기반 파일 시스템 라우팅
__root.tsx: 전역 레이아웃- 파일명이 URL 경로에 매핑됨
- API 서버와 통신하는 서비스 레이어
- 엔티티마다 자동 생성
- TanStack Query 통합 지원
- React Context Provider
- SonamuContext: 전역 상태 관리
- 프론트엔드 다국어 번역 파일
- API의 i18n과 동기화
- 재사용 가능한 공통 컴포넌트
- ApiLogViewer 등 디버깅 도구
더 알아보기 - 프론트엔드 - Service 작동
원리 - 자동 생성 메커니즘 -
Service 사용하기 - API 호출 방법 -
공유 타입 - 백엔드-프론트엔드 타입 동기화
엔티티 생성 시 파일 구조 예시
User 엔티티를 생성하면 다음과 같은 구조가 만들어집니다:

각 파일의 역할

자동 생성 vs 직접 작성 -
.entity.json: Sonamu UI에서 작성 - .model.ts: 직접 작성 -
.types.ts: 자동 생성되지만 확장 가능 - sonamu.generated.ts: 자동 생성 - 수정 금지 - {entity} .service.ts: 자동 생성 - 수정 금지더 알아보기 - 파일별 가이드 - 엔티티 정의하기 -
entity.json 작성법 - @api 데코레이터 - model.ts에서 API
정의 - Entity Types - types.ts 활용하기 - Generated
Types - sonamu.generated.ts 이해
개발 시 주요 작업 위치
| 작업 내용 | 위치 | 방법 |
|---|---|---|
| 엔티티 정의 | packages/api/src/application/{entity}/{entity}.entity.json | Sonamu UI |
| 비즈니스 로직 | packages/api/src/application/{entity}/{entity}.model.ts | 직접 작성 |
| 커스텀 타입 | packages/api/src/application/{entity}/{entity}.types.ts | 직접 확장 |
| API 엔드포인트 | Model 파일에 @api 데코레이터 | 직접 작성 |
| 데이터베이스 설정 | packages/api/src/sonamu.config.ts | 직접 작성 |
| 서버 설정 | packages/api/src/sonamu.config.ts | 직접 작성 |
| 테스트 작성 | packages/api/src/application/{entity}/{entity}.model.test.ts | 직접 작성 |
| 페이지 컴포넌트 | packages/web/src/routes/ | 직접 작성 |
| 공통 컴포넌트 | packages/web/src/admin-common/ | 직접 작성 |
다음 단계
프로젝트 구조를 이해했다면, 이제 첫 번째 엔티티를 만들어보세요:첫 엔티티 만들기
Sonamu UI를 사용하여 첫 번째 엔티티를 생성하고 데이터베이스 스키마를 정의하세요.
개발 워크플로우
Sonamu의 전체 개발 사이클을 이해하고 효율적으로 작업하는 방법을 배워보세요.