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

ERP FI(재무회계) 갭 7종 구현 — FI-G1~G7

개요

크라우니 ERP 통합서버(A서버, :9981, erp_FI.한선)에 재무회계 모듈 갭 7종(FI-G1~G7)을 한선씨로 구현하고 라이브 배포·검증했다. 셀코어ERP 27슬롯 셀 위에서 4상균형3진(티/옴/타/음) 판정을 전부 발현하도록 설계, 기존 함수는 무수정(파일 끝에 추가만).

구현 내용

  • FI-G1 자동지급실행 지급실행(기준일, 한도금액, 조직) doctype=payment-run. 미지급(문서유형3) 승인건 스캔 → 합계≤한도=티(지급확정+셀 슬롯10을 7로 마킹, 재실행 시 중복지급 방지)·0건=옴·초과=음·한도값 오류=타.
  • FI-G2 독촉관리 독촉실행(기준일, 조직) doctype=dunning. 미수(AR) 승인건 스캔, 셀 슬롯13에 회차 누적 → 1차/2차/최종 산출. 대상있음=티·0건=옴·조직오류=타·최종독촉 3건 이상=음.
  • FI-G3 외화평가 환율등록(통화, 환율) doctype=fx-rate + 외화평가(통화, 금액, 조직) doctype=fx-reval. 신규 마스터 data/마스터_환율.psv(통화코드|환율|등록일). 환율≤0=타·급변(±20%초과)=음·미등록통화=옴·정상=티. 통화는 문자열("USD"/"KRW"/"EUR") 입력 → 내부 코드(1/2/3) 변환.
  • FI-G4 부가세집계 부가세집계(년, 월, 조직) doctype=vat-report. AR/AP 합계 기반 매출세액/매입세액/납부세액 산출. 기간오류=타·0건=옴·환급(납부세액<0)=음·정상=티.
  • FI-G5 재무제표 재무제표산출(년, 월, 조직) doctype=fin-statement. BS(자산=문서유형4, 부채=문서유형3)·PL(수익=문서유형2, 비용=문서유형1) 집계. 기간오류=타·데이터없음=옴·자본잠식(자산-부채<0)=음·정상=티.
  • FI-G6 기간마감통제 기간마감설정(년, 월, 조직) doctype=period-lock. 신규 마스터 data/마스터_기간마감.psv(년|월|조직|상태). 기간오류/이미마감=타·미래월=옴·정상=티. 헬퍼 기간마감확인(년,월,조직) 별도 제공(기존 전표기입() 등은 무수정, 게이트 연동은 호출측 책임으로 남김).
  • FI-G7 어음수표 어음등록(구분, 거래처, 금액, 만기일, 조직) doctype=bill-note. 금액오류/만기경과=타·고액(≥5000만)=음·거래처미등록=옴·정상=티.

성능 수정 (중요)

초기 구현은 모듈셀들(FI모듈)(id 목록, O(n) 전체스캔) + 후보마다 셀슬롯()(각 호출이 다시 O(n) 파일 재스캔) 패턴을 4개 함수(G1,G2,G4,G5)에 사용 — O(n²). 셀넷.psv가 라이브 다세션 환경에서 500+ 건으로 자라면서 502(Bad Gateway)/타임아웃 발생을 실측 확인. FI_모듈셀전체() 헬퍼(버퍼파일읽기 1회 + 라인 파싱, 셀코어ERP.한선의 모듈셀들()/셀읽기()와 동일 검증된 패턴)로 O(n) 단일패스로 리팩터링 → 응답시간 15초+(타임아웃) → 0.35초로 개선.

검증

  • 컴파일: CROWNY_STRICT=1 경고 0 (버퍼읽기 아리티 경고 4건은 기존에도 있던 낡은 builtins 테이블 오탐, 무관)
  • 라이브 4상 발현: fx-rate/fx-reval 조합으로 티/옴/타/음 전부 실측 확인(환율 정상등록=티, 미등록통화평가=옴, 환율≤0=타, 환율급변=음). payment-run/dunning/period-lock/bill-note 등도 각각 실측 확인.
  • 스모크: FI 16개 doctype(기존9+신규7) 단독 100% PASS (SPEC=/tmp/spec_fi_only.json ERP페이지스모크.sh → PASS 16/FAIL 0).
  • 페이지: /app/erp/fi.html HTTP 200, 폼 16개(9+7) 확인.
  • fi.html FORMS 배열에 7개 폼 추가(payment-run/dunning/fx-reval/vat-report/fin-statement/period-lock/bill-note). fx-rate(환율등록)는 마스터 세팅 성격이라 폼 미배치(curl로만 접근, 기존 계정/거래처 마스터도 폼 없음과 동일 관례).
  • /tmp/erp페이지스펙.json, data/규칙/사상규칙.psv(R120~R192, 17행)에도 신규 doctype 반영.

발견한 문제 (내 범위 밖 — 인프라 이슈)

  • 문자열 핸들 상한(480000) 근접: ERP통합서버.한선(10모듈 병합 서버, 셀코어ERP+erp_FI+CO+MM+SD+PP+PLM코어)는 GC 없는 범프 할당자 특성상 프로세스 수명 동안 누적된 문자열 핸들이 90%(432000/480000)에 도달하면 이후 요청이 간헐적으로 502/응답지연을 일으킴. 98개 doctype 전수 스모크를 한 프로세스 수명에서 연속 실행하면 이 한도에 근접해 MM/CO/SD 등 기존(pre-existing) 모듈에서도 동일 증상 재현 확인(내 FI 추가와 무관, 원인은 한선씨 상주 HTTP 서버가 연결당 메모리마커()/메모리복원()을 안 하는 구조적 특성 — 가드레일 "한선씨 상주 HTTP 서버 필수 이디엄" 참조). "다른 부분 절대 수정 금지" 지시에 따라 주() 연결루프는 손대지 않음 — 별도 인프라 티켓으로 보고 필요.
  • 이 이슈로 98/98 풀스모크를 한 번의 연속 실행으로 깨끗하게 통과시키기 어려움(공유 19+세션 환경의 동시 트래픽으로 셀넷.psv가 테스트 중에도 계속 자람, 296→650+ 관측). FI 16/16 단독 스모크는 매번 클린 PASS.

관련 파일

  • /Users/ef/crowny-erp/core/libs/erp_FI.한선 — FI-G1~G7 함수 + 헬퍼(FI_모듈셀전체, FI_통화코드, FI_오늘YYYYMMDD 등) 추가
  • /Users/ef/crowny-erp/core/servers/ERP통합서버.한선 — 액션FI() 디스패치 8행 추가
  • /Users/ef/crowny-nexus-app/public/erp/fi.html — FI_SPEC 배열 7개 폼 추가
  • /Users/ef/crowny-erp/data/마스터_환율.psv, /Users/ef/crowny-erp/data/마스터_기간마감.psv — 신규 마스터
  • /Users/ef/crowny-erp/data/규칙/사상규칙.psv — R120~R192 추가
  • /tmp/erp페이지스펙.json — FI 배열 7건 추가
  • 백엔드: http://127.0.0.1:9981(A서버), 프록시: http://127.0.0.1:9802(감사서버.js, /api/erp/* → 9981/9983), 정적서빙: /app/erp/fi.html/Users/ef/crowny-nexus-app/public/erp/fi.html

잔여 이슈

  • 위 STR 핸들 상한 이슈는 A서버(9981) 전체(10모듈 공용) 아키텍처 수준 수정이 필요 — 연결당 메모리마커()/메모리복원() 도입은 별도 작업으로 분리 권장.