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-12-28 18:24:50 +09:00
2026-03-12 18:47:42 +09:00
2025-12-29 12:30:46 +09:00
2025-12-28 18:19:08 +09:00
2026-04-09 12:35:34 +09:00

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. 개발 환경 실행

# 백엔드 (nodemon으로 자동 재시작)
cd backend-node && npm install && npm run dev

# 프론트엔드 (Turbopack)
cd frontend && npm install && npm run dev

3. Docker 환경 실행

# 백엔드 + 프론트엔드 (개발)
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 연결
  • 번호 채번 규칙

환경 변수

# 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

배포

프로덕션 빌드

# 멀티스테이지 Docker 빌드 (백엔드 + 프론트엔드)
docker build -t wace-solution .

CI/CD

Jenkins 파이프라인 (Jenkinsfile)으로 자동 빌드 및 배포가 설정되어 있습니다.

코드 컨벤션

  • TypeScript: 엄격한 타입 정의 사용
  • ESLint + Prettier: 일관된 코드 스타일
  • shadcn/ui: UI 컴포넌트 표준
  • API 클라이언트: frontend/lib/api/ 전용 클라이언트 사용 (fetch 직접 사용 금지)
  • 멀티테넌시: 모든 쿼리에 company_code 필터링 필수
S
Description
No description provided
Readme 172 MiB
Languages
TypeScript 98.2%
PLpgSQL 0.7%
JavaScript 0.5%
CSS 0.3%
HTML 0.2%
Other 0.1%