콘텐츠로 이동

(KO) CUBRID 코드 분석 커버리지 — 어디까지 정리되었고 어디가 비어 있는가

이 문서가 하는 일과 하지 않는 일

섹션 제목: “이 문서가 하는 일과 하지 않는 일”

이 문서는 knowledge/code-analysis/cubrid/의 커버리지 맵이다. 답하는 질문은 하나뿐이다. 지금까지 무엇을 썼고, 어디가 아직 비어 있는가.

이 문서는 일부러 다음을 피한다.

  • 문서별 요약을 모은 카탈로그가 아니다. 그 역할은 README.md가 맡는다. 카탈로그는 각 문서의 frontmatter summary: 필드에서 자동으로 생성된다.
  • 시스템의 아키텍처 맵도 아니다. 그쪽은 cubrid-architecture-overview.md에 있다. 거기에는 축마다 Mermaid 다이어그램 한 장과 모든 세부 문서로 가는 cross-ref가 들어 있다.
  • CUBRID 소스 파일을 빠짐없이 나열하지도 않는다. 여기서 추적하는 단위는 서브시스템이다. 어떤 서브시스템에 전용 세부 문서가 있거나 overview 문서의 명명된 절로 다뤄지면 covered로 친다. 함수나 구조체 단위의 빈 자리는 추적하지 않는다.

다음 분석 배치를 잡을 때, 또는 X는 이미 문서가 있나?라는 물음에 한 화면으로 답해야 할 때 이 문서를 펴면 된다.

지금까지 EN 세부 문서 약 85편과 서브카테고리 overview 8편이 다음을 덮는다. 스토리지 엔진, 쿼리 파이프라인, 트랜잭션·복구 축, 분산·HA 계층, DDL·스키마, 두 PL 런타임(JavaSP, PL/CSQL), 그리고 대부분의 횡단 인프라. 한국어 미러는 knowledge/ko/code-analysis/cubrid/ 아래에서 EN 트리를 따라간다.

서브시스템 단위로 보면 남은 빈 자리는 없다. 유틸리티와 admin CLI 클러스터(csql, cubrid admin verb들, cub_master 데몬, unloaddb·loaddb·compactdb·backup-restore, checksumdb, migrate, loadjava, 그리고 작은 standalone 도우미들)도 모두 들어왔다. PL 패밀리는 세 형제 문서(javasp, plcsql, server-bridge)로 마무리되었다. 나머지 서브시스템(스토리지, 쿼리, 트랜잭션, 카탈로그·DDL, 분산·HA, i18n)은 이전 배치들에서 이미 정리된 상태다.

남은 항목은 모두 covered이거나, 마지막 절에 적어 둔 다루지 않는 항목에 속한다.

Covered. 프로세스 모델과 broker / CAS / server fan-in (cubrid-overview-server-architecture.md, cubrid-broker.md, cubrid-server-session.md, cubrid-network-protocol.md, cubrid-thread-worker-pool.md, cubrid-thread-manager-ng.md, cubrid-sa-cs-runtime.md, cubrid-boot.md, cubrid-system-parameters.md, cubrid-error-management.md, cubrid-monitoring.md, cubrid-dbi-cci.md).

Open. 서브시스템 단위로는 없다. cub_master 데몬은 이제 자기 문서가 따로 있다. cubrid-master-process.md. 부팅 시퀀스, select-loop 연결 레지스트리, request opcode 디스패치, 그리고 옵션인 server_monitor C++ 자동 재시작 감독 모듈을 다룬다. 이 데몬 위에 얹히는 HA 복제 부분은 별도로 cubrid-heartbeat.md에 들어가 있다.

Covered. 계층 스택 전체 (cubrid-overview-storage-engine.md, cubrid-disk-manager.md, cubrid-page-buffer-manager.md, cubrid-double-write-buffer.md, cubrid-heap-manager.md, cubrid-btree.md, cubrid-extendible-hash.md, cubrid-overflow-file.md, cubrid-lob.md, cubrid-tde.md).

Open. 서브시스템 단위로는 없다. AREA 슬랩 풀은 한때 여기 있었지만, 이제는 아래의 베이스 / 인프라 절로 옮겨 갔다. 어느 한 계층에 묶이지 않고 누구나 가져다 쓰는 메모리 할당자 부품이지 스토리지 계층이 아니기 때문이다.

베이스 / 인프라 (메모리 할당기 + 락프리 자료구조)

