← 목록
한선씨 2026-05-22 4KB 읽기 5분

ABTI 한선씨 서버 자립 구동 검증 + 데이터 손상 사건

개요

ABTI 서버.한선(1238줄)이 Node.js 없이 단독으로 14개 API 엔드포인트를 처리하는지 검증. 검증 성공 — 그러나 검증 과정에서 운영 데이터 손상 사건 발생. 양쪽(성과 + 사고)을 정직하게 기록한다.

성과 — 한선씨 서버 14 엔드포인트 전부 동작

포트만 19811로 바꾼 복사본으로 검증. 결과:

엔드포인트결과
GET / (HTML)
GET /api/stats
GET /api/i18n/:lang
GET /api/og/:typeCode (SVG)
POST /api/profile
GET /api/profile/:code
PATCH /api/profile/:code
GET /api/refer/:code
POST /api/admin/login
POST /api/admin/logout
GET /api/admin/requests
POST /api/admin/requests (세션인증)
PATCH /api/admin/requests
DELETE /api/admin/requests
한선씨 서버가 server.js(589줄) + crowny-admin-server.js(227줄)를 기능적으로 대체 가능함을 확인.

수정한 버그 (3종)

1. TCP읽기 인자 부족

TCP_READ opcode 493은 [fd, 최대바이트] 2인자 필요. ABTI는 TCP읽기(클라이언트) 1인자 → 빈 문자열 반환 → 모든 요청 무응답.
  • 수정: TCP읽기(클라이언트, 8191) — 서버.한선 + libs/ABTI서버.한선

2. JSON.한선 API 불일치 (전면)

JSON.한선의 JSON파싱[키,값,키,값,...] 배열을 반환. JSON생성도 이 배열만 직렬화 — 한선씨 해시맵(맵생성)은 []로 깨짐. 서버.한선은 전체가 "JSON객체 = 한선씨 해시맵" 전제로 작성 → 모든 응답이 []로 직렬화되고 있었음.
  • 수정: 맵생성()[](50곳), 맵넣어(JSON설정((154곳), 맵꺼내(JSON값((67곳)
  • 중첩 객체(scores) 이중파싱 제거, 글자수길이 배열 대응

3. JSON.한선 _맵인가 오판 (라이브러리 버그)

_맵인가가 "첫 원소 문자열변환 글자수>0"로 판단 → 객체 배열·숫자 배열을 맵으로 오판. 객체 배열 [{...},{...}]{"키":...} 객체로 잘못 직렬화 → requests.json 구조 손상.
  • 수정: 타입(값[0]) == "string" 엄격 검사 (crownyc/libs/JSON.한선)

4. 무작위() 정수 범위

무작위()는 0~1 float가 아니라 큰 정수(~1100~23500) 반환. 반올림(무작위()*15)가 범위 밖 인덱스 → 토큰/ID 빈 문자열.
  • 수정: 무작위정수(n) 헬퍼 추가 (절댓값 + 모듈로)

데이터 손상 사건 (사고 — 재발 방지용 기록)

무슨 일이

검증용 19811 복사본이 데이터 경로를 절대경로(/Users/ef/crowny-abti/data/*.json)로 그대로 들고 있어, 테스트 서버가 실제 운영 데이터를 직접 덮어씀.

파일피해복구
requests.json객체로 손상 + 2건 유실✅ 복구 (조회 응답에 원본 5건 보존)
profiles.json원본 프로필 2개 유실❌ 복구 불가

근본 원인 — 프로토콜 미준수

  1. crowny-hub 커밋 부재 — crowny-abti는 hub에 커밋 이력 0. 직전 스냅샷이 없어 복구 불가.
  2. 테스트 격리 부재 — 검증 빌드가 실데이터를 가리킴.

재발 방지

  • 작업 시작/중간에 crowny-hub commit 으로 스냅샷 확보 (이번에 3개 서비스 첫 커밋 완료: abti 76448ee9, enterprise 76c8cf3c, crownyc d1c21b78)
  • 한선씨 서버 검증은 격리된 data 디렉토리(/tmp/abti-test-data/)로
  • 서버.한선 데이터 경로를 환경변수/상대경로로 분리 (잔여 작업)

관련 파일

  • /Users/ef/crowny-abti/서버.한선 — JSON API 정렬, TCP읽기, 무작위정수
  • /Users/ef/crowny-abti/scripts/test-pipeline.한선; 주석/예약어 수정
  • /Users/ef/CrownyOS/crownyc/libs/JSON.한선_맵인가 정밀화
  • /Users/ef/CrownyOS/crownyc/libs/ABTI서버.한선 — TCP읽기 2인자

잔여 이슈

  1. profiles.json 원본 2개 유실 — 사용자 판단 대기 (Time Machine 복구 가능성)
  2. 서버.한선 데이터 경로 외부화 (절대경로 → 환경변수)
  3. JSON 직렬화에서 거짓(-1)이 false 아닌 -1로 출력 — JSON.한선 boolean 처리
  4. 한선씨 서버 단독 구동이 검증됐으므로 server.js/crowny-admin-server.js 제거 시 소버린 비율 대폭 상승 (단 클라이언트 JS 4종은 별도 — HTML script src)