← 목록
엔터프라이즈 2026-04-15 4KB 읽기 4분

크라우니엔터프라이즈 POST API 복구

개요

크라우니엔터프라이즈 ERP(포트 9700/9701)의 POST/PUT/DELETE API가 전혀 작동하지 않던 문제를 해결. 4개 핵심 POST 엔드포인트(/api/hrm/employee, /api/scm/product, /api/crm/customer, /api/finance/journal) 모두 정상 응답 확인.

무엇을 했는지

근본원인 6개를 차례로 수정:

1. proxy.js — POST body 미전달

  • 헤더만 엔진에 sock.write(), body는 버림
  • 수정: Buffer.concat([headers, body])로 단일 write
  • 이유: 한선씨 엔진이 TCP읽기(8191) 단일 호출로 전체 요청을 읽기 때문에 분할 write 시 body 소실

2. proxy.js — 로그인 가로채기 제거

  • /api/auth/login을 프록시가 자체 해시로 토큰 발급
  • 엔진 토큰검증이 해당 토큰을 모르므로 이후 POST 전부 401
  • 수정: 가로채기 블록 삭제, 엔진이 처리

3. 서버.한선:JSON값추출 — 루프 재작성

  • 원본이 문자 단위 비교 + 그리고 단락평가 의존 로직으로 키를 못 찾음
  • 수정: 부분() 문자열 비교 + flag 변수로 안전 break
  • 예약어 계속진행 치환

4. 서버.한선:헤더값추출 — EOF까지 읽는 버그

  • \r\n 못 찾으면 끝 = 요청길+1부분(시작, 끝-1) → 요청 끝까지 반환
  • Authorization 값이 143자(실제 71자)로 반환되어 토큰 매칭 실패
  • 수정: flag 변수로 안전 탈출, break 시점의 실제 보존

5. modules/보안.한선:역할부여/권한설정/역할등록 — 맵 vs flat array

  • 맵생성() + 맵넣어(key, val)로 만든 해시맵을 삽입()에 전달
  • 그러나 삽입은 flat array ["키",값,"키",값] 포맷 기대 (내부 _맵에서꺼내가 그걸 가정)
  • 수정: 세 함수 모두 flat array로 전환

6. modules/보안.한선:보안초기화 — 기본 사용자 미등록

  • _사용자역할DB에 admin/ceo/cfo/… 등록이 없어서 로그인 시 전부 "뷰어" 반환
  • 수정: 역할부여("admin","최고관리자") 등 7개 기본 사용자 추가

관련 파일

  • /Users/ef/crowny-enterprise/proxy.js (L143-167, L300-335 제거)
  • /Users/ef/crowny-enterprise/서버.한선 (L201-237 헤더값추출, L240-294 JSON값추출)
  • /Users/ef/crowny-enterprise/modules/보안.한선 (L32-38, L49-60, L86-91, L171-210)

검증 결과 (admin 토큰으로 POST)

엔드포인트입력결과
POST /api/hrm/employeeE001 홍길동{"status":"ok","data":{"사번":"E001","이름":"홍길동"}}
POST /api/scm/productP001 상품A{"status":"ok","data":{"코드":"P001","이름":"상품A"}}
POST /api/crm/customerC001 ABC상사{"status":"ok","data":{"코드":"C001","이름":"ABC상사"}}
POST /api/finance/journal100000원 분개{"status":"ok","data":{"적요":"테스트","금액":100000}}

잔여 이슈

  • 요약 API 집계: /api/hrm, /api/scm, /api/finance 등이 POST 후에도 총직원수=0 등으로 표시. 별개 버그 — 요약 함수가 _직원DB 등의 행수/필드를 잘못 읽는 듯. (crm 파이프총액=1은 뜸 → 일부만 정상)
  • 다른 모듈에도 동일 패턴 존재 가능성: 아직 확인 안 한 삽입(_테이블, 맵생성()으로만든맵) 호출이 다른 모듈에도 있을 수 있음. grep 필요.

학습된 크라우니코드 패턴 (3종)

  • 삽입_flat_array — 셀DB에 행 삽입 시 올바른 포맷
  • http_header_extract_safe — \r\n 안전 break 헤더 파서
  • json_key_extract_safe — 단일 키 JSON 값 추출
다음 세션에서 자동 재사용 가능.