크라우니 ERP 통합 서버 — 10모듈 액션 라우팅 + PLM API + UX
개요
셀코어ERP.한선(27슬롯 공용 코어) 위에 이미 완성되어 있던 10개 ERP 모듈(FI/CO/MM/SD/PP/HR/QM/PM/PS/WM)을
하나의 HTTP 서버로 묶어 ASCII 별칭 경로로 라우팅하는 통합 서버를 작성했다. 순수 한선씨, 컴파일·기동·curl
실측까지 전부 완료.
무엇을 했는지
- 함정 발견 및 수정 — 10모듈을 한 서버에서
가져오기(텍스트 인라인 방식)로 합치면, MM/QM/PM 세
모듈이 동일 이름(
원장기록/
장부경로/
장부조회/
현황요약)을 정의하고 있어 마지막에 가져온 WM의
정의로 조용히 덮어써지는 버그가 있었다(경고만 뜨고 컴파일은 성공 — 미니 재현 테스트로 확인).
→
erp_MM.한선/
erp_QM.한선/
erp_PM.한선에서 해당 4개 심볼을 모듈 접두사(
MM원장기록,
장부경로MM,
MM장부조회,
MM현황요약 등)로 리네임(로직 100% 동일, 이름만 변경)해 충돌 제거.
기존 단독 테스트 파일(
_erp_*_테스트.한선)은 공개 API(
장부조회()/
현황요약())만 호출하므로 영향 없음.
- 가져오기 순서 함정 —
가져오기는 문자열 치환 전처리라, 각 erp_*.한선이 내부에서
가져오기 "셀코어ERP.한선"(맨 이름)을 쓰는데, 서버 파일의 cwd가
core/servers이면 그 맨 이름이
crownyc/libs/
CROWNY_STD/
cwd에서 찾아지지 않아 "파일 없음" 컴파일 에러가 난다. → 서버 파일 맨 위에
셀코어ERP.한선을 절대경로로 먼저 가져오면, 중복가져오기 방지 로직(파일명 basename 매칭)이 이후 각
모듈의 맨이름 가져오기를 정상 스킵함을 실험으로 확인 후 적용.
- 포트 충돌 — 지시된 포트 9970은
crowny-ports.sh check로 확인 결과 이미 idc.crowny.org
(crowny-idc, LaunchAgent 수퍼바이저 보유 서비스)가 점유 중이었다. 기존 서비스를 죽이지 않고
crowny-ports.sh set erp-unified 9981로 신규 포트 9981을 등록해 사용.
- 서버 구현:
/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줄)까지는 했으나, 실시간 갱신(폴링/웹소켓)은
없음(정적 새로고침 기반).