왜 나는 Raw C++로 데이터베이스를 처음부터 만드는가 (그리고 STL을 금지한 이유)
Source: Dev.to
내가 학습하던 방식의 문제점
오랫동안 나는 코드가 동작한다는 사실만 알았을 뿐, 왜 동작하는지 전혀 몰랐습니다. 흥미로운 부분을 모두 가려버리는 추상화, API, 라이브러리를 사용했죠. 무언가를 만들 수는 있었지만 메모리, 디스크, 혹은 하드웨어 수준에서 실제로 무슨 일이 일어나고 있는지 설명할 수 없었습니다. 그 점이 마음에 걸렸습니다.
NanoDB가 실제로 무엇인지
NanoDB는 그 문제를 해결하기 위한 나의 시도입니다. 단계별로 구축하고 있는 맞춤형 스토리지 엔진입니다:
- Phase 0 — 순수 C++ 기본, 안전망 없음
- Phase 1 — 페이지 매니저, 순수 디스크 I/O
- Phase 2 — LRU 교체를 갖춘 버퍼 풀
- Phase 3 — 힙 파일 및 튜플 레이아웃
- Phase 4 — B+ 트리 인덱스
- Phase 5 — 쿼리 레이어
- Phase 6 — Write Ahead Log
- Phase 7 — 2PL을 이용한 동시성
- Phase 8 — 벤치마킹 및 연구 문서화
현재 나는 Phase 0에 있습니다. 아직 진행 상황을 과장하지 않을 겁니다.
왜 STL을 금지했는가?
STL은 아직 겪어보지 못한 문제들을 이미 해결해 주기 때문입니다. 동적 메모리 할당을 이해하기도 전에 std::vector를 사용한다면, std::vector가 실제로 무엇을 하는지 전혀 배우지 못합니다. 이 제한은 추상화가 숨기고 있던 고통을 직접 느끼게 합니다. 그 고통이 바로 교육이기 때문이죠.
왜 코드를 작성하기 전에 지금 이 글을 쓰는가?
책임감 때문입니다. 그리고 “왜”가 “무엇”만큼이나 중요하기 때문이죠. 여기서 모든 단계를 기록할 겁니다 — 내가 만든 것, 부러진 것, 배운 것, 그리고 혼란스러웠던 것. 다듬어진 성공 스토리는 없습니다. 오직 거친 과정만 있을 뿐입니다.
시스템 프로그래밍이나 저수준 C++을 탐구하고 있다면 함께 따라와 주세요. 함께 해결해 나갈 수 있을 겁니다.
Phase 0이 지금 시작됩니다. ⚔️