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

크라우니캔버스 서버 통합 결선 + 종단 스모크

개요

crowny-canvas 서버(:9620)에 라이브러리 7종(검색/브리핑/커넥터/원장/권한/온보딩/컬렉션.한선 + 온보딩검증.한선)을 통합하고 계약 §3 나머지 API 7종을 완성. STRICT 컴파일 0경고, 서버 기동 후 정적 5종+API 11종 전 라우트 curl 실측 완료.

무엇을 했는지

1. 함수명 충돌 수정 (파일간 하드에러 — 가드레일 §함수명충돌)

7개 라이브러리를 한 서버.한선에 동시 가져오기하면서 발견한 전역변수 재선언 충돌 3건 수정:
  • 브리핑.한선: 이미 저장소.한선을 import하면서 데이터루트/_페이지파일재선언하고 있었음(값은 같지만 파일간 재선언=하드에러). 재선언 제거, import된 값 재사용으로 변경.
  • 원장.한선: 데이터루트가 저장소.한선과 동일 이름으로 충돌 → 원장_데이터루트로 접두 분리.
  • 온보딩.한선: 데이터루트(저장소.한선과 충돌) + _설정파일(브리핑.한선과 충돌) → 온보딩_데이터루트/_온보딩설정파일로 분리.
수정 후 10개 소스(문자열/저장소/검색/브리핑/커넥터/원장/권한/온보딩/온보딩검증/컬렉션) 동시 가져오기 STRICT 컴파일 0경고 확인.

2. VM 함정 신규 실측 — 문자열 누산 + 무거운 사용자함수 인라인

json = json + ... + 무거운함수() + ... 패턴(가드레일에 기록된 "누산+무거운함수 인라인 금지"의 신규 실제 재현 사례)이 _처리부팅/_처리커넥터상태(커넥터_상태 4회 소켓 프로브 호출을 인라인 누산)와 _처리커맨드의 감사행 조립(저장소_PSV이스케이프 인라인)에서 재현됨 — 응답이 47바이트로 조용히 잘림(정상은 500+바이트). 모두 임시변수 선경유 패턴으로 수정 후 정상화 확인(curl로 전체 JSON 확인).

3. API 7종 결선 (계약 §3)

  • GET /api/검색: 검색_질의 → _JSON최상위배열분해(신규 헬퍼, 따옴표/중첩 인지 브래킷카운팅) → 권한_검색필터 → _JSON배열합치기
  • GET /api/브리핑: 브리핑_할일생성+브리핑_일정생성 + 커넥터_상태("tele") 확인 후 브리핑_조립
  • GET /api/커넥터상태: 4종 라이브 프로브(_커넥터상태JSON 신규 헬퍼)
  • GET /api/결재함: nexus 프로브로 연결여부 확인 + 목 2건(실 결재조회 API 미결선, "끊김" 필드로 정직 반영 — 성공 위장 금지)
  • POST /api/커맨드: 화이트리스트(커넥터_커맨드허용) → blockRef 있으면 권한_확인(edit) → 커넥터_커맨드 → 감사.psv append → wiki.publish 성공 시 원장_적립(100)
  • GET /api/원장: 원장_사용자JSON (쿼리키 "사용자")
  • POST /api/온보딩: 온보딩검증_실행(선검증) → 온보딩_적용(설정.psv 기록) → 온보딩_생성목록 → 저장소_페이지생성 순회(제목→id 맵으로 부모 해석)
또한 _처리부팅의 커넥터상태를 하드코딩 stub에서 실 프로브로 교체, _처리페이지저장/_처리페이지생성/온보딩 페이지 생성 경로에 검색_색인갱신 결선(이전엔 검색 인덱스가 전혀 채워지지 않는 구조였음).

4. 기본 권한 시드 (신규 발견 갭)

권한.한선은 설계상 default-deny — 최초 부팅 시 권한.psv가 비어있으면 게스트를 포함한 모든 사용자가 어떤 페이지도 view 불가(검색 결과 항상 [], blockRef 커맨드 항상 403). 서버.한선 부트스트랩에서 *|스페이스|default|edit 1건이 없으면 최초 1회 권한_부여("*","스페이스","default","edit") 시드 추가(이후 관리자가 명시 권한으로 오버라이드 가능).

스모크 결과 (라이브 실측, 서버 기동 → 검증 → 정상 종료)

라우트방식상태비고
/GET20019980B
/demoGET20019980B
/barGET20024354B
/setupGET20021937B
/legacyGET200510B
/healthGET200
/api/부팅GET200페이지트리+4종 커넥터 라이브 상태
/api/검색?q=TodayGET200권한 시드 후 2건(seed_today 등)
/api/브리핑GET200
/api/커넥터상태GET200space/nexus/cad/tele 전부 연결:true(로컬 4서비스 기동중)
/api/결재함GET200목 2건 + 끊김:false(nexus 연결 확인됨)
/api/원장?사용자=guestGET200적립 전 0 → wiki.publish 커맨드 후 100 확인
/api/커맨드 (space/iot.scene.run)POST200감사.psv 기록 확인
/api/커맨드 (evil.hack)POST400화이트리스트외 정상 거부
/api/커맨드 (wiki.publish)POST200원장_적립 100 확인(잔액 0→100→200 누적)
/api/온보딩POST200페이지.psv에 조직/스페이스/Notes·Tasks·Wikis 실제 생성 확인
서버 종료 확인: lsof -ti:9620 빈 결과(고아 프로세스 없음).

관련 파일

  • /Users/ef/crowny-canvas/한선씨/서버.한선 (결선 본체)
  • /Users/ef/crowny-canvas/한선씨/브리핑.한선 /원장.한선 /온보딩.한선 (이름충돌 수정)
  • 나머지 라이브러리(검색/커넥터/권한/온보딩검증/컬렉션.한선)는 무수정 — 그대로 가져오기만 함

잔여 이슈

  • POST /api/커맨드 사용자는 "guest" 하드코딩(세션 인증 미결선) — 인증 결선 시 실 사용자로 교체 필요
  • /api/결재함은 nexus 실 결재조회 API가 없어 항상 목 2건(연결여부만 정직 반영) — nexus측 API 확정 시 실데이터 결선 필요
  • 검색 색인은 서버.한선의 페이지 저장/생성/온보딩 경로에서만 갱신됨(저장소.한선 자체는 색인을 모름) — 향후 저장소.한선에 새 쓰기 경로 추가 시 서버.한선에서도 색인갱신 호출 잊지 말 것