전체 구조
my_app/ - Sonamu 모노레포 루트api/ - 백엔드 API 서버web/ - 프론트엔드 웹 애플리케이션MD
README.md - 프로젝트 문서📸 필요: VS Code에서 열린 Sonamu 프로젝트 전체 디렉토리 구조 (Explorer 사이드바)
API 디렉토리 (백엔드)
루트 파일
api/src/ - 소스 코드database/ - 데이터베이스 관련 파일JSON
package.json - 의존성 및 스크립트JSON
tsconfig.json - TypeScript 설정JSON
tsconfig.schemas.json - 스키마 생성용 설정JSON
tsconfig.types.json - 타입 생성용 설정TS
vite.config.ts - Sonamu UI 빌드 설정SWCRC
.swcrc - SWC 컴파일러 설정ENV
.env - 환경 변수 (자동 생성)📸 필요: api 디렉토리의 실제 파일 구조 (VS Code Explorer)
주요 파일 설명
주요 파일 설명
package.json
- 백엔드 의존성 관리
- npm 스크립트:
dev,build,test,docker:up/down,dump,seed등
- 메인 TypeScript 컴파일러 설정
tsconfig.schemas.json: Zod 스키마 생성 전용tsconfig.types.json: 타입 정의 생성 전용
- Sonamu UI 개발 서버 설정 (
pnpm sonamu ui) - HMR(Hot Module Replacement) 설정
- 데이터베이스 연결 정보
- 프로젝트 설정 변수
pnpm create sonamu실행 시 자동 생성
src/ 디렉토리
api/src/TS
index.ts - 서버 진입점TS
sonamu.config.ts - Sonamu 설정 파일application/ - 엔티티별 폴더 (자동 생성){entity}/JSON
{entity}.entity.json - 엔티티 정의TS
{entity}.model.ts - 비즈니스 로직TS
{entity}.types.ts - 타입 + Zod 스키마TS
{entity}.model.test.ts - 테스트 (선택)TS
sonamu.generated.ts - Base 스키마 (자동 생성)testing/ - 테스트 설정TS
global.ts - 전역 테스트 설정TS
fixture.ts - Fixture 관리typings/ - 타입 정의TS
sonamu.d.ts - Sonamu 전역 타입TS
fastify.d.ts - Fastify 확장 타입utils/ - 유틸리티 함수TS
subset-loaders.ts - Subset 로더📸 필요: api/src 디렉토리 구조 (application 폴더가 펼쳐진 상태)
주요 디렉토리 설명
주요 디렉토리 설명
application/
- 첫 엔티티 생성 시 자동으로 생성됨
- 각 엔티티마다 별도 디렉토리 생성
- 예:
User엔티티 →application/user/디렉토리
- 엔티티 정의 파일
- Sonamu UI에서 작성
- 데이터베이스 스키마의 소스
- 비즈니스 로직 구현
- API 엔드포인트 정의 (
@api데코레이터) - 직접 작성하는 파일
- TypeScript 타입 정의
- Zod validation 스키마
- 자동 생성되지만 확장 가능
- 프론트엔드와 공유
- 모든 엔티티의 Base 스키마 자동 생성
- Enum 타입 및 레이블 정의
- 직접 수정하지 말 것
- Vitest 테스트 환경 설정
- Fixture 데이터 관리
- 테스트 유틸리티
더 알아보기 - 엔티티 파일
- 엔티티 정의하기 - entity.json 작성법
- Model 만들기 - model.ts 작성 가이드
- 타입 시스템 - types.ts 이해하기
- 자동 생성되는 것들 - 어떤 파일이 자동 생성되는지
- 테스트 작성하기 - 테스트 파일 구조
database/ 디렉토리
api/database/YML
docker-compose.yml - PostgreSQL 컨테이너 설정fixtures/SQL
init.sql - 데이터베이스 초기화 SQLdumps/ - 데이터 덤프 파일scripts/SH
dump.sh - 데이터 백업 스크립트SH
seed.sh - 데이터 복원 스크립트주요 파일 설명
주요 파일 설명
docker-compose.yml
- PostgreSQL + pgvector 이미지
- 컨테이너 이름, 포트, 환경 변수 설정
pnpm docker:up으로 실행
- 데이터베이스 초기 설정
- 확장 프로그램 설치 (pgvector 등)
pnpm create sonamu실행 시 자동 생성
pnpm dump명령으로 생성된 SQL 파일- 데이터 백업 저장소
dump.sh: 현재 DB 데이터를 dumps/에 백업seed.sh: dumps/의 데이터를 DB에 복원
더 알아보기 - 설정 파일
- sonamu.config.ts 설정 - 프로젝트 전체 설정
- 데이터베이스 설정 - DB 연결 및 설정
- 서버 설정 - Fastify 서버 설정
- TypeScript 설정 - 컴파일러 옵션
- 환경 변수 - .env 파일 관리
Web 디렉토리 (프론트엔드)
루트 파일
web/src/ - 소스 코드HTML
index.html - HTML 엔트리포인트JSON
package.json - 의존성 및 스크립트TS
vite.config.ts - Vite 설정JSON
tsconfig.json - TypeScript 설정JSON
tsconfig.node.json - Node 환경 설정ENV
.sonamu.env - 환경 변수📸 필요: web 디렉토리의 실제 파일 구조 (VS Code Explorer)
주요 파일 설명
주요 파일 설명
vite.config.ts
- Vite 개발 서버 설정
- API 프록시 설정 (
/api→http://localhost:1028) - 경로 별칭 (
@→./src)
- API 서버 연결 정보
API_HOST,API_PORT설정
src/ 디렉토리
web/src/TSX
main.tsx - React 진입점TSX
App.tsx - 루트 컴포넌트CSS
App.css - 글로벌 스타일CSS
index.css - 기본 스타일pages/ - 페이지 컴포넌트TSX
index.tsx - 홈 페이지services/ - API 서비스 (자동 생성)TS
{Entity}Service.tsadmin-common/ - 공통 컴포넌트TSX
ApiLogViewer.tsxTSX
CommonModal.tsxassets/ - 정적 리소스TS
vite-env.d.ts - Vite 타입 정의주요 디렉토리 설명
주요 디렉토리 설명
pages/
- 라우팅 기반 페이지 컴포넌트
- React Router 사용
- API 서버와 통신하는 서비스 레이어
- 엔티티마다 자동 생성
- 타입 안전한 API 클라이언트
- 재사용 가능한 공통 컴포넌트
- Sonamu UI 관련 컴포넌트
더 알아보기 - 프론트엔드
- Service 작동 원리 - 자동 생성 메커니즘
- Service 사용하기 - API 호출 방법
- 공유 타입 - 백엔드-프론트엔드 타입 동기화
엔티티 생성 시 파일 구조 예시
User 엔티티를 생성하면 다음과 같은 구조가 만들어집니다:api/src/application/user/JSON
user.entity.json - Sonamu UI에서 생성TS
user.model.ts - 직접 작성TS
user.types.ts - 자동 생성 (확장 가능)TS
user.model.test.ts - 직접 작성 (선택)TS
sonamu.generated.ts - 자동 업데이트database/migrations/SQL
20250106120000_create_user.sql - 자동 생성web/src/services/TS
UserService.ts - 자동 생성📸 필요: User 엔티티 생성 후 api/src/application/user 폴더의 실제 파일 구조
각 파일의 역할
📸 필요: VS Code에서 user.entity.json, user.model.ts, user.types.ts 파일을 나란히 열어 놓은 화면 (split view)
자동 생성 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 이해
개발 시 주요 작업 위치
| 작업 내용 | 위치 | 방법 |
|---|---|---|
| 엔티티 정의 | api/src/application/{entity}/{entity}.entity.json | Sonamu UI |
| 비즈니스 로직 | api/src/application/{entity}/{entity}.model.ts | 직접 작성 |
| 커스텀 타입 | api/src/application/{entity}/{entity}.types.ts | 직접 확장 |
| API 엔드포인트 | Model 파일에 @api 데코레이터 | 직접 작성 |
| 데이터베이스 설정 | api/src/sonamu.config.ts | 직접 작성 |
| 서버 설정 | api/src/sonamu.config.ts | 직접 작성 |
| 테스트 작성 | api/src/application/{entity}/{entity}.model.test.ts | 직접 작성 |
| 페이지 컴포넌트 | web/src/pages/ | 직접 작성 |
| 공통 컴포넌트 | web/src/admin-common/ | 직접 작성 |
