Files
distribution_erp/CLAUDE.md
T
chpark 9531d20b58
Deploy momo-erp / deploy (push) Successful in 49s
docs(claude): 프론트=React / 백엔드=Node.js 아키텍처 명시
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 00:15:56 +09:00

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 via pg)
  • 인증: 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 → LoginService
  • src/lib/session.ts → SessionManager + PersonBean
  • src/lib/encrypt.ts → EncryptUtil (AES)
  • src/lib/constants.ts → Constants.java
  • src/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)

새 모듈 추가 시

  1. src/app/api/[module]/route.ts — API 라우트 (기존 Controller 대응)
  2. src/app/(main)/[module]/page.tsx — 페이지 (기존 JSP 대응)
  3. FITO MyBatis XML에서 SQL 복사하여 raw query로 변환
  4. 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 없음)