크라우니캔버스 컬렉션(DB) 엔진 — F4 구현
개요
크라우니캔버스(canvas.crowny.org:9620) 계약 F4 모듈. 노션형 "컬렉션(데이터베이스)" 블록의
스키마·레코드·뷰·외부바인딩을 담당하는 독립 컴파일 한선씨 라이브러리.
무엇을 했는지
한선씨/컬렉션.한선 신규 작성(함수 전부 컬렉션_ 접두, 독립 컴파일 — 다른 신규 라이브러리 미가져옴, 문자열.한선만 사용)
- 스키마: 컬렉션 생성 + 속성 추가(제목/텍스트/숫자/선택/사람/날짜/체크) + 순서 보장 속성 목록
- 레코드 CRUD: 생성/조회/수정/삭제(소프트, append-log latest-wins PSV), 필드는 플랫 JSON({"속성":"값"}) 저장
- 뷰: 테이블/보드/리스트 종류 + 단일조건 필터 + 정렬(속성/asc·desc) 저장·적용(
컬렉션_뷰적용)
- 합계: 숫자 속성 sum(
컬렉션_합계/컬렉션_전체합계) — 예산 테이블 자동 재산출용
- 외부바인딩 선언:
{커넥터, 데이터셋, 매핑, 쓰기정책:'커맨드만'} 저장/조회 (코어는 연동을 모른다 원칙 — 실제 쓰기는 커넥터.한선 F6이 담당)
- 셀프테스트(환경변수 게이트
CANVAS_COLLECTION_SELFTEST=1): 스키마 생성→레코드 3건→필터·정렬·합계·뷰·바인딩 8단계 assert 전부 PASS
실측
CROWNY_STRICT=1 ./hanseonc_high 컬렉션.한선 → 0경고, 13226 큐브 생성
CANVAS_COLLECTION_SELFTEST=1 ./crownyc run → 8/8 PASS(속성순서·레코드3건·필터2건·정렬3건·합계250000·뷰2건·바인딩정책)
- 발견/수정한 VM 함정:
포함하나()는 참=1/거짓=-1(0 아님) — 유니크ID목록에서 ==0으로 잘못 짜 전체 조회가 0건 회귀. ==-1로 수정 후 통과. (가드레일에 이미 기재된 규칙, 실사용 중 재확인)
관련 파일
/Users/ef/crowny-canvas/한선씨/컬렉션.한선
- 참조 정본 패턴:
/Users/ef/crowny-canvas/한선씨/저장소.한선(PSV append-log latest-wins), /Users/ef/crowny-canvas/한선씨/검색.한선(독립 컴파일+셀프테스트 게이트 관용구)
잔여 이슈
- 결선 단계(서버.한선)에서
/api/컬렉션* 라우트 및 F6 커넥터.한선과의 바인딩 실제 동기화 미연결(본 모듈은 F4 단독 범위)
- 필터는 단일조건만(다중 AND/OR 조건은 후속 확장 여지, 뷰 필터JSON 스키마는 확장 가능하게 설계)
- 레코드/속성 규모가 커지면(수백+) 삽입정렬 O(n²)이 부담 — 현재는 소규모 컬렉션 전제