섹션 제목: “베이스 / 인프라 (메모리 할당기 + 락프리 자료구조)”

Covered. (cubrid-overview-base-infra.md, cubrid-private-allocator.md, cubrid-common-area.md, cubrid-lockfree-overview.md, cubrid-lockfree-transaction.md, cubrid-lockfree-bitmap.md, cubrid-lockfree-circular-queue.md, cubrid-lockfree-freelist.md, cubrid-lockfree-hashmap.md).

다른 모든 섹션이 합성에 같이 쓰는 src/base/ 받침대를 묶는 자리다. 스레드별 Lea-힙 private 할당기, 고정 크기 객체용 AREA 슬랩 풀, 그리고 트랜잭션 회수 척추 위에 올라탄 락프리 6-문서 묶음.

Open. src/base/의 다른 후보(리소스 트래커, 커스텀 힙의 내부, mem_block 할당기 등)는 지금 cubrid-private-allocator.mdcubrid-common-area.md 안에서 인라인으로 다루고 있다. 별도 문서로 띄울 만한지는 열린 질문이다.

Covered. parse → execute 파이프라인 전체 (cubrid-overview-query-processing.md, cubrid-parser.md, cubrid-semantic-check.md, cubrid-query-rewrite.md, cubrid-query-optimizer.md, cubrid-xasl-generator.md, cubrid-xasl-cache.md, cubrid-query-executor.md, cubrid-query-evaluator.md, cubrid-scan-manager.md, cubrid-list-file.md, cubrid-scalar-functions.md, cubrid-external-sort.md, cubrid-hash-join.md, cubrid-post-processing.md, cubrid-runtime-memoization.md, cubrid-partition.md, cubrid-cursor.md, cubrid-serial.md, cubrid-parallel-query.md, cubrid-json-table.md, cubrid-show-commands.md).

end-to-end 합성은 cubrid-rpath-select.md에 모여 있다.

Open. 서브시스템 단위로는 없다. 메서드 호출이 SCAN_TYPE으로 들어오는 부분은 cubrid-scan-manager.md에서 짧게 다루었고, 그 아래에 깔린 콜백 프로토콜은 아래 PL 패밀리 절에서 다룬다.

Covered. ARIES 스타일 스택 전체 (cubrid-overview-txn-recovery.md, cubrid-mvcc.md, cubrid-vacuum.md, cubrid-lock-manager.md, cubrid-transaction.md, cubrid-log-manager.md, cubrid-prior-list.md, cubrid-checkpoint.md, cubrid-recovery-manager.md, cubrid-flashback.md).

end-to-end 합성은 cubrid-rpath-write.mdcubrid-rpath-recovery.md에 들어 있다.

Open. 서브시스템 단위로는 없다.

Covered. (cubrid-overview-ddl-schema.md, cubrid-catalog-manager.md, cubrid-class-object.md, cubrid-locator.md, cubrid-ddl-execution.md, cubrid-trigger.md, cubrid-statistics.md, cubrid-authentication.md).

Open. 서브시스템 단위로는 없다.

Covered. (cubrid-overview-replication-ha.md, cubrid-ha-replication.md, cubrid-heartbeat.md, cubrid-cdc.md, cubrid-2pc.md, cubrid-backup-restore.md).

Open. 서브시스템 단위로는 없다. checksumdb는 HA 무결성 검증 도구라서 자연스럽게 이 묶음에 어울리지만, 실행 파일이라 아래 유틸리티 절에 정리해 두었다.

Covered. (cubrid-overview-pl-language.md, cubrid-pl-javasp.md, cubrid-pl-plcsql.md, cubrid-pl-server-bridge.md).

PL 패밀리는 이제 세 형제 문서로 닫힌 집합이다. JavaSP와 PL/CSQL은 각자 자기 런타임 문서를 가지고, cubrid-pl-server-bridge.md는 두 런타임이 공유하는 실행 중 콜백 채널을 다룬다. 구체적으로는 METHOD_CALLBACK_* 오피코드 분류 체계, Path A의 CAS 측 cubmethod::callback_handler::callback_dispatch, Path B의 서버 측 cubpl::executor::response_callback_command, PL/CSQL이 임베디드 SQL 검증에 쓰는 GET_SQL_SEMANTICS / GET_GLOBAL_SEMANTICS 컴파일타임 round-trip, 재귀 가드, 그리고 tran_begin/end_libcas_function 묶음까지가 이 문서에 모인다. 기존 두 PL 문서는 콜백 관련 절에서 server-bridge로 cross-ref한다.

