실시간 찬반 토론 플랫폼 “Up & Down” 의 서버 코드 베이스입니다.
구분 | 설명 |
---|---|
🏎 Fastify v5 | 초고속 JSON HTTP 서버 (17 K req/sec+) |
🔐 보안 플러그인 | @fastify/helmet , @fastify/csrf-protection , @fastify/rate-limit |
📜 스키마 검증 | zod 기반 DTO 검증 & 자동 Swagger Docs |
🗄 Prisma ORM | PostgreSQL(예정) – Prisma 6 |
📈 로깅 | pino , pino-pretty , Loki Grafana exporter |
범주 | 라이브러리 |
---|---|
Runtime | Node 22 (ES Modules) |
Server | Fastify 5, @fastify/* 플러그인 |
ORM | Prisma 6 (@prisma/client ) |
Validation | Zod |
Config | envalid |
Testing | Vitest + @vitest/coverage-v8 |
Dev Tools | TypeScript 5, Tsx (HMR), ESLint 9 + Prettier, Husky (pre-commit) |
# 1. 의존성 설치
pnpm i
# 2. 환경 변수 설정
cp .env.example .env
# .env 파일 수정 (PORT, DATABASE_URL 등)
# 3. 개발 모드 (ts-node + HMR)
pnpm dev
# 4. Swagger 문서
# -> http://localhost:4000/docs
기본 포트 4000
명령어 | 목적 |
---|---|
pnpm dev |
HMR(Hot-Reload) 개발 서버 (tsx watch ) |
pnpm build |
TypeScript → ESBuild 컴파일 (dist/ ) |
pnpm start |
빌드 산출물 실행 (node dist/server.js ) |
pnpm test |
Vitest 단위 테스트 |
pnpm lint |
ESLint (fix 포함) |
pnpm format |
Prettier 코드 포맷팅 |
pnpm typecheck |
엄격 TypeScript 검사(emit X) |
up-down-server/
├─ prisma/
│ └─ schema.prisma # DB 스키마
├─ src/
│ ├─ plugins/ # Fastify 플러그인 등록
│ ├─ routes/ # REST 엔드포인트
│ ├─ lib/ # 공통 유틸리티 (logger, env 등)
│ └─ server.ts # 부트스트랩
└─ vitest.config.ts
.env
NODE_ENV=development
PORT=4000
# Database
DATABASE_URL=
# Rate-Limit
RATE_LIMIT_MAX=100
RATE_LIMIT_WINDOW=60
환경 값은 envalid
로 런타임 검증되며, 누락 시 애플리케이션이 즉시 종료됩니다.
- Swagger UI :
GET /docs
- OpenAPI JSON :
GET /docs/json
스키마는 각 라우트의 Zod schema 로부터 자동 생성됩니다.
pnpm test # CI용 (커버리지 포함)
pnpm test --watch # 개발용 Watch
커버리지는 V8 리포터(coverage/
)로 산출됩니다.
MIT License © 2025 Up & Down Team