9531d20b58
Deploy momo-erp / deploy (push) Successful in 49s
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3.6 KiB
3.6 KiB
FITO — (주)피토 PLM (Next.js 풀스택)
아키텍처: 프론트엔드 = React (Next.js 15 App Router 기반), 백엔드 = Node.js (Next.js API Routes). 단일 Next.js 프로젝트 안에 React 프론트와 Node 백엔드가 함께 있는 풀스택 구조.
기존 Java/Spring MVC + JSP + MyBatis 기반 FITO 시스템을 Next.js 15 + Node.js로 1:1 컨버전한 제조/PLM 시스템.
프로젝트 히스토리:
woosung-nextjs에서 피벗. 이전 상태는 태그woosung-v1-snapshot에 보존. 우성 도메인 코드(api/, app/(main)/)는 점진적으로 FITO로 교체 중.
디렉토리별 CLAUDE.md
| 디렉토리 | 내용 |
|---|---|
| src/lib/ | 핵심 인프라: DB, 인증, 세션, 암호화, 상수 |
| src/store/ | Zustand 전역 상태 (auth, menu, theme) |
| src/types/ | TypeScript 중앙 타입 정의 |
| src/components/ | UI/레이아웃/그리드 공통 컴포넌트 |
| src/app/api/ | API 라우트 |
| src/app/(main)/ | 업무 페이지 (인증 필수) |
| src/app/(auth)/ | 로그인 페이지 |
| src/app/admin-panel/ | 관리자 패널 (팝업) |
기술 스택
- Frontend: Next.js 15 (App Router), React 19, TypeScript, Tailwind CSS
- Backend: Next.js API Routes (Node.js)
- Database: PostgreSQL (외부 공용 서버
211.115.91.141:11140/fito, raw SQL viapg) - 인증: JWT (jose) + Cookie 기반 세션
- 상태관리: Zustand
- UI: SweetAlert2, Lucide Icons, Custom DataGrid (TanStack React Table)
원본 프로젝트 매핑
원본 FITO 위치: /Users/jhj/FITO/ (Java 7 + Spring 3.2.4 + MyBatis 3.2.3 + JSP + Tomcat 7)
src/app/api/→ Java Controller (*.do엔드포인트,com.pms.controller.*)src/app/(main)/→ JSP 페이지 (/WebContent/WEB-INF/view/)src/lib/db.ts→ MyBatis SqlSession (queryRows = selectList, queryOne = selectOne)src/lib/auth.ts→ LoginServicesrc/lib/session.ts→ SessionManager + PersonBeansrc/lib/encrypt.ts→ EncryptUtil (AES)src/lib/constants.ts→ Constants.javasrc/lib/utils.ts→ CommonUtils.java
DB 쿼리 패턴
기존 MyBatis XML mapper의 SQL을 queryRows/queryOne/execute로 직접 실행.
파라미터는 $1, $2 형태의 PostgreSQL prepared statement 사용.
FITO mapper 위치: /Users/jhj/FITO/src/com/pms/mapper/ (77개 XML)
새 모듈 추가 시
src/app/api/[module]/route.ts— API 라우트 (기존 Controller 대응)src/app/(main)/[module]/page.tsx— 페이지 (기존 JSP 대응)- FITO MyBatis XML에서 SQL 복사하여 raw query로 변환
SearchForm+DataGrid컴포넌트 조합으로 목록 페이지 구성
미들웨어 (인증)
src/middleware.ts가 모든 요청을 가로채서 plm-session 쿠키 존재 여부 확인.
- 공개 경로:
/login,/api/auth/login,/_next,/favicon.ico - 세션 없는 일반 요청 →
/login으로 리다이렉트 - 세션 없는 API 요청 → 401 JSON 응답
실행
npm run dev # 개발 서버 (localhost:3000)
환경변수
.env.development— 로컬 개발용 (외부 FITO DB 접속).env.development.example— 팀 공유 템플릿 (비밀번호 마스킹).env— Prisma CLI용 기본값
배포 표준 (예정)
- Docker Compose dev/prod 분리
- Traefik 리버스 프록시 +
fito.wace.me서브도메인 - DB는 외부
211.115.91.141:11140/fito공유 (컨테이너 내부 DB 없음)