crowny-clean 정본 병합 + 잔존 브랜딩 수리 → AYS 미러 전파
개요
clean.crowny.org(:9624) 서버.한선을 SSOT로 확정하고, crowny-ays 시공 인스턴스(:9929/org.crowny.ays.work)로 동기화.sh를 통해 전파했다.
무엇을 했는지
- 정본 병합: crowny-ays 미러에만 있던
_설정로드() 함수 내 15줄(데이터루트 기준 15개 파일경로 재계산 — quote/booking/job/zone/photo/report/approval/staff/crew/crd_ledger/audit_log/staff_report/review/chat/seq)을 clean 정본 서버.한선의 동일 위치(반환 1 앞)에 이식. diff 결과 두 파일 완전 동일 확인.
- 잔존 브랜딩 수리 (4건 중 3건 완료, 1건 skip):
- a.
/home 라우트
"service" 필드:
"크라우니클린" 하드코딩 →
_서비스명 변수 사용으로 수정 (서버.한선:1352 부근).
- b.
앱.html 정적
<title>(7행)·
역할바제목 초기값(242행)·하단 "Crowny Clean" 텍스트(380행)를
{{브랜드명}}/
{{서비스명}} 토큰으로 치환. 서버.한선에 부팅 1회 캐시 생성 로직 추가:
_앱HTML캐시생성() 함수가
체계()로 sed 치환 파일(
데이터루트/_app_cache.html)을 만들고,
_처리HTML이 이 캐시 파일을
파일소켓전송으로 스트리밍. VM 문자열 65535B 캡을 피하기 위해 파일 내용을 통째로 한선씨 문자열로 읽지 않고 디스크에서 sed로 처리(82KB 앱.html 안전).
- c.
/health 라우트: 포트 하드코딩(9624) →
문자열변환(포트) 변수 사용으로 수정.
도메인 하드코딩(clean.crowny.org)은 skip — 설정.psv에 도메인 필드가 없어 간단한 수정 범위를 벗어남(잔여 이슈로 기록).
- 정본 배포:
hanseonc_high로 재컴파일 → launchctl kickstart -k gui/501/org.crowny.clean → 실측:
-
curl 127.0.0.1:9624/ = 200
-
/api/config =
{"brand":"크라우니클린","service_name":"이사·입주 프리미엄 1:1 클리닝",...}
-
/home service = "이사·입주 프리미엄 1:1 클리닝" (설정값 그대로, 회귀 0)
-
/ title = "크라우니클린 — 이사·입주 프리미엄 1:1 클리닝" (회귀 0)
- 동기화 전파:
동기화.sh 최초 실행 → 타(충돌) 판정(정본도 변경·미러도 변경 이력). 미러의 로컬수정분(15줄)이 이미 정본에 흡수된 상태였으므로, .동기화상태.psv의 기록된 미러 해시를 현재 미러 실측 해시로 갱신해 로컬수정 플래그를 해소한 뒤 재실행 → 티(동기화실행) 성사, 재컴파일 성공, 스모크(org.crowny.ays-plat:9929 LaunchAgent 최초 생성) 200 통과, 상태 갱신.
-
주의: 동기화.sh가 만든
org.crowny.ays-plat LaunchAgent는 실제 운영 인스턴스(
org.crowny.ays.work, 동일 포트 9929)와 별개 — 스모크 전용으로 즉시 종료(bind 실패). 실제 반영을 확인하려면
운영 LaunchAgent(org.crowny.ays.work)를 kickstart해 새 서버.toau를 로드해야 함(발견: kickstart 전엔 옛 바이너리가 계속 서빙 중이라 title이 미치환 상태로 보였음).
종단 실측 (모두 통과, 회귀 0)
curl 127.0.0.1:9929/api/config → {"brand":"AYS","service_name":"고객님 말씀하신대로(As You Said)",...}
curl 127.0.0.1:9929/ title → <title>AYS — 고객님 말씀하신대로(As You Said)</title> (치환 확인)
curl 127.0.0.1:9929/home service → "고객님 말씀하신대로(As You Said)"
https://ays.crowny.org/ = 200, https://ays.crowny.org/landing = 200
https://clean.crowny.org/ = 200, title = "크라우니클린 — 이사·입주 프리미엄 1:1 클리닝" (회귀 0)
- 동기화.sh 재실행 → 옴(변경없음) 확인
관련 파일
/Users/ef/crowny-clean/서버.한선 (정본, SSOT)
/Users/ef/crowny-clean/앱.html (토큰화: {{브랜드명}}/{{서비스명}})
/Users/ef/crowny-clean/서버.toau (재컴파일본)
/Users/ef/crowny-ays/시공/서버.한선, 앱.html, 서버.toau (미러, 동기화 완료)
/Users/ef/crowny-ays/시공/동기화.sh, .동기화상태.psv
- LaunchAgent:
org.crowny.clean(:9624), org.crowny.ays.work(:9929, 운영), org.crowny.ays-plat(:9929, 스모크전용— 동기화.sh가 최초 생성, 상시 미기동)
잔여 이슈
/health 라우트의 도메인 하드코딩(clean.crowny.org)은 설정.psv에 도메인 필드가 없어 미수정. 필요 시 설정.psv 8번째 필드로 도메인 추가하고 _설정로드()/_도메인 변수화 권장.
org.crowny.ays-plat(동기화.sh 스모크용 LaunchAgent)와 org.crowny.ays.work(실제 운영)가 동일 포트(9929)를 바라보고 있어 향후 동시 기동 시 충돌 가능 — 정리 필요성 있음(현재는 스모크가 즉시 bind 실패 후 종료하므로 안전).