Real POS(Point of Sale) 시스템의 백엔드 API 서버입니다. 실시간 주문 관리와 메뉴 관리를 제공하는 현대적인 POS 솔루션입니다.
- JWT 기반 액세스/리프레시 토큰 인증
- 쿠키 기반 보안 인증 관리
- 회원가입/로그인/로그아웃
- 사용자 프로필 관리
- 메뉴 등록/수정/조회
- 카테고리별 메뉴 분류
- 메뉴 활성화/비활성화
- 가격 및 설명 관리
- 실시간 주문 생성 및 관리
- 주문 상태 추적 (진행중/완료)
- 오늘/월별 주문 통계
- 주문 항목 세부 관리
- Server-Sent Events(SSE) 기반 실시간 주문 알림
- 주문 생성/완료 시 즉시 알림
- 다중 클라이언트 동시 연결 지원
- Framework: NestJS 10.x
- Language: TypeScript
- Database: MySQL 8.0
- ORM: TypeORM
- Authentication: JWT + Passport
- Validation: class-validator, class-transformer
- Security: bcrypt, cookie-parser
- Real-time: Server-Sent Events (SSE)
- Container: Docker & Docker Compose
src/
├── auth/ # 인증 모듈
│ ├── dto/ # 로그인/회원가입 DTO
│ ├── auth.controller.ts # 인증 컨트롤러
│ ├── auth.service.ts # 인증 서비스
│ ├── jwt.strategy.ts # JWT 전략
│ └── jwt-auth.guard.ts # JWT 가드
├── user/ # 사용자 모듈
│ ├── user.entity.ts # 사용자 엔티티
│ ├── user.controller.ts # 사용자 컨트롤러
│ └── user.service.ts # 사용자 서비스
├── menu/ # 메뉴 모듈
│ ├── menu.entity.ts # 메뉴 엔티티
│ ├── menu.controller.ts # 메뉴 컨트롤러
│ └── menu.service.ts # 메뉴 서비스
├── order/ # 주문 모듈
│ ├── order.entity.ts # 주문 엔티티
│ ├── order.controller.ts # 주문 컨트롤러
│ ├── order.service.ts # 주문 서비스
│ ├── order.sse.controller.ts # SSE 컨트롤러
│ └── order.sse.service.ts # SSE 서비스
├── order-item/ # 주문 항목 모듈
│ ├── order-item.entity.ts # 주문 항목 엔티티
│ ├── order-item.controller.ts # 주문 항목 컨트롤러
│ └── order-item.service.ts # 주문 항목 서비스
├── common/ # 공통 모듈
│ └── filters/ # 예외 필터
└── main.ts # 애플리케이션 진입점
.env
파일을 프로젝트 루트에 생성하세요:
# Database Configuration
DB_HOST=localhost
DB_PORT=3306
DB_USERNAME=root
DB_PASSWORD=your_password
DB_NAME=real_pos
# JWT Configuration
JWT_ACCESS_SECRET=your-secret-key-here
JWT_REFRESH_SECRET=your-refresh-secret-key-here
JWT_EXPIRES_IN=15m
JWT_REFRESH_EXPIRES_IN=7d
# Frontend Configuration
FRONTEND_URL=http://localhost:3000
# Server Configuration
PORT=8080
NODE_ENV=development
# 의존성 설치
yarn install
# 개발 모드 실행
yarn start:dev
# 프로덕션 빌드
yarn build
# 프로덕션 모드 실행
yarn start:prod
POST /auth/signup # 회원가입
POST /auth/signin # 로그인
POST /auth/logout # 로그아웃
POST /auth/refresh # 토큰 갱신
GET /user/me # 내 정보 조회
PUT /user/me # 내 정보 수정
DELETE /user/me # 회원 탈퇴
GET /menus # 메뉴 목록 조회
POST /menus # 메뉴 등록
PATCH /menus/:id # 메뉴 수정
GET /orders # 내 주문 전체 조회
GET /orders/today # 오늘 주문 조회
GET /orders/monthly # 월별 주문 조회
GET /orders/:id # 주문 상세 조회
POST /orders # 주문 생성
PATCH /orders/:id # 주문 수정
PATCH /orders/:id/complete # 주문 완료
DELETE /orders/:id # 주문 삭제
GET /order-item/order/:orderId # 주문별 항목 조회
POST /order-item/order/:orderId # 주문 항목 추가
PATCH /order-item/:id # 주문 항목 수정
DELETE /order-item/:id # 주문 항목 삭제
GET /orders/sse?userId=:id # 실시간 주문 알림 구독
id
: 사용자 고유 IDemail
: 이메일 (로그인 ID)password
: 암호화된 비밀번호store_name
: 매장명phone
: 전화번호
id
: 메뉴 고유 IDname
: 메뉴명price
: 가격category
: 카테고리description
: 설명is_active
: 활성화 여부
id
: 주문 고유 IDstatus
: 주문 상태 (IN_PROGRESS, COMPLETED)user_id
: 사용자 ID (FK)
id
: 주문 항목 고유 IDorder_id
: 주문 ID (FK)menu_id
: 메뉴 ID (FK)quantity
: 수량price
: 단가
- JWT 토큰: 액세스/리프레시 토큰 기반 인증
- 쿠키 보안: HttpOnly, Secure, SameSite 설정
- 비밀번호 암호화: bcrypt 해싱
- CORS 설정: 프론트엔드 도메인 제한
- 입력 검증: class-validator를 통한 DTO 검증
Server-Sent Events(SSE)를 통해 다음과 같은 실시간 기능을 제공합니다:
- 새 주문 알림: 주문 생성 시 즉시 알림
- 주문 상태 변경: 주문 완료 시 실시간 업데이트
- 다중 연결: 여러 클라이언트 동시 지원