글 목록으로 돌아가기

데이터베이스

SQL 처리기 구현

Week 6 Project C로 구현한 파일 기반 SQL 처리기 프로젝트 입력된 SQL을 파싱하고 실행해 실제 파일에 반영하는 작은 SQL Processor를 직접 구현했다. 프로젝트 한 줄 소개 이번 프로젝트에서는 C 언어로 파일 기반 SQL 처리기

임재환
임재환 2026년 4월 9일 · 3분 읽기 · 수정 2026년 4월 9일
SQL 처리기 구현

Week 6 Project

C로 구현한 파일 기반 SQL 처리기 프로젝트

입력된 SQL을 파싱하고 실행해 실제 파일에 반영하는 작은 SQL Processor를 직접 구현했다.

프로젝트 한 줄 소개

이번 프로젝트에서는 C 언어로 파일 기반 SQL 처리기(SQL Processor)를 구현했다. 목표는 단순히 SQL 문법을 읽는 데서 끝나는 것이 아니라, 입력된 SQL을 파싱하고 실행해 실제 CSV 파일에 반영하는 전체 흐름을 만드는 것이었다.

특히 이번 과제는 학습보다는 구현이 우선이었기 때문에, AI를 적극적으로 활용해 빠르게 기능을 완성하되, 핵심 로직은 직접 이해하고 설명할 수 있는 수준까지 정리하는 데 집중했다.

1. 프로젝트 목표

이번 과제의 핵심은 아래 흐름을 하나의 프로그램으로 완성하는 것이었다.

입력(SQL) → 파싱 → 실행 → 저장
  • CLI(Command Line Interface)를 통한 SQL 입력 처리
  • INSERT, SELECT SQL 파싱
  • 파싱 결과를 기반으로 한 실행 로직
  • 파일 기반 데이터 저장소 설계
  • schema와 table이 이미 존재한다고 가정한 구조 처리

2. 요구사항 기준으로 정리한 구현 내용

2-1. CLI 기반 SQL 입력 처리

텍스트 파일로 작성된 SQL문을 Command Line에서 전달할 수 있도록 구현했다. SQL 파일 경로를 넘겨 실행할 수 있고, SQL 문자열 자체를 직접 인자로 입력하는 방식도 함께 지원했다.

sqlparser.exe .\examples\select_all_users.sql
sqlparser.exe "SELECT name, age FROM student;"

과제에서 요구한 “텍스트 파일 기반 SQL 전달” 조건을 충족하면서, 실제 사용 편의성을 위해 직접 입력 방식도 확장했다.

2-2. SQL 파싱 구현

입력된 SQL 문장을 구조화하기 위해 Lexer와 Parser를 분리해 구현했다. 먼저 Lexer가 SQL을 토큰 단위로 분리하고, 이후 Parser가 이를 읽어 문장의 의미를 해석한다.

  • INSERT
  • SELECT

파싱 결과는 AST(Abstract Syntax Tree) 구조체에 담아 실행 단계에서 활용할 수 있도록 구성했다.

2-3. Execution 구현

파싱된 결과를 실제 동작으로 연결하는 실행 모듈도 구현했다. 이 부분이 SQL 처리기의 핵심 역할을 담당한다.

  • INSERT: 파싱된 컬럼/값 정보를 바탕으로 파일에 데이터 추가
  • SELECT: 파일에서 데이터를 읽고 요청한 컬럼을 출력

2-4. File 기반 DB 설계

데이터 저장 포맷은 자유 설계가 가능했기 때문에, 구현과 디버깅이 쉬운 CSV 형식을 선택했다.

  • schema/<table>.meta : 테이블 구조 정보
  • data/<table>.csv : 실제 데이터
table=student
columns=id,department,student_number,name,age

3. INSERT와 SELECT는 어떻게 동작하게 만들었나

INSERT 처리

INSERT 실행 시에는 먼저 schema를 읽어 컬럼 구성을 확인한 뒤, 입력된 값을 올바른 순서에 맞춰 CSV의 새 행으로 추가하도록 구현했다.

  • 입력 컬럼 수와 값 수 일치 여부 확인
  • 존재하지 않는 컬럼 사용 방지
  • 부분 컬럼 INSERT 지원
  • 비어 있는 컬럼은 빈 문자열로 채우기

SELECT 처리

SELECT 실행 시에는 CSV 파일을 읽어 헤더를 기준으로 컬럼 위치를 찾고, 사용자가 요청한 컬럼만 골라 출력하도록 만들었다.

  • SELECT * FROM table; 지원
  • SELECT col1, col2 FROM table; 지원
  • 컬럼 헤더와 함께 결과 출력

4. 내부 구조 설계

프로젝트는 Top-down으로 이해하고 확장하기 쉽도록 기능을 모듈 단위로 분리했다.

main
입력 처리와 전체 실행 흐름 연결
lexer
SQL 문자열 토큰화
parser
SQL 문장 구조 해석
ast
파싱 결과 저장
executor
INSERT / SELECT 실행
schema
테이블 구조 검증
storage
CSV 읽기/쓰기

5. 추가 구현 요소

기본 요구사항을 충족하는 데서 끝나지 않고, 차별화 요소도 일부 반영했다.

  • SQL 파일 입력뿐 아니라 SQL 문자열 직접 실행 지원
  • 간단한 interactive CLI 모드 지원
  • 부분 컬럼 INSERT 지원
  • CSV escape 처리로 쉼표와 따옴표 포함 값 저장 가능
  • 한글 식별자와 별칭 기반 테이블 처리 확장

6. 이번 프로젝트에서 중요했던 점

이번 과제는 단순히 결과물을 제출하는 것이 아니라, AI가 만든 코드까지 포함해 결국 내 코드처럼 이해하고 설명할 수 있어야 한다는 점이 중요했다.

그래서 구현 과정에서는 AI를 활용해 빠르게 초안을 만들고 구조를 확장했지만, 최종적으로는 입력된 SQL이 어떤 단계로 처리되는지, 왜 Parser와 Executor를 분리했는지, 왜 CSV를 선택했는지까지 직접 설명할 수 있도록 정리했다.

마무리

이번 SQL 처리기 프로젝트에서는 요구사항에 맞춰 CLI 입력, SQL 파싱, 실행 로직, 파일 기반 저장 구조를 모두 직접 연결했다. CREATE TABLE 같은 고급 기능은 제외했지만, 대신 최소 요구사항인 INSERT와 SELECT를 끝까지 동작하도록 완성하는 데 집중했다.

작은 범위의 SQL 엔진이지만, 입력된 SQL이 실제 데이터 파일에 반영되는 흐름을 직접 구현해보면서 DB 처리기의 핵심 구조를 훨씬 선명하게 이해할 수 있었다. 구현 우선의 과제였던 만큼, AI를 활용해 빠르게 만들고 동시에 핵심 로직은 스스로 설명할 수 있게 정리한 점이 이번 프로젝트의 가장 큰 의미였다.