← 목록
AI 2026-07-06 6KB 읽기 7분

:9977 브레인큐 상주서버 — /translate·/twin/next 라우트 추가

개요

org.crowny.brainq(launchd, :9977 크라우니코드 뇌 상주 조회 서버)에 기존 /q,/status,/reload 라우트를 무손상 유지한 채 번역·사고트윈 노출 라우트 2종을 추가했다. 신규 데몬 등록 없음 — 기존 launchd 잡을 kill→KeepAlive 자동재기동으로만 반영.

무엇을 했는지

1. GET /translate?d=<en2ko|ko2en>&q=<문장>

  • 기동 시 /Users/ef/crowny-butler/libs/실어휘코드북v2_한글.psv(4169행, Concepticon EN↔KO)를
en2ko/ko2en Map 2개로 선로드(en2ko=4164, ko2en=3637 — 중복 한글글로스는 최초 것 우선).
  • 단어급(공백 토큰) 치환. 미등재 토큰은 [원문] 그대로.
  • ko2en은 조사 접미 스트립(에서/으로/을/를/이/가/은/는/의/에/로/와/과/도/만, 정본과 동일 순서·목록)
후 재매칭 → 실패 시 원토큰 재시도.
  • 방향 자동감지: d 파라미터가 en2ko/ko2en이 아니면 첫 글자 코드포인트로 판별(정본과 동일 규칙).
  • 응답 첫 줄: 번역|<방향>|단어급|매핑N/전체N (어순 스왑 생략을 "단어급"으로 정직 표기),
둘째 줄부터 치환 결과.
  • 정본 대조: ~/.claude/scripts/브레인번역.한선(RPN VM, 조사스트립+어순스왑 포함 원본)과
동일 입력(PLUM TREE en2ko, 자두를 밤나무가 ko2en)으로 직접 실행 대조 — 매핑수·치환 결과 단어 단위로 일치 확인(정본은 hanseonc 배열캡 4095로 en2ko 캐시가 4095행 절단되는 기존 VM 함정이 있어, 이 JS 서버가 오히려 4164행 전량을 커버 — 알려진 차이, 버그 아님).

2. GET /twin/next?steps=<CSV트릿열>&n=<N>

  • ~/.claude/scripts/큐트릿격자.한선의 부스트업모드를 child_process(crownyc run)로 직접 호출,
사고트윈.shrun_qg()와 동일 프로토콜(CROWNY_QG_MODE=부스트업모드, CROWNY_QG_STEPS, CROWNY_QG_BOOST 환경변수 경유).
  • 컴파일 캐시(/tmp/사고트윈_큐트릿격자.toau)를 사고트윈.sh와 공유 — 소스가 캐시보다 최신일 때만
hanseonc_high로 재컴파일.
  • 타임아웃 10초, 실패 시 오류|트윈실행실패 정직 반환.
  • 출력: 다음스텝후보|<트릿CSV>|<4상이름CSV> 그대로 패스스루.

검증 결과

  • launchd 재기동(kill PID → KeepAlive 자동재기동): /status 레코드/셀 수치 재기동 전후 동일
