re# PLM System Backend - Node.js + TypeScript

Java Spring Boot에서 Node.js + TypeScript로 리팩토링된 PLM 시스템 백엔드입니다.

## 🚀 기술 스택

- **Runtime**: Node.js ^20.10.0
- **Framework**: Express ^4.18.2
- **Language**: TypeScript ^5.3.3
- **Database**: PostgreSQL ^8.11.3 (Raw Query with `pg`)
- **Authentication**: JWT + Passport
- **Testing**: Jest + Supertest

## 📋 프로젝트 구조

```
backend-node/
├── src/
│   ├── database/        # 데이터베이스 유틸리티
│   │   ├── db.ts        # PostgreSQL Raw Query 헬퍼
│   │   └── ...
│   ├── controllers/     # HTTP 요청 처리
│   ├── services/        # 비즈니스 로직
│   ├── middleware/      # Express 미들웨어
│   │   └── errorHandler.ts
│   ├── utils/           # 유틸리티 함수
│   │   └── logger.ts
│   ├── types/           # TypeScript 타입 정의
│   │   └── common.ts
│   ├── validators/      # 입력 검증 스키마
│   └── app.ts          # 애플리케이션 진입점
├── logs/               # 로그 파일
├── package.json
├── tsconfig.json
└── README.md
```

## 🛠️ 설치 및 실행

### 1. 의존성 설치

```bash
npm install
```

### 2. 환경 변수 설정

`.env` 파일을 생성하고 다음 내용을 추가하세요:

```env
DATABASE_URL="postgresql://postgres:ph0909!!@39.117.244.52:11132/plm"
JWT_SECRET="your-super-secret-jwt-key-change-in-production"
JWT_EXPIRES_IN="24h"
PORT=8080
NODE_ENV=development
```

### 3. 개발 서버 실행

```bash
npm run dev
```

### 5. 프로덕션 빌드

```bash
npm run build
npm start
```

## 📊 데이터베이스 스키마

PostgreSQL 데이터베이스를 직접 Raw Query로 사용합니다.

### 핵심 테이블

- `user_info` - 사용자 정보
- `dept_info` - 부서 정보
- `menu_info` - 메뉴 정보
- `comm_code` - 공통 코드
- `multi_lang_key_master` - 다국어 키 마스터
- `multi_lang_text` - 다국어 텍스트

자세한 스키마 정보는 `docs/Database_Schema_Collection.md`를 참조하세요.

## 🔐 인증 시스템

JWT 기반 인증 시스템을 구현했습니다:

- Access Token (24시간)
- Refresh Token (7일)
- 토큰 자동 갱신

## 📝 API 문서

### 헬스 체크

```
GET http://localhost:8080/health
```

### 사용자 관리 (예정)

```
GET    http://localhost:8080/api/users              # 사용자 목록 조회
GET    http://localhost:8080/api/users/:id          # 특정 사용자 조회
POST   http://localhost:8080/api/users              # 사용자 생성
PUT    http://localhost:8080/api/users/:id          # 사용자 수정
DELETE http://localhost:8080/api/users/:id          # 사용자 삭제
```

### 메뉴 관리 (예정)

```
GET    http://localhost:8080/api/menus              # 메뉴 목록 조회
POST   http://localhost:8080/api/menus              # 메뉴 생성
PUT    http://localhost:8080/api/menus/:id          # 메뉴 수정
DELETE http://localhost:8080/api/menus/:id          # 메뉴 삭제
```

## 🧪 테스트

```bash
# 전체 테스트 실행
npm test

# 테스트 감시 모드
npm run test:watch
```

## 📦 스크립트

- `npm run dev` - 개발 서버 실행 (nodemon)
- `npm run build` - TypeScript 컴파일
- `npm start` - 프로덕션 서버 실행
- `npm test` - 테스트 실행
- `npm run lint` - ESLint 검사
- `npm run format` - Prettier 포맷팅

## 🔧 개발 가이드

### 새로운 API 추가

1. `src/controllers/`에 컨트롤러 생성
2. `src/services/`에 서비스 로직 생성
3. `src/types/`에 타입 정의 추가
4. `src/validators/`에 검증 스키마 추가
5. `src/app.ts`에 라우터 등록

### 데이터베이스 스키마 변경

1. SQL 마이그레이션 파일 작성 (`db/` 디렉토리)
2. PostgreSQL에서 직접 실행
3. 필요 시 TypeScript 타입 정의 업데이트 (`src/types/`)

## 📋 마이그레이션 체크리스트

### ✅ Phase 1: 기반 구축 (완료)

- [x] Node.js + TypeScript 프로젝트 설정
- [x] 기존 데이터베이스 스키마 분석
- [x] PostgreSQL Raw Query 시스템 구축
- [x] 기본 인증 시스템 구현
- [x] 에러 처리 및 로깅 설정

### 🔄 Phase 2: 핵심 API 개발 (진행 중)

- [ ] 사용자 관리 API (`user_info` 테이블 기반)
- [ ] 부서 관리 API (`dept_info` 테이블 기반)
- [ ] 메뉴 관리 API (`menu_info` 테이블 기반)
- [ ] 권한 관리 API (`authority_master`, `rel_menu_auth` 테이블 기반)
- [ ] 다국어 관리 API (`multi_lang_key_master`, `multi_lang_text` 테이블 기반)
- [ ] 공통 코드 관리 API (`comm_code` 테이블 기반)

### ⏳ Phase 3: 비즈니스 로직 API (예정)

- [ ] 회사 관리 API (`company_mng` 테이블 기반)
- [ ] 계약 관리 API (`contract_mgmt` 테이블 기반)
- [ ] 주문 관리 API (`order_mgmt` 테이블 기반)
- [ ] 재고 관리 API (`inventory_mgmt` 테이블 기반)
- [ ] 부품 관리 API (`part_mgmt` 테이블 기반)

## 🚀 배포

### Docker 배포

```bash
# Docker 이미지 빌드
docker build -t pms-backend-node .

# 컨테이너 실행
docker run -p 8080:8080 pms-backend-node
```

### 환경별 설정

- **Development**: `NODE_ENV=development`
- **Production**: `NODE_ENV=production`
- **Test**: `NODE_ENV=test`

## 📞 지원

프로젝트 관련 문의사항이 있으시면 개발팀에 연락해주세요.

---

**버전**: 1.0.0  
**마지막 업데이트**: 2024년 12월