Open. 서브시스템 단위로는 없다. loadjava 유틸리티는 JAR을 카탈로그에 설치해 JavaSP가 찾을 수 있게 만드는 도구다. PL과 가깝지만 결국은 CLI 표면이라 아래 유틸리티 묶음으로 보냈다.

Covered. (cubrid-loaddb.md, cubrid-compactdb.md, cubrid-backup-restore.md, cubrid-csql.md, cubrid-cub-admin.md, cubrid-unloaddb.md, cubrid-master-process.md, cubrid-checksumdb.md, cubrid-migrate.md, cubrid-loadjava.md, cubrid-utilities-misc.md).

유틸리티 표면은 이제 빠진 곳이 없다. 네 개의 벌크 데이터 도구 (loaddb, unloaddb, compactdb, backup-restore), 사용자 대면 진입점 (csql, cub-admin), 데몬(master-process), HA 무결성 검증 (checksumdb), 9.1→9.2 in-place 업그레이더(migrate), JavaSP 설치기 (loadjava), 그리고 작은 standalone 도우미들을 한 데 묶은 옴니버스 (utilities-misc — commdb, gencat, generate_timezone, daemon, cubrid_version, pl bootstrap)까지 모두 자리를 잡았다.

Open. 서브시스템 단위로는 없다.

Covered. (cubrid-overview-i18n-specialty.md, cubrid-charset-collation.md, cubrid-timezone.md).

Open. 서브시스템 단위로는 없다. 빌드타임 generate_timezone 도구는 위 utilities omnibus에 들어가 있다.

다루지 않는 항목 (의도적으로 다루지 않는 항목)

섹션 제목: “다루지 않는 항목 (의도적으로 다루지 않는 항목)”

다음 항목은 전제가 바뀌지 않는 한 별도 문서를 두지 않는다.

  • dblink — 사용자의 명시적인 지시로 일부러 빠뜨렸다. cubrid-scan-manager.md(S_DBLINK 스캔 타입)와 cubrid-overview-query-processing.md에 언급은 두지만 세부 문서는 만들지 않는다.
  • 함수·구조체 단위 커버리지. 이 맵은 서브시스템 단위로만 본다. 어떤 함수나 구조체에 설명이 빠져 있는지는 추적하지 않는다. 그 자리는 문서별 position-hint 표가 정규 심볼들을 이미 고정해 둔다.
  • 3rdparty/, win/, demo/, msg/, locales/, debian/, .circleci/, .github/ — 엔진의 표면적이 아니다.
  • 단위 테스트 실행 파일 (src/executables/ 아래 unittests_*.c) — 테스트가 검증하는 엔진 쪽 불변량은 해당 서브시스템 문서에 들어가야 한다. 테스트 하네스 자체에 관한 문서를 따로 두지는 않는다.

새 문서가 들어왔을 때.

  1. 적절한 Covered 줄에 추가한다(같은 줄 안에서는 알파벳순).
  2. 매칭되는 Open 항목에서 빼낸다.
  3. 여기서 updated:를 갱신한다. 이중언어 규칙에 따라 KO 미러도 같이 손본다.
  4. /kb-index knowledge/code-analysis/cubrid를 다시 돌려 README.md를 새로 생성한다.

소스 트리에 새 서브시스템이 나타났을 때.

  1. 그루핑을 정한다. 보통 위 여덟 개 절 가운데 하나에 들어간다.
  2. 소스 경로와 계획 중인 문서 슬러그를 적은 Open 항목을 만든다.
  3. 실제로 문서가 들어오기 전에는 Covered로 올리지 않는다.

다루지 않던 항목이 다루기로 바뀌었을 때(예: dblink에 문서를 붙이기로 한 경우).

  1. 해당 항목을 다루지 않는 항목에서 매칭되는 절의 Open 줄로 옮기고, 무엇이 바뀌어서 그렇게 되었는지를 한 줄로 적어 둔다.
  • README.md — 문서별 카탈로그(자동 생성).
  • cubrid-architecture-overview.md — 프로세스 모델, 계층 스택, 모든 세부 문서로 가는 cross-ref.
  • cubrid-design-philosophy.md — 코드베이스의 모양을 설명하는 13가지 아키텍처 결정.
  • knowledge/methodology/code-analysis-doc.md — 이 세부 문서들이 따라 쓰는 플레이북.