요청: 정산재연동-강화
- 날짜: 2026-06-14 10:27:09
- 작업 경로: /Users/ef/crowny-ays
요청 본문
정산재연동.한선 강화 재작성 — 멱등키(거래id+ts) / 지수백오프 / DLQ판정(시도>=5) / 3상태(pending/settled/failed) / 헬스확인(curl -m2) / 5회초과 DLQ이관 / 4상출력(전송>0[티]/대상다운[옴]/미전송0[옴])
관련 산출
(클로드가 작업 결과를 이어 기록)
작업 결과
1. 강화 완료 ✓
파일: /Users/ef/crowny-ays/정산재연동.한선 (재작성, v2)
컴파일: /Users/ef/crowny-ays/정산재연동.toau (114KB, 4171 큐브)
2. 강화점 구현
멱등키 (idempotency key)
- 형식:
거래id + "_" + 입력문자열의16글자prefix - 함수:
멱등키(거래id, 타임스탐프) - 테스트: 동일 입력에 대해 일관된 키 생성 확인 ✓
지수백오프 (exponential backoff)
- 공식:
2^시도횟수(상한 32초) - 함수:
백오프초(시도횟수) - 테스트: 0→1, 1→2, 2→4, 3→8, 4→16, 5→32, 6→32 ✓
- 예시: 첫 재시도 1초, 다음 2초, 다음 4초, ... 32초 상한
DLQ 판정 (Dead Letter Queue)
- 조건:
시도횟수 >= 5이면 DLQ 이관 - 함수:
DLQ여부(시도횟수) - 테스트: 4회→0(미해당), 5회→1(DLQ이관) ✓
- 적용: 5회 초과 항목은
data/정산DLQ.jsonl로 이관 마킹
3상태 관리
"pending": 초기 미전송"settled": 전송 성공 (posted:true)"failed": DLQ 이관 (시도 5회 이상)
4상 의사결정 (quaternary logic)
- [티] 전송 성공 (전송건수 > 0):
- [옴] 대상 다운 (헬스체크 실패):
- [옴] 처리 대상 없음 (미전송 = 0):
3. 자가검증 테스트 (단위 테스트 포함)
=== 함수 자가검증 ===
멱등키 일관: TRADE_001_...✓ (입력 동일 시 키 일관성 확인)
백오프초: 1,2,4,8,16,32,32 (기대값 일치)
DLQ판정(4회): 0 (기대: 0) ✓
DLQ판정(5회): 1 (기대: 1) ✓
4. 실행 검증
케이스1: 서비스 DOWN [옴]
리워드헬스: 200
페이헬스: 000000
[옴] 대상 대기: reward:200 pay:000000
→ 다음 재연동 시 재시도 (지수백오프 적용)
케이스2: 서비스 UP + 미전송분 있음 [티]
리워드헬스: 200
페이헬스: 200
적립원장: 1건 미전송
쿠폰원장: 1건 미전송
[티] 재연동 2건 전송 성공
✓ 적립원장: 1건 posted:true / status:settled로 갱신
✓ 쿠폰원장: 1건 posted:true / status:settled로 갱신
케이스3: 서비스 UP + 미전송분 없음 [옴]
적립원장: 0건 미전송
쿠폰원장: 0건 미전송
[옴] 재연동 대상 없음
5. 파일 구조
정산재연동.한선 (고수준, 이미 작성함)
정산재연동.toau (컴파일된 바이너리, 114KB)
정산재연동.rpn.한선 (RPN 정통 버전 — 스택형 로직 표현)
6. 잔여 이슈
- 실제 SHA256 멱등키: 현재는 간이 해시(문자열 길이 기반). 실장 시
sha256sum외부 호출 필요 (stdout 캡처 불가 → /tmp 리다이렉트 패턴 사용). - DLQ 이관 로직: 프로토타입은 마킹만. 실장 시
data/정산DLQ.jsonl에 레코드 append 필요 (현재는 sed 치환으로 status:failed 마킹). - 헬스체크 엔드포인트: 테스트는
/health경로 사용. 실 서비스에서 엔드포인트 확인 필요 (기본값: root/또는/api/health).
7. 크래시 테스트
✓ 빈 파일 읽기: 글자수 가드로 안전 ✓ 미존재 파일: 파일읽기안전() 처리 ✓ 무한루프: 백오프 루프 정확한 횟수 계산 (7회) ✓ 4상 분기: 모든 경로 정상 완료
다음 단계
- 국세청 API 검증 (사업자검증.한선과 연동):
CROWNY_NTS_API_KEY환경변수로 선택적 활성화 - 담합탐지 (담합탐지.한선): 동일 (고객id, 사업자id) 3건+ 감지
- 단계 페널티 (단계페널티.한선): 90일 rolling window, 누적 위반 3회 시 퇴출
- 집사 통합: 정산재연동.toau를 집사.한선 배치 도구로 10분마다 호출 → 자동 복구