176 lines
5.3 KiB
Markdown
176 lines
5.3 KiB
Markdown
# WACE 솔루션 (ERP/PLM)
|
|
|
|
## 프로젝트 개요
|
|
|
|
본 프로젝트는 WACE ERP/PLM(Product Lifecycle Management) 솔루션입니다.
|
|
Node.js + Next.js 기반 풀스택 웹 애플리케이션으로, 멀티테넌시를 지원합니다.
|
|
|
|
## 주요 특징
|
|
|
|
- **모던 프론트엔드**: Next.js (App Router) + TypeScript + shadcn/ui
|
|
- **Node.js 백엔드**: Express + TypeScript + PostgreSQL
|
|
- **반응형 디자인**: 데스크톱, 태블릿, 모바일 모든 기기 지원
|
|
- **멀티테넌시**: 회사별 데이터 격리 (company_code 기반)
|
|
- **Docker 기반 배포**: 개발/운영 환경 일관성 보장
|
|
- **타입 안전성**: TypeScript로 런타임 에러 방지
|
|
|
|
## 기술 스택
|
|
|
|
### Frontend
|
|
|
|
- **프레임워크**: Next.js (App Router, Turbopack)
|
|
- **언어**: TypeScript
|
|
- **UI 라이브러리**: shadcn/ui + Radix UI
|
|
- **스타일링**: Tailwind CSS
|
|
- **상태 관리**: TanStack Query + React Context
|
|
- **아이콘**: Lucide React
|
|
|
|
### Backend
|
|
|
|
- **런타임**: Node.js 20+
|
|
- **프레임워크**: Express 4
|
|
- **언어**: TypeScript
|
|
- **데이터베이스**: PostgreSQL (pg 드라이버)
|
|
- **인증**: JWT (jsonwebtoken) + bcryptjs
|
|
- **로깅**: Winston
|
|
|
|
### 개발 도구
|
|
|
|
- **컨테이너화**: Docker + Docker Compose
|
|
- **코드 품질**: ESLint + Prettier
|
|
- **테스트**: Jest + Supertest
|
|
- **백엔드 핫리로드**: nodemon
|
|
- **CI/CD**: Jenkins
|
|
|
|
## 프로젝트 구조
|
|
|
|
```
|
|
ERP-node/
|
|
├── backend-node/ # Express + TypeScript 백엔드
|
|
│ ├── src/
|
|
│ │ ├── app.ts # 엔트리포인트
|
|
│ │ ├── controllers/ # API 컨트롤러
|
|
│ │ ├── services/ # 비즈니스 로직
|
|
│ │ ├── middleware/ # 인증, 에러처리 미들웨어
|
|
│ │ ├── routes/ # 라우터
|
|
│ │ └── config/ # DB 연결 등 설정
|
|
│ └── package.json
|
|
├── frontend/ # Next.js 프론트엔드
|
|
│ ├── app/ # App Router 페이지
|
|
│ ├── components/ # React 컴포넌트
|
|
│ │ ├── ui/ # shadcn/ui 기본 컴포넌트
|
|
│ │ ├── admin/ # 관리자 컴포넌트
|
|
│ │ ├── screen/ # 화면 디자이너
|
|
│ │ └── v2/ # V2 컴포넌트
|
|
│ ├── lib/ # 유틸리티, API 클라이언트
|
|
│ ├── hooks/ # Custom React Hooks
|
|
│ └── package.json
|
|
├── db/ # 데이터베이스
|
|
│ └── migrations/ # 순차 마이그레이션 SQL
|
|
├── docker/ # Docker 설정 (dev/prod/deploy)
|
|
├── scripts/ # 개발/배포 스크립트
|
|
├── docs/ # 프로젝트 문서
|
|
├── Dockerfile # 프로덕션 멀티스테이지 빌드
|
|
├── Jenkinsfile # CI/CD 파이프라인
|
|
└── .cursorrules # AI 개발 가이드
|
|
```
|
|
|
|
## 빠른 시작
|
|
|
|
### 1. 필수 요구사항
|
|
|
|
- **Node.js**: 20.10+
|
|
- **PostgreSQL**: 데이터베이스 서버
|
|
- **npm**: 10.0+
|
|
|
|
### 2. 개발 환경 실행
|
|
|
|
```bash
|
|
# 백엔드 (nodemon으로 자동 재시작)
|
|
cd backend-node && npm install && npm run dev
|
|
|
|
# 프론트엔드 (Turbopack)
|
|
cd frontend && npm install && npm run dev
|
|
```
|
|
|
|
### 3. Docker 환경 실행
|
|
|
|
```bash
|
|
# 백엔드 + 프론트엔드 (개발)
|
|
docker-compose -f docker-compose.backend.win.yml up -d
|
|
docker-compose -f docker-compose.frontend.win.yml up -d
|
|
|
|
# 프로덕션 배포
|
|
docker-compose -f docker/deploy/docker-compose.yml up -d
|
|
```
|
|
|
|
### 4. 서비스 접속
|
|
|
|
| 서비스 | URL | 설명 |
|
|
| -------------- | --------------------- | ------------------------------ |
|
|
| **프론트엔드** | http://localhost:9771 | Next.js 사용자 인터페이스 |
|
|
| **백엔드 API** | http://localhost:8080 | Express REST API |
|
|
|
|
## 주요 기능
|
|
|
|
### 1. 사용자 및 권한 관리
|
|
- 사용자 계정 관리 (CRUD)
|
|
- 역할 기반 접근 제어 (RBAC)
|
|
- 부서/조직 관리
|
|
- 멀티테넌시 (회사별 데이터 격리)
|
|
|
|
### 2. 메뉴 및 화면 관리
|
|
- 동적 메뉴 구성
|
|
- 화면 디자이너 (드래그앤드롭)
|
|
- V2 컴포넌트 시스템
|
|
|
|
### 3. 플로우(워크플로우) 관리
|
|
- 비즈니스 프로세스 정의
|
|
- 데이터 흐름 관리
|
|
- 감사 로그
|
|
|
|
### 4. 제품/BOM 관리
|
|
- BOM 구성 및 버전 관리
|
|
- 제품 정보 관리
|
|
|
|
### 5. 기타
|
|
- 파일/문서 관리
|
|
- 메일 연동
|
|
- 외부 DB 연결
|
|
- 번호 채번 규칙
|
|
|
|
## 환경 변수
|
|
|
|
```bash
|
|
# backend-node/.env
|
|
DATABASE_URL=postgresql://postgres:password@localhost:5432/dbname
|
|
JWT_SECRET=your-jwt-secret
|
|
JWT_EXPIRES_IN=24h
|
|
PORT=8080
|
|
CORS_ORIGIN=http://localhost:9771
|
|
|
|
# frontend/.env.local
|
|
NEXT_PUBLIC_API_URL=http://localhost:8080/api
|
|
```
|
|
|
|
## 배포
|
|
|
|
### 프로덕션 빌드
|
|
|
|
```bash
|
|
# 멀티스테이지 Docker 빌드 (백엔드 + 프론트엔드)
|
|
docker build -t wace-solution .
|
|
```
|
|
|
|
### CI/CD
|
|
|
|
Jenkins 파이프라인 (`Jenkinsfile`)으로 자동 빌드 및 배포가 설정되어 있습니다.
|
|
|
|
## 코드 컨벤션
|
|
|
|
- **TypeScript**: 엄격한 타입 정의 사용
|
|
- **ESLint + Prettier**: 일관된 코드 스타일
|
|
- **shadcn/ui**: UI 컴포넌트 표준
|
|
- **API 클라이언트**: `frontend/lib/api/` 전용 클라이언트 사용 (fetch 직접 사용 금지)
|
|
- **멀티테넌시**: 모든 쿼리에 company_code 필터링 필수
|