외부 호출 설정 관리 서비스의 모든 Prisma 호출을 Raw Query로 전환: ## 전환 완료 (8개 Prisma 호출) 1. **getConfigs()** - 목록 조회 - prisma.findMany → query<ExternalCallConfig>() - 동적 WHERE 조건 (5개 필터) - ILIKE 검색 (config_name, description) 2. **getConfigById()** - 단건 조회 - prisma.findUnique → queryOne<ExternalCallConfig>() 3-4. **createConfig()** - 생성 - 중복 검사: prisma.findFirst → queryOne() - 생성: prisma.create → queryOne() with INSERT RETURNING - JSON 필드 처리: config_data 5-6. **updateConfig()** - 수정 - 중복 검사: prisma.findFirst → queryOne() with id != $4 - 수정: prisma.update → queryOne() with 동적 UPDATE - 9개 필드에 대한 조건부 SET 절 생성 7. **deleteConfig()** - 논리 삭제 - prisma.update → query() with is_active = 'N' 8. **getExternalCallConfigsForButtonControl()** - 버튼 제어용 - prisma.findMany with select → query() with SELECT ## 기술적 개선사항 - **동적 WHERE 조건**: 5개 필터 조건 조합 및 파라미터 인덱싱 - **동적 UPDATE 쿼리**: 변경된 필드만 포함하는 SET 절 생성 - **JSON 필드**: config_data를 JSON.stringify()로 처리 - **ILIKE 검색**: 대소문자 구분 없는 검색 구현 - **중복 검사**: id 제외 조건으로 자신 제외 로직 유지 ## 코드 정리 - prisma import 완전 제거 - query, queryOne 함수 사용 - 컴파일 및 린터 오류 없음 문서: PHASE3.12_EXTERNAL_CALL_CONFIG_SERVICE_MIGRATION.md 진행률: Phase 3 136/162 (84.0%)
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
- ORM: Prisma ^5.7.1
- Database: PostgreSQL ^8.11.3
- Authentication: JWT + Passport
- Testing: Jest + Supertest
📋 프로젝트 구조
backend-node/
├── src/
│ ├── config/ # 설정 파일
│ │ ├── environment.ts
│ │ └── database.ts
│ ├── controllers/ # HTTP 요청 처리
│ ├── services/ # 비즈니스 로직
│ ├── middleware/ # Express 미들웨어
│ │ └── errorHandler.ts
│ ├── utils/ # 유틸리티 함수
│ │ └── logger.ts
│ ├── types/ # TypeScript 타입 정의
│ │ └── common.ts
│ ├── validators/ # 입력 검증 스키마
│ └── app.ts # 애플리케이션 진입점
├── prisma/
│ └── schema.prisma # 데이터베이스 스키마
├── tests/ # 테스트 파일
├── 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. Prisma 클라이언트 생성
npx prisma generate
4. 개발 서버 실행
npm run dev
5. 프로덕션 빌드
npm run build
npm start
📊 데이터베이스 스키마
기존 PostgreSQL 데이터베이스 스키마를 참고하여 Prisma 스키마를 설계했습니다.
핵심 테이블
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 포맷팅npx prisma studio- Prisma Studio 실행
🔧 개발 가이드
새로운 API 추가
src/controllers/에 컨트롤러 생성src/services/에 서비스 로직 생성src/types/에 타입 정의 추가src/validators/에 검증 스키마 추가src/app.ts에 라우터 등록
데이터베이스 스키마 변경
prisma/schema.prisma수정npx prisma generate실행npx prisma migrate dev실행
📋 마이그레이션 체크리스트
✅ Phase 1: 기반 구축 (완료)
- Node.js + TypeScript 프로젝트 설정
- 기존 데이터베이스 스키마 분석
- Prisma 스키마 설계 및 마이그레이션
- 기본 인증 시스템 구현
- 에러 처리 및 로깅 설정
🔄 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월