82a253ec6a388bbde9f8be46666f565f145a2348
사용자 지적으로 재발견: 기존 PartFormDialog 는 임의로 "기본정보/크기·형상/분류·단위/Y-N
플래그" 섹션 분리 + 운영판에 없는 필드(두께/너비/높이/외경/내경/길이/수량/단위/후가공/
공급업체코드/제품OBJID) 추가 + Y/N 라디오로 작성되어 있었음. 운영판과 완전 다른 화면.
운영판 1:1 정정:
- 단일 4-col table 레이아웃 (라벨 / input / 라벨 / input)
- 필드 22개만 (운영판 그대로):
① 품번 | 품명
② 재료 | 열처리경도
③ 열처리방법 | 표면처리
④ 메이커 | 범주이름* (PART_TYPE, comm_code 0000062)
⑤ 규격 (colspan=3)
⑥ 계정구분*(comm_code 0900213) | 조달구분*(0=구매/1=생산/8=Phantom 하드)
⑦ 재고단위*(comm_code 0001399) | 관리단위*(동일)
⑧ 환산수량*(숫자) | LOT구분*(0=미사용/1=사용)
⑨ 사용여부*(0=미사용/1=사용) | 검사여부*(0=무검사/1=검사)
⑩ SET품여부*(0=부/1=여) | 의뢰여부*(0=부/1=여)
⑪ 개당길이 | 개당소요량
⑫ 비고 (colspan=3)
⑬ CAD Data : 3D / 2D(Drawing) / 2D(PDF) Drag&Drop placeholder
(실제 업로드 기능은 DEV-7 별 PR — UI 영역만 추가)
- LOT/USE_YN/QC_FG/SETITEM_FG/REQ_FG : Y/N 라디오 → 운영판 select 옵션 그대로 (4개씩 한글값)
- 필수 검증 11개 추가 (wace fn_save 1:1) : 범주이름·계정구분·조달구분·재고단위·관리단위·
환산수량·LOT구분·사용여부·검사여부·SET품여부·의뢰여부
- DialogTitle "품목 등록" / "품목 수정" (운영판 헤더 그대로) + 파란색 헤더 바
- 저장 / 닫기 버튼 중앙 배치 (운영판 plm_btn_wrap_center)
PartDetailDialog 도 동일하게 운영판 부적합 — 다음 단계에서 별도 재작성 예정.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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 필터링 필수
Description
Languages
TypeScript
98.2%
PLpgSQL
0.7%
JavaScript
0.5%
CSS
0.3%
HTML
0.2%
Other
0.1%