크라우니엔터프라이즈 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/employee | E001 홍길동 | {"status":"ok","data":{"사번":"E001","이름":"홍길동"}} |
| POST /api/scm/product | P001 상품A | {"status":"ok","data":{"코드":"P001","이름":"상품A"}} |
| POST /api/crm/customer | C001 ABC상사 | {"status":"ok","data":{"코드":"C001","이름":"ABC상사"}} |
| POST /api/finance/journal | 100000원 분개 | {"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 값 추출