데이터베이스/SQLite 직접 만들어보기

    SQLite 직접 만들어보기 Step 3 - 메모리에서만 동작하는 단일 테이블 DB 만들어보기

    원본 글 https://cstack.github.io/db_tutorial/parts/part3.html 많은 제약이 걸려있는 DB 구성해보기 종래엔 복잡한 DB 가 완성되어 있겠지만 시작할 땐 작게 개발을 시작하는 전략을 사용한다. start small 어떤 제약이 걸리게 되는가? 단 두가지 연산만 지원한다. insert: 행을 삽입한다. select: 모든 행을 출력한다. 오직 메모리에만 데이터를 올린다. 디스크에 영속화 시키지 않는다. 하드코딩된 단 하나의 테이블만 제공한다. 하드코딩된 단일 테이블의 구조 id: integer username: varchar(32) email: varchar(255) 앞으로 사용할 insert 명령어의 구성 insert 1 jakeseo foo@bar.com 앞에서..

    SQLite 직접 만들어보기 Step 2 - 세상에서 가장 간단한 SQL 컴파일러와 가상머신 만들어보기

    원본 글 https://cstack.github.io/db_tutorial/parts/part2.html SQLite 의 앞단 (front-end) SQLite 의 앞단은 문자열을 구문 분석(parsing) 하고 바이트 코드라는 내부 표현을 뱉어내는 SQL 컴파일러이다. 바이트 코드는 가상 머신(virtual machine) 으로 넘어가 가상 머신에 의해 실행된다. 다시 아키텍처 살펴보기 SQLite 공식 사이트에서 제공하는 아키텍쳐 문자열을 먼저 바이트 코드로 만든 뒤에 바이트 코드를 가상머신에서 실행하는 2가지 절차를 따르면 무슨 장점이 있을까? 2가지 파트를 각각 구현하기 때문에 각 파트에 대한 복잡도를 낮출 수 있다. 가상 머신은 SQL 문법 에러에 대해 걱정하지 않아도 된다. 일반 쿼리를 한번 ..

    SQLite 직접 만들어보기 Step 1 - 매우 간단한 REPL 만들어보기

    원본 글 https://cstack.github.io/db_tutorial/parts/part1.html DB 동작에서 의문점 디스크와 메모리에서 데이터는 어떤 포멧으로 저장되는가? 데이터는 언제 메모리에서 디스크로 이동하는가? 테이블당 기본키 (primary key) 는 왜 하나여야만 하는가? 트랜잭션 롤백은 어떻게 동작하는가? 인덱스는 어떻게 포맷되는가? 풀 테이블 스캔 (full table scan) 은 언제 어떻게 수행되는가? prepared statement 는 어떤 포맷으로 저장되는가? SQLite SQLite 는 작고 내부 구현에 대한 참고자료도 풍부해 공부하기 좋다. 프론트엔드 (front-end) 토크나이저 (tokenizer) 파서 (parser) 코드 생성기 (code generato..

    SQLite 직접 만들어보기 Step 0 - SQLite 아키텍처 살펴보기

    SQLite 직접 만들어보기 Step 0 - SQLite 아키텍처 살펴보기 SQLite 아키텍처 다이어그램 개요 SQLite 의 동작을 간단히 설명하자면, SQL 텍스트 정보를 바이트 코드로 컴파일하고 가상 머신에서 바이트코드를 동작시킨다. sqlite3_prepare_v2() 는 인터페이스로 SQL 텍스트를 바이트코드로 변환시키는 컴파일러 역할을 한다. sqlite3_stmt 객체는 단일 SQL 문을 구현하는 바이트코드 프로그램에 대한 컨테이너이다. sqlite3_step() 인터페이스는 바이트코드 프로그램을 가상머신으로 넘기고 프로그램이 완료될 때까지 실행한다. 완료의 의미는 아래 3가지 중 하나이다. 결과를 반환한다. 에러를 던진다. 인터럽트 된다. 인터페이스 (Interface) 아키텍처 그림에서..

반응형