Files
wace_rps/backend-node
hjjeong 68d2dcb32e 개발관리>E-BOM 조회 — 운영판 1:1 그리드 + 토글 + 품번 상세 + 검색 anchor 정정
(1) 정전개 트리 화면 운영판 wace structureAscendingList.jsp 1:1 정정:
   - L1..LMaxLevel 컬럼 — row.lev 와 일치하는 컬럼에만 "*" 표시 (이전엔 품번 표시)
   - 별도 품번 컬럼 1개 (모든 행 part_no)
   - 3D/2D/PDF — renderType: "folder" (wace fnc_getFolderIcon 1:1)
   - 컬럼 운영판 1:1 : 품번/품명/수량/항목수량/3D/2D/PDF/재료/열처리경도/열처리방법/표면처리/메이커/범주이름/비고
   - 제거 : 변경일/REV/규격/중량 (운영판 미사용)

(2) 토글 -/+ 버튼 추가 (wace 트리 1:1):
   - 첫 컬럼 __toggle — 자식 있는 행만 − / + 표시, 클릭 시 자식 숨김/표시
   - collapsedChildIds Set<string> 상태로 접힘 관리
   - ancestor 체인: parent_objid → 부모 행 child_objid 추적 (cycle guard)
   - 가시 행 필터: ancestor 중 하나라도 collapsed Set 에 있으면 hide → 자손 전체 숨김
   - 새 조회 시 collapsed Set 초기화 (모두 펼침)

(3) 품번 셀 클릭 → PartDetailDialog (wace partMngDetailPopUp 1:1):
   - row.part_no = part_mng.objid::varchar 이므로 그대로 detail dialog 의 objid 로 전달
   - ebom-search 페이지에 PartDetailDialog 임포트 + state

(4) 검색 필터 anchor 정정 (사용자 검증: 1행만 나오고 자식 안 풀림):
   - 이전: search_part_no/search_part_name 을 결과 단계 WHERE PM.part_no LIKE ... 로 적용
            → 매칭 행 1개만 살아남고 자식 잘림
   - 정정: anchor 단계에서 매칭된 PART 가 들어있는 bom_report_objid 전체를 startWhere 로
            → 재귀 CTE 가 자식 모두 풀어냄 (운영판 1:1)
   - search_level (1~5) 은 결과 단계 유지 (트리 깊이 제한)
   - ascending / ascendingForExcel 양쪽 동일 패턴

(5) ascending SELECT 풀 컬럼 보강:
   - 추가 : item_qty(p_qty), heat_treatment_hardness/method, surface_treatment,
            maker, part_type, part_type_title (comm_code.code_name)
   - TREE CTE 컬럼에 item_qty 추가
   - BomTreeRow 타입 동기 (lib/api/devBom.ts)

(6) 상태변경 시 확정일(DEPLOY_DATE) 처리 — 사용자 요청:
   - status = 'Y' 변경 시 DEPLOY_DATE = TO_CHAR(NOW(), 'YYYY-MM-DD') 채움 (varchar)
   - 'N' 변경 시 기존 DEPLOY_DATE 보존
   - $5 prepared statement 타입 추론 충돌 (varchar vs unknown) → $5::varchar 명시 캐스팅
   - STATUS_TITLE 매핑은 운영판 1:1 — CREATE/CHANGEDESIGN/DEPLOY 만 라벨, Y/N 등은 raw 표시

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 12:11:08 +09:00
..
2025-11-28 11:34:48 +09:00
2025-09-15 11:43:59 +09:00
2025-09-05 21:52:19 +09:00
2025-10-27 16:40:59 +09:00
2025-09-08 14:20:01 +09:00
2025-10-27 16:40:59 +09:00

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. 의존성 설치

npm install

2. 환경 변수 설정

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

DATABASE_URL="postgresql://postgres:YOUR_PASSWORD@YOUR_HOST:YOUR_PORT/YOUR_DB"
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 추가

  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: 기반 구축 (완료)

  • 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월