(58538건|스킵0|셀20|11.3%).
  • /q 회귀: 환불_판정 조회 HIT:상주|TAA 정상(재기동 전후 동일 응답).
  • /translate 양방향 실측:
  • en2ko PLUM TREE번역|en2ko|단어급|매핑2/2 / 자두 나무
  • ko2en 자두를 밤나무가번역|ko2en|단어급|매핑2/2 / plum chestnut tree
  • 정본(브레인번역.한선) 동일 입력 실행 결과와 단어 단위 일치 확인.
  • /twin/next?steps=1,1,2,0,1&n=2다음스텝후보|2,0|타,옴 정상.
  • /q p50: 재기동 전 0.576ms → 재기동 후(라우트 추가 후) 0.705ms, 30회 샘플 max 6.8ms —
  • curl 오버헤드 범위 내 오차, 유의미한 성능 저하 없음.

    관련 파일

    • /Users/ef/.claude/scripts/crownycode-brain-server.js — 상주 서버 본체(라우트 2종 추가)
    • /Users/ef/.claude/scripts/crownycode-brain-server.한선 — 동반 한선씨 축소 데모(라우트 개념 재현 추가)
    • /Users/ef/.claude/scripts/브레인번역.한선 — 번역 정본(RPN VM, 대조 기준)
    • /Users/ef/.claude/scripts/사고트윈.sh, ~/.claude/scripts/큐트릿격자.한선 — 트윈 부스트업 원본
    • /Users/ef/crowny-butler/libs/실어휘코드북v2_한글.psv — 코드북 데이터
    • /Users/ef/Library/LaunchAgents/org.crowny.brainq.plist — 기존 launchd 잡(재등록 없음, kill+KeepAlive만 사용)

    잔여 이슈 → 해결 (2026-07-07 후속)

    위 두 잔여 이슈를 모두 해소했다.

    1. 어순 스왑 이식 완료

    • 코드북 로드 시 온톨로지 필드(col6)를 en2koMap/ko2enMap 값에 {word, onto}로 함께 보관하도록 확장.
    • translateLine()을 토큰별 (word,onto,matched) 3배열 수집 → 인접쌍(j,j+1) 모두 매치 시
    온톨 스왑(en2ko: Action,Thing→스왑 / ko2en: Thing,Action→스왑) 재배열 루프로 재작성 — 정본 브레인번역.한선줄번역() 스왑 로직과 1:1 이식.
    • 응답 태그 단어급어순포함으로 갱신.
    • 대조표 (정본 브레인번역.한선 RPN VM 직접실행 vs JS 서버 /translate):
    | 케이스 | 방향 | 입력 | 정본 출력 | 서버 출력 | 일치 | |---|---|---|---|---|---| | 스왑(Action,Thing) | en2ko | eat fish | 물고기 먹다 | 물고기 먹다 | ✅ | | 스왑 역방향(Thing,Action) | ko2en | 물고기 먹다 | eat fish | eat fish | ✅ | | 무스왑(Thing,Thing) 회귀 | en2ko | PLUM TREE | 자두 나무 | 자두 나무 | ✅ |

    • 동반 .한선 축소 데모(crownycode-brain-server.한선)에도 데모ONTO 맵 + 동일 스왑 루프 이식,
    EAT/FISH 예시 추가 — hanseonc_high 컴파일·실행 확인(스왑 4케이스 모두 정본과 일치, 최초 구현 시 ko2en 조사스트립 스템 추적 누락 버그 발견→데모조사스트립이 "값§스템" 팩 반환하도록 수정해 온톨 조회 키를 정확히 잡도록 고침).

    2. 코드북 mtime 감시 재로드 완료

    • /qmaybeReload()(DB mtime 3초 디바운스 폴)와 동일 패턴으로 maybeReloadCodebook() 추가,
    요청마다 maybeReload(); maybeReloadCodebook(); 호출.
    • 검증: 코드북 파일 touch 후 4초 대기 → 로그에 코드북 mtime 변경 감지 — 재로드 +
    코드북 로드: 4164행 확인(재기동 없이 흡수, /translate APPLE 응답 불변 확인).

    재검증 (launchd kill→KeepAlive 재기동 후)

    • /status: 58570|0|20|11.3%|... — 셀 구조·레코드 수 무손상.
    • /q 회귀: 환불_판정HIT:상주|TAA 정상(라우트 신설 전과 동일 응답 포맷).
    • /q p50(30회 curl 왕복): 23.2ms(curl 프로세스 스폰 오버헤드 포함 — 서버 자체 응답은 기존과
    동일하게 순간적, /status 메모리 46.7MB로 안정).

    관련 파일(갱신)

    • /Users/ef/.claude/scripts/crownycode-brain-server.js — 온톨로지 보관·어순스왑·코드북mtime재로드 추가
    • /Users/ef/.claude/scripts/crownycode-brain-server.한선 — 동반 데모에 온톨스왑 이식(버그 수정 포함)