crowny-clean 서버.한선 설정 구동형 플랫폼 코어화
개요
crowny-clean(clean.crowny.org:9624)의 서버.한선을 clean/AYS가 동일 파일을 쓰고 인스턴스 차이만
설정 파일로 표현하는 구조로 리팩토링. 부팅 시 설정.psv를 로드해 포트·데이터루트·브랜드명·
서비스명·종목목록·앱HTML경로·폰트경로를 오버라이드. 설정 파일이 없으면 clean 기존 하드코딩
기본값 그대로 동작(회귀 0).
무엇을 했는지
- 서버.한선:
_설정로드() 함수 추가. 환경변수("CROWNY_INSTANCE_CONF") → 없으면
현재경로()+"/설정.psv" → 없으면
/Users/ef/crowny-clean/설정.psv 순으로 후보 경로 순회.
설정 라인 형식(1행,
| 구분):
포트|데이터루트|브랜드명|서비스명|종목목록(쉼표)|앱HTML경로|폰트경로.
각 필드는 값이 있을 때만 전역 변수를 덮어씀 (부분 설정도 안전).
GET /api/config 라우트 추가 — {"brand":..,"service_name":..,"items":[...]} JSON 반환.
문자열 배열 JSON 헬퍼
_배열JSON_문자열() 신규 추가(기존
_배열JSON은 quote 없이 raw 값용).
/Users/ef/crowny-clean/설정.psv 작성 (clean 기본값 명시):
9624|/Users/ef/crowny-clean/data|크라우니클린|이사·입주 프리미엄 1:1 클리닝|아파트,오피스텔,빌라,단독|/Users/ef/crowny-clean/앱.html|/Users/ef/crowny-clean/fonts/PretendardVariable.woff2
- 앱.html: 부팅 시
/api/config fetch(설정로드()) → document.title, 역할바 제목(#역할바제목),
홈 화면 브랜드/서비스 카피, 견적 폼의 주거형태 칩줄(housing_type)을 서버가 준
items로 치환.
기존 하드코딩 값과 100% 동일해 clean 화면은 그대로 렌더.
관련 파일
/Users/ef/crowny-clean/서버.한선 (수정)
/Users/ef/crowny-clean/앱.html (수정)
/Users/ef/crowny-clean/설정.psv (신규)
/Users/ef/crowny-clean/서버.한선.bak-플랫폼화전, 서버.toau.bak-플랫폼화전 (수정 전 사본)
/Users/ef/crowny-clean/서버.toau (재컴파일 후 배포본)
설정 키 스펙
| 순서 | 키 | 설명 |
|---|
| 0 | 포트 | 리슨 포트 (숫자) |
| 1 | 데이터루트 | PSV append-log 디렉토리 |
| 2 | 브랜드명 | /api/config brand |
| 3 | 서비스명 | /api/config service_name |
| 4 | 종목목록 | 쉼표구분, /api/config items 배열 |
| 5 | 앱HTML경로 | 정적 서빙할 앱.html 경로 |
| 6 | 폰트경로 | woff2 폰트 경로 |
검증 결과 (2026-07-30)
컴파일: hanseonc_high 서버.한선 — 에러 0, 64447 큐브 생성.
격리 테스트(포트 9699, 커스텀 설정.psv): /=200, /api/config={"brand":"테스트브랜드",...}, /quotes/estimate=200.
라이브 재기동(launchctl kickstart -k gui/$(id -u)/org.crowny.clean, 기존 LaunchAgent org.crowny.clean 사용):
/ = 200
/api/config = 200, {"brand":"크라우니클린","service_name":"이사·입주 프리미엄 1:1 클리닝","items":["아파트","오피스텔","빌라","단독"]}
/health = 200, 기존과 동일 응답
/quotes/estimate = 200
/staff = 200
data/*.psv 라인 수 재기동 전후 동일 확인(quote.psv 4, booking.psv 4, job.psv 1 등) — 데이터 훼손 없음.재기동 방식
LaunchAgent
org.crowny.clean (
~/Library/LaunchAgents/org.crowny.clean.plist, KeepAlive+RunAtLoad,
crownyc run 서버.toau). 배포 절차: 사본 백업 → 재컴파일 →
서버.toau 교체 →
launchctl kickstart -k gui/$(id -u)/org.crowny.clean → curl 실측.
잔여 이슈
/health 라우트는 여전히 port:9624/domain:clean.crowny.org 하드코딩 문자열 — 필요 시
_브랜드명/
포트 변수로 동적화 가능(이번 스코프는 /api/config 중심이라 미변경).
- AYS 인스턴스 적용 시: 해당 디렉토리에 자체 설정.psv(다른 포트·데이터루트·브랜드) 배치하거나
CROWNY_INSTANCE_CONF 환경변수로 경로 지정 필요. 아직 AYS 쪽 설정.psv는 생성하지 않음.
- 디자인이식 훅이 앱.html 기존(사전 존재) 색상 토큰(#000000 등, 크라우니캔버스 디자인 규칙.css
영역)을 위반으로 계속 표시 — 이번 작업으로 도입한 값이 아니라 기존 라이브 파일에 이미 있던
값들이며, 이번 변경 범위(브랜드/종목 치환) 밖이라 손대지 않음. 별도 디자인 정합 작업 필요 시 확인.