- 수정 버튼 클릭 시 groupByColumns 기준으로 모든 관련 레코드 조회 - search 대신 dataFilter(equals) 사용하여 정확 매칭 조회 - deduplication 명시적 비활성화로 모든 레코드 반환 - supplier_mng, customer_mng 등 회사별 데이터 테이블 DB 조인 강제 (캐시 미사용) - entityJoinController에 deduplication 파라미터 처리 추가 - ScreenModal에서 배열 형태 editData 처리 지원
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. 의존성 설치
npm install
2. 환경 변수 설정
.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. 개발 서버 실행
npm run dev
5. 프로덕션 빌드
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 # 메뉴 삭제
🧪 테스트
# 전체 테스트 실행
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 추가
src/controllers/에 컨트롤러 생성src/services/에 서비스 로직 생성src/types/에 타입 정의 추가src/validators/에 검증 스키마 추가src/app.ts에 라우터 등록
데이터베이스 스키마 변경
- SQL 마이그레이션 파일 작성 (
db/디렉토리) - PostgreSQL에서 직접 실행
- 필요 시 TypeScript 타입 정의 업데이트 (
src/types/)
📋 마이그레이션 체크리스트
✅ Phase 1: 기반 구축 (완료)
- Node.js + TypeScript 프로젝트 설정
- 기존 데이터베이스 스키마 분석
- PostgreSQL Raw Query 시스템 구축
- 기본 인증 시스템 구현
- 에러 처리 및 로깅 설정
🔄 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 배포
# 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월