Files
distribution_erp/src/lib/CLAUDE.md
T
chpark 6af863199f feat: 모모유통 유통관리 ERP (Next.js 16) — MOMO 브랜딩 + distribution DB + momo.junggomoa.com
- fito-nextjs 기반으로 재구성
- 로그인: MOMO 로고 + 모모유통 + 유통관리 ERP, 하단에 본사/지사 주소 표시
- 사이드바 상단: MOMO 아이콘 + 모모유통 + 유통관리 ERP
- 파비콘: /src/app/icon.svg (MOMO 그린 배지)
- layout.tsx title: 모모유통 | 유통관리 ERP
- DB: 183.99.177.40:5432/distribution (fito 스키마 import 완료)
- Traefik: Host(momo.junggomoa.com), 컨테이너 momo-erp
2026-04-25 02:44:40 +09:00

3.3 KiB

역할

시스템 전체의 핵심 인프라 계층. DB 접근, 인증, 세션, 암호화, 상수, 유틸리티를 제공한다. 기존 Java 기반 PMS 시스템의 공통 모듈을 Node.js로 포팅한 것으로, 모든 API 라우트와 페이지에서 의존한다.

주요 파일

  • db.ts — PostgreSQL 연결 풀(pg Pool). queryRows, queryOne, execute 3가지 헬퍼 제공. 모든 DB 접근의 단일 진입점.
  • auth.ts — 자격 증명 검증(verifyCredentials). USER_INFO + AUTHORITY_MASTER 조인 후 User 객체 생성. 로그인 이력 기록.
  • session.ts — JWT 기반 세션(jose). createSession(쿠키 설정, 24시간), getSession(검증), destroySession(삭제).
  • encrypt.ts — AES-128-ECB 암호화/복호화. 사용자 비밀번호 검증에 사용.
  • constants.ts — 전역 상수: 마스터 비밀번호, AES 키, 페이징, 파일 문서 타입, 공통코드 ID, 메뉴 아이콘 매핑.
  • utils.ts — 범용 헬퍼: checkNull, isEmpty, setPagingInfo, numberWithCommas, createObjectId, getDate 등.
  • menu-url-map.ts.do URL → Next.js 라우트 변환 매핑 테이블.

연결 고리

  • auth.ts → db.ts: verifyCredentials에서 queryOne 호출. DB 스키마 변경 시 SQL 동시 수정 필수.
  • auth.ts → encrypt.ts: 사용자 입력 비밀번호를 AES 암호화 후 DB 값과 비교.
  • auth.ts → constants.ts: MASTER_PWD, SUPER_ADMIN 상수 참조.
  • encrypt.ts → constants.ts: AES_KEY 의존. 키 변경 시 기존 데이터 복호화 불가.
  • middleware.ts ↔ session.ts: 세션 쿠키명 plm-session이 middleware.ts에 하드코딩. session.ts의 SESSION_COOKIE 값과 반드시 일치해야 함.

단일 진입점

  • 모든 DB 쿼리 → db.ts의 queryRows/queryOne/execute
  • 사용자 인증 → auth.ts의 verifyCredentials
  • 세션 생성/조회/삭제 → session.ts의 createSession/getSession/destroySession
  • AES 암호화 → encrypt.ts의 encrypt/decrypt

등록 절차

  • 새 공통코드 추가 → constants.ts의 CODE_IDS에 항목 추가
  • 새 파일 문서 타입 추가 → constants.ts의 FILE_DOC_TYPES에 등록
  • 메뉴 URL 매핑 추가 → menu-url-map.ts의 URL_MAP에 키-값 쌍 추가

절대 금지

  • AES_KEY 변경 금지 — 기존 암호화된 비밀번호 데이터 모두 복호화 불가능
  • SESSION_COOKIE 이름 단독 변경 금지 — middleware.ts의 하드코딩 값과 불일치 발생. 둘 다 동시에 변경 필수
  • SUPER_ADMIN 값 변경 금지"plm_admin" 사용자만 관리자로 인식
  • checkNull의 문자열 "null"/"undefined" 처리 제거 금지 — 기존 Java 시스템과의 호환성 필수

숨겨진 스펙

  • AES_KEY = "ILJIAESSECRETKEY" (16자) — 기존 Java EncryptUtil과 동일 키
  • MASTER_PWD = "qlalfqjsgh11" — 이 값으로 로그인 시 DB 비밀번호 검증 스킵
  • SESSION_COOKIE = "plm-session" — middleware.ts에도 하드코딩
  • NEXTAUTH_SECRET 미설정 시 기본값 "fito-plm-default-secret" 사용
  • 세션 유효기간 86400초(24시간)
  • User.isAdmin 판정: userId.toLowerCase() === SUPER_ADMIN
  • SQL alias 주의: 따옴표 없는 alias → PostgreSQL이 소문자로 반환. 대문자 유지하려면 AS "SABUN" 형태 필수

@MISTAKES.md