crowny-dex 마무리 (2026-07-31)
개요
dex.crowny.org(9402, LaunchAgent org.crowny.dex.plist) 라이브 서비스의 3가지 마무리 작업 완료:
QA 백도어 프로덕션 차단, 보급계정 9인 자동등록, 로그인 토큰 영속화. 전부
DEX서버.한선(hanseonc_high)에서 순수 한선씨로 구현.
무엇을 했는지
1. QA 전용 엔드포인트 보호 — 이미 구현되어 있었음(확인만)
/api/_seed,
/api/_settime(희년 시뮬레이션),
/api/_debugmod는 부팅 시
환경변수("DEX_QA")를
QA플래그에 캐시하고, 각 핸들러에서
QA플래그 != "1"이면 403 반환하도록 이미 구현되어 있었다
(코드 라인 1881~1922 부근). LaunchAgent plist(
~/Library/LaunchAgents/org.crowny.dex.plist)에는
DEX_QA 환경변수를 넣지 않아 프로덕션은 기본 잠김. 로컬에서
DEX_QA=1 PORT=9471 crownyc run build.toau로
띄우면 정상 동작 확인.
2. 보급계정 9인 일괄등록 — 신규 구현
보급계정초기화() 함수 추가(라인 ~1063 부근, 보급계정확인() 다음): 보급계정(SUPPLY-1~9) 배열을
순회하며
자격찾기(계정) < 0인 계정만 무작위 초기비밀번호(SHA256 시드)로
회원가입() 호출.
결과 비밀번호는
data/supply_init_passwords.tsv(계정\t비번\t시각)에 1회 기록.
- 부팅 시퀀스에
자격불러오기() 직후 토큰불러오기() → 보급계정초기화() 순서로 결선(라인 ~2048).
기존 계정이 있으면 건너뛰므로 재부팅해도 멱등(재등록/중복 없음, 로그로 확인).
3. 토큰 영속화 — 신규 구현
토큰발급()에서 토큰 발급 시 data/tokens.tsv(아이디\t토큰\t만료시각)에 덧쓰기.
토큰불러오기() 함수 추가: 부팅 시 tokens.tsv를 파싱해 만료(만료값 <= 지금시각())된 토큰은
걸러내고 유효한 것만 메모리(
토큰아이디/
토큰값/
토큰만료)로 복원.
자격불러오기()와 동일한 탭/줄바꿈 수동 파서 패턴 재사용(내장 split 없음).
관련 파일
/Users/ef/crowny-dex/DEX서버.한선 — 본체 수정
/Users/ef/crowny-dex/build.toau — 재컴파일 산출물(hanseonc_high, 56747 큐브, 에러 0)
/Users/ef/crowny-dex/data/tokens.tsv — 신규 토큰 영속화 파일
/Users/ef/crowny-dex/data/supply_init_passwords.tsv — 보급계정 9인 초기비밀번호(로컬 전용, 유출 주의)
~/Library/LaunchAgents/org.crowny.dex.plist — 변경 없음(DEX_QA 미설정 확인만)
QA 실측
| 항목 | 결과 |
|---|
프로덕션(9402, DEX_QA 없음) _seed | 403 |
프로덕션(9402, DEX_QA 없음) _settime | 403 |
로컬 QA 모드(DEX_QA=1 PORT=9471) _seed | 200 |
로컬 QA 모드 _settime | 200 |
| 보급계정 SUPPLY-1~9 로그인 | 9/9 성공(토큰 발급 확인) |
| credentials.tsv SUPPLY- 항목 수 | 9(중복 없음, 재부팅 후도 9 유지 — 멱등 확인) |
서버 재시작 후 재로그인 없이 기존 토큰으로 인증 API(/api/supply) 호출 | 성공(재시작 전 발급 토큰으로 재시작 후 정상 응답) |
| 재컴파일 | 에러 0 (56747 큐브) |
배포 후 localhost:9402/health | 200 healthy |
배포 후 공개 https://dex.crowny.org/health | 200 healthy |
잔여 이슈
없음. 이번 라운드로 CLAUDE.md에 명시됐던 "
/api/_seed,
/api/_settime은 QA 전용 — 실배포 전 인증가드
또는 제거 필요" 항목과 토큰 비영속/보급계정 수동등록 문제 모두 해소.