← 목록
기타 2026-06-30 4KB 읽기 4분

크라우니메신저 채팅 UX 개선 (2026-06-30)

개요

msg.crowny.org(:9939, 라이브) kps-relay 채팅 UX 3종 개선. 사장님(kps)이 폰/웹(/chat)에서 보는 화면 기준.

근본원인 진단

  • 화면 "숫자/00/????" 및 빈 피드의 진짜 원인 = stale 런타임 힙 고갈.
  • 구 프로세스(PID 1619) /tmp/메신저서버.err[ARRAY] OOM! MAX=48000000 반복 → 배열 힙 소진으로 in-memory 메시지 배열 손상 → feedjson이 메시지 24건 로드(다음:24)했는데도 룸 매칭 0건 반환.
  • 새로 컴파일한 toau를 스크래치 포트(19939)로 띄우니 의코_디코딩이 모든 코드를 정상 자연어로 번역 → 코드 정상, 런타임만 문제임을 확정.
  • 의미어 번역기능은 이미 내장(의미어코드.한선 의코_디코딩). 코드는 의코_사전(어절 단위) 인덱스 "."열거 + 0=미지토큰→리터럴 채널. 저장 코드가 이 사전에 1:1 매핑되므로 실어휘코드북.psv(SemCode)로 사전 교체 금지(기존 메시지 전부 깨짐). 정본 유지.

고친 것

  1. 의미어 번역(읽기) 정상화 — 서버 재기동으로 디코딩 복구. UI에 디코딩 실패 폴백 추가: 자연어가 비었거나 물음표만이면 리터럴→코드 순 폴백(disp()). kpsmacs 알림(리터럴=한글문장)은 그대로 깔끔히 표시.
  2. kps 회신 표시 — sendnl 경로 정상. 라이브 실측: kps로 "네 확인했어 배포 진행해줘" 전송→색인24·코드"106.104.58.0" 저장→feedjson 디코딩 정상, 발신=kps라 UI 본인 말풍선(mine). (검증 후 테스트 메시지 WAL에서 제거)
  3. 시각 HH:MMAPI피드JSON시각(epoch) 필드 추가(폴엔 이미 있었으나 feedjson 누락). UI hhmm()이 말풍선 메타에 HH:MM 렌더, 색인은 우측 정렬.

UI만 vs 서버도

  • 서버 수정: 메신저서버.한선 — API피드JSON에 시각 필드 1줄 추가(#3 위해 불가피). 재컴파일+재기동.
  • UI 수정: chat.html — hhmm()/disp() 폴백, 시각/색인 메타 렌더, .time/.ix CSS. 코드 보기 토글은 기존 유지(기본=자연어, 토글시 코드+리터럴).

관련 파일

  • /Users/ef/CrownyOS/apps/메신저/kps/메신저서버.한선 (서버)
  • /Users/ef/CrownyOS/apps/메신저/kps/메신저서버.toau (재컴파일)
  • /Users/ef/CrownyOS/apps/메신저/kps/chat.html (UI, 서버가 /chat·/ 로 디스크 직빙)
  • /Users/ef/CrownyOS/apps/메신저/kps/의미어코드.한선 (코덱, 무수정)
  • WAL: /Users/ef/crowny-data/메신저/wal.log
  • launchd: ~/Library/LaunchAgents/org.crowny.kpsmsg.plist (KeepAlive, 부팅스크립트 /Users/ef/CrownyOS/메신저위계부팅.sh — toau 미존재시만 재컴파일)

백업

  • 같은 디렉토리: 메신저서버.한선.bak-20260630-064038, chat.html.bak-20260630-064038, 메신저서버.toau.bak-20260630-064038
  • WAL: wal.log.bak-*

재기동

  • launchctl kickstart -k gui/$(id -u)/org.crowny.kpsmsg (KeepAlive 자동 respawn). 신규 PID 67832, 24건 복원, 신규 OOM 없음.

검증결과 (라이브 실측)

  • #1 feedjson 이후=0 → 24건 전부 디코딩 자연어 정상("포트 9090 으로 서버 만들어줘" 등). (구 런타임은 빈 배열)
  • #2 sendnl(kps 회신) → 저장·디코딩·본인 말풍선 정상.
  • #3 feedjson 각 메시지 시각 포함 → UI HH:MM.
  • /api/health ok, /chat에 hhmm·disp·time 신코드 서빙 확인.
  • 사장님 새로고침 시 즉시 반영(서버가 chat.html 디스크 직빙, 폴 2.5s).

잔여 이슈

  • VM 배열 힙 MAX=48000000 — 장기 가동시 OOM 재발 가능. 현재 재기동으로 클리어. 향후 메시지 누적 대비 힙 상향 또는 주기적 재기동/롤오버 검토.
  • 사전 미등록 토큰 많은 문장은 리터럴 채널 의존(디코딩 "?" 가능) → UI 폴백으로 완화.