← 목록
기타 2026-07-21 6KB 읽기 6분

크라우니 ERP 통합 서버 — 10모듈 액션 라우팅 + PLM API + UX

개요

셀코어ERP.한선(27슬롯 공용 코어) 위에 이미 완성되어 있던 10개 ERP 모듈(FI/CO/MM/SD/PP/HR/QM/PM/PS/WM)을 하나의 HTTP 서버로 묶어 ASCII 별칭 경로로 라우팅하는 통합 서버를 작성했다. 순수 한선씨, 컴파일·기동·curl 실측까지 전부 완료.

무엇을 했는지

  1. 함정 발견 및 수정 — 10모듈을 한 서버에서 가져오기(텍스트 인라인 방식)로 합치면, MM/QM/PM 세
모듈이 동일 이름(원장기록/장부경로/장부조회/현황요약)을 정의하고 있어 마지막에 가져온 WM의 정의로 조용히 덮어써지는 버그가 있었다(경고만 뜨고 컴파일은 성공 — 미니 재현 테스트로 확인). → erp_MM.한선/erp_QM.한선/erp_PM.한선에서 해당 4개 심볼을 모듈 접두사(MM원장기록, 장부경로MM, MM장부조회, MM현황요약 등)로 리네임(로직 100% 동일, 이름만 변경)해 충돌 제거. 기존 단독 테스트 파일(_erp_*_테스트.한선)은 공개 API(장부조회()/현황요약())만 호출하므로 영향 없음.
  1. 가져오기 순서 함정가져오기는 문자열 치환 전처리라, 각 erp_*.한선이 내부에서
가져오기 "셀코어ERP.한선"(맨 이름)을 쓰는데, 서버 파일의 cwd가 core/servers이면 그 맨 이름이 crownyc/libs/CROWNY_STD/cwd에서 찾아지지 않아 "파일 없음" 컴파일 에러가 난다. → 서버 파일 맨 위에 셀코어ERP.한선을 절대경로로 먼저 가져오면, 중복가져오기 방지 로직(파일명 basename 매칭)이 이후 각 모듈의 맨이름 가져오기를 정상 스킵함을 실험으로 확인 후 적용.
  1. 포트 충돌 — 지시된 포트 9970은 crowny-ports.sh check로 확인 결과 이미 idc.crowny.org
(crowny-idc, LaunchAgent 수퍼바이저 보유 서비스)가 점유 중이었다. 기존 서비스를 죽이지 않고 crowny-ports.sh set erp-unified 9981로 신규 포트 9981을 등록해 사용.
  1. 서버 구현: /Users/ef/crowny-erp/core/servers/ERP통합서버.한선
- GET /api/health — 서비스 상태 + 10모듈 목록 + 총 셀수 - POST /api/action/{MODULE}/{DOCTYPE} — PSV 본문 → 트랜잭션 함수 호출 → {ok,module,doctype,사상,cell,message} (36개 트랜잭션 함수 전체를 ASCII 별칭으로 라우팅: 예 MM/purchase-req, FI/journal, PM/equipment 등) - GET /api/plm/trace/{셀id} — PLM추적() 생애주기 체인(멀티홉 검증: 155→156→157) - GET /api/ledger/{MODULE} — 모듈별 장부 JSON 배열 - GET / — 대시보드 HTML(크라우니 UX 통일 토큰 그대로, 10모듈 카드 + 모듈별 최근 장부 4줄 서버사이드 렌더)

검증 결과(실측)

  • 컴파일: hanseonc_high 에러 0, 경고 0(콤파일 초기엔 이름충돌 경고 4건 → 리네임 후 완전 제거)
  • 기동: crownyc run:9981 바인드 성공
  • GET /api/health{"status":"ok","service":"erp-unified","port":9981,...,"cells":144}
  • 4상(티/옴/타/음) 전부 실측 확인:
  • 티: MM/purchase-req 정상 접수, FI/journal 전표 확정 등
  • 옴: FI/ar 만기일 미정(보류)
  • 타: MM/purchase-req 자재코드 없음, PS/project 코드 중복
  • 음: MM/purchase-req 수량 30×단가45만=1350만 → 한도초과 상신필요
  • 멀티홉 PLM: MM 구매요청→구매오더→입고 3단 체인 생성 후 GET /api/plm/trace/157"155→156→157" 확인
  • GET /api/ledger/MM, /FI → 각 모듈 고유 파일에 정상 append 확인(리네임 수정 전이었다면 MM 항목이
  • WM.psv로 잘못 append됐을 것 — 리네임 후 재검증으로 MM.psv/FI.psv/PM.psv에 정확히 분리 기록됨을 확인)
    • GET / → 200, <title>크라우니 ERP — 통합 운영</title>, 카드 10개(class="card" 10회), 장부줄
    40개(class="lg" 40회, 모듈당 4줄), 크라우니디자인.css 링크 포함
    • 검증 후 서버 kill, 포트 반환 확인(9981 lsof 비어있음)

    관련 파일

    • /Users/ef/crowny-erp/core/servers/ERP통합서버.한선 (신규, 서버 본체)
    • /Users/ef/crowny-erp/core/servers/ERP통합서버.toau (빌드 완료)
    • /Users/ef/crowny-erp/core/libs/erp_MM.한선 (원장기록/장부경로/장부조회/현황요약 → MM 접두 리네임)
    • /Users/ef/crowny-erp/core/libs/erp_QM.한선 (동일 리네임, QM 접두)
    • /Users/ef/crowny-erp/core/libs/erp_PM.한선 (동일 리네임, PM 접두)
    • /Users/ef/crowny-erp/core/libs/erp_WM.한선 (변경 없음 — 원래 이름 유지, 충돌 해소의 "생존자")
    • /Users/ef/crowny-erp/core/libs/셀코어ERP.한선, erp_FI/CO/SD/PP/HR/QM/PM/PS.한선 (읽기만, 변경 없음)
    • 포트 레지스트리: ~/.claude/knowledge/PORTS.md(erp-unified→9981 반영됨), gateway.yaml

    잔여 이슈

    • 9970 포트는 원 지시였으나 기존 idc.crowny.org와 충돌 — 게이트웨이에 erp-unified 도메인을 실제로
    붙이려면(예: erp-unified.crowny.org) 사장님 확인 후 gw add 필요(현재는 포트 등록만 완료, 게이트웨이 라우팅 미배선).
    • /api/plm/flow/{module} (모듈 전체 흐름 그래프)는 아키텍처 문서 API 규약에 있으나 이번 스코프(요청
    범위: health/action/plm-trace/ledger/HTML)에는 없어 미구현.
    • HTML 대시보드는 요청 사양대로 서버사이드 렌더(장부 최근 4줄)까지는 했으나, 실시간 갱신(폴링/웹소켓)은
    없음(정적 새로고침 기반).