← 목록
기타 2026-07-21 5KB 읽기 5분

티옴타톡 — 스튜디오·신탁 서버통합 (③단계 서버 확장)

개요

스펙 /Users/ef/crowny-tiomta/tok/스펙.md §③ "스튜디오·신탁 계약"의 서버 확장 라우트 7종을 티옴타톡서버.한선에 통합. 엔진(tok/스튜디오.한선)은 이미 완성돼 있었고(자체시험 PASS), 이번 작업은 (A) 서버 라우트 배선 (B) rounds.psv 시드 3건 (C) 임시 포트 19979 종단검증.

A. 서버 통합

  • 가져오기 "스튜디오.한선" 추가.
  • _원장훅스튜디오(...) 를 서버 파일에서 재정의해 실제 원장기록(...) 호출로 교체
(회차예약.한선의 _원장훅회차와 동일 패턴 — STRICT 컴파일 경고 2건만 발생, 둘 다 의도된 재정의 경고: _원장훅회차·_원장훅스튜디오).
  • 라우트 7종 추가:
  • GET /api/studio/rounds → 회차목록() 배열을 영문 카멜케이스 JSON으로 변환
  • GET /api/studio/round/<ID> → 회차조회(ID), 없으면 404
  • POST /api/studio/module body 회차|모듈idx|on0/1 → 회차모듈설정(), idx범위 오류 400
  • GET /api/studio/settle/<ID> → 정산미리보기() "예약액|모듈비|PG비|정산액" → JSON
  • GET /api/studio/trust/<ID> → 신탁조회() 레코드 있으면 그대로, 없으면(신탁집행 미호출)
  • 예약액 기반 비영속 미리보기를 신탁분배()(순수함수)로 즉석 계산해 응답 — GET이 상태를 만들지 않도록 설계(신탁집행만 영속화).
  • POST /api/studio/trust/exec body 회차|단계 → 신탁집행(), 순서위반 -1 → 400
  • GET /api/studio/sim?cap=&mode= → 마케팅시뮬() 5행을 서버가 fund/spend/ops/convTotal/
  • cpaAvg/roas로 집계해 JSON(§H5 "5행 고정, 합계행 없음"이 엔진 계약이라 집계는 호출측 파생)
    • GET /앱/스튜디오.html 정적 서빙 — 82,824바이트로 읽기() 64KB 절단 캡·문자열 65535B 하드캡
    둘 다 초과해 기존 _앱발견처리() 패턴(읽기()+문자열 응답 조립)을 쓸 수 없었다. 메인()의 TCP 루프에서 이 경로만 별도 분기해 헤더를 TCP쓰기로 먼저 보내고 본문은 파일소켓전송 (C레벨 fread→write, opcode856)으로 스트림 — 문자열층을 완전히 우회. 리터럴 UTF-8 경로와 퍼센트인코딩 경로(/%EC%95%B1/%EC%8A%A4%ED%8A%9C%EB%94%94%EC%98%A4.HTML) 둘 다 매칭.

    B. 시드

    data/rounds.psv 3건: R001 에스텔크림 v3(cap6561/예약2187/48000원/진행/전모듈ON), R002 울푸드발효액 v2(cap5000/예약5000/35000원/마감/일부ON), R003 루디아컬렉션 v1(cap2187/예약81/89000원/진행/최소모듈). 단가는 스펙에 R002/R003 값이 없어 임의 지정. 기존 셀프테스트 픽스처(trust.psv RND001)는 rm.

    C. 종단검증 (임시 포트 19979, 라이브 9979 무접촉)

  • CROWNY_STRICT=1 컴파일: 경고 0(의도된 재정의 2건만), exit 0.
  • 회귀 4종 전부 200: /health, /api/tok/threads, /api/feed/scenes, /api/ledger/verify.
  • studio 7종 실측:
  • rounds 3건, round/R001 정상, 스튜디오게이지(2187)=70(3^7 정확 일치, 엔진 직접호출로 재확인)
  • settle/R001: gross=104,976,000 · moduleFee=9,447,840(요율90=8모듈) · pgFee=3,149,280 · net=92,378,880
  • trust/R001(집행 전 미리보기): 4분할 합계 7,595,947 = total 7,595,947 (합계보존 확인)
  • module 토글(idx0 OFF) 후 settle 재조회: moduleFee 9,447,840→8,503,056 하락 확인
  • trust/exec: 순서위반("물류" 먼저) 400 확인 → 정순서(공장→물류→배송→브랜드정산) 4회 전부
  • 200, 원장 height 0→4 확인
  • sim?cap=6561&mode=balanced: 5행 이름 정확히 [큐레이터보상, YouTube Shorts, Instagram Reels,
  • TikTok, 리타게팅], 지출합 2,437,542, 부스팅3채널합 975,016 — 스튜디오.한선 자체시험 골든값과 정확 일치(fund=2,834,352·ops=396,810·convTotal=1,506·roas=29)
  • /앱/스튜디오.html: 200, charset=utf-8, 82,824바이트 byte-identical(리터럴/퍼센트인코딩 둘 다)
  • 함정 발견: 테스트 서버가 data/ 절대경로를 라이브와 공유해 원장 WAL에 4건 테스트 TX가
  • 실기록됨(원장복원 로그가 사전 "WAL 없음"을 확인해줘 안전하게 rm으로 롤백 가능했음 — 라이브 9979는 그때까지 실거래 0건이었음, 다른 파일(reviews/today/subs 등)은 병행 세션 실사용 데이터라 손대지 않음). → 테스트 후 원장.psv/원장WAL.psv/trust.psv 삭제 + rounds.psv 모듈비트 원복.

    관련 파일

    • /Users/ef/crowny-tiomta/tok/티옴타톡서버.한선 (수정 — 라우트/훅 추가)
    • /Users/ef/crowny-tiomta/tok/스튜디오.한선 (읽기 전용, 이미 완성)
    • /Users/ef/crowny-tiomta/tok/앱/스튜디오.html (읽기 전용, 다른 세션 작업물)
    • /Users/ef/crowny-tiomta/tok/data/rounds.psv (시드 3건)
    • /Users/ef/crowny-tiomta/tok/스펙.md §③

    잔여 이슈

    • 티옴타톡서버.toau(라이브 9979 바이너리)는 재컴파일 안 됨 — 메인 세션이 재기동 수행 예정.
    • R002/R003 단가는 임의값(스펙 미지정) — 실제 브랜드 단가 확정 시 조정 필요.
    • 임시포트 종단검증이 data/ 절대경로 공유로 라이브와 완전 격리되지 않는 구조적 함정 — 추후
    대량 서버 테스트 시 STUDIO_TEST_DATA_DIR 같은 오버라이드 env 도입 고려.