SQLite 내부: 파일 이름 지정

발행: (2026년 1월 13일 오전 04:26 GMT+9)
6 min read
원문: Dev.to

Source: Dev.to

One Database, One File

SQLite 데이터베이스는 본질적으로 하나의 파일입니다.

메타데이터가 들어 있는 디렉터리도 없고, 별도의 백그라운드 데몬이 상태를 관리하지도 않습니다.

데이터베이스는 그 파일 자체이며, 그 이상도 이하도 아닙니다.

애플리케이션이 sqlite3_open으로 데이터베이스를 열 때는 단순히 파일 이름을 전달합니다:

  • 현재 작업 디렉터리를 기준으로 한 상대 경로, 혹은
  • 파일 시스템 루트부터 시작하는 절대 경로.

운영 체제가 허용하는 모든 파일 이름이 유효합니다. SQLite는 자체적인 이름 규칙을 강제하지 않으며, 단 두 가지 특수한 경우만 예외입니다.

The Two Special Database Names

SQLite는 특정 “파일 이름”을 실제 경로가 아니라 신호로 취급합니다.

1. Temporary Databases (NULL or Empty Names)

sqlite3_open에 전달된 파일 이름이 다음 중 하나일 경우:

  • NULL 포인터
  • 빈 문자열 ("")
  • 공백 문자만으로 이루어진 문자열

SQLite는 임시 데이터베이스를 생성합니다. 내부적으로는 파일을 사용하지만 가능한 한 많은 데이터를 메모리에 보관하려고 합니다. 이러한 호출마다 각기 독립적인 임시 데이터베이스가 만들어지며, 공유나 재사용이 없습니다. 연결이 닫히면 SQLite가 자동으로 삭제하므로 이 데이터베이스는 일시적입니다.

2. In-Memory Databases (:memory:)

파일 이름이 정확히 ":memory:"인 경우, SQLite는 순수 메모리 전용 데이터베이스를 만듭니다:

  • 디스크에 파일이 생성되지 않음
  • 연결 간에 지속되지 않음

":memory:"를 두 번 열어도 같은 데이터베이스에 대한 두 핸들을 얻는 것이 아니라, 프로세스 주소 공간에 존재하는 완전히 독립적인 두 데이터베이스를 얻게 됩니다. 임시 데이터베이스와 마찬가지로 연결이 닫히면 사라집니다.

How SQLite Names Temporary Files

SQLite가 임시 파일을 만들 때는 이름을 무작위로 선택합니다:

  • 접두사: etilqs_
  • 뒤에 16개의 무작위 영숫자 문자
  • 파일 확장자 없음

컴파일 시 SQLITE_TEMP_FILE_PREFIX 매크로를 사용해 접두사를 바꿀 수 있습니다.

기본적으로 SQLite는 다음 순서대로 임시 디렉터리를 찾습니다:

  1. /var/tmp
  2. /usr/tmp
  3. /tmp

TMPDIR 환경 변수를 설정하면 이 동작을 재정의할 수 있습니다.

임시 파일은 정상적으로 닫히면 삭제됩니다. 애플리케이션이나 시스템이 충돌하면 파일이 남아 있을 수 있는데, 이는 무해하지만 고아 파일이 됩니다.

Main and Temp Databases: Two Names You Should Know

각 SQLite 연결에는 최소 두 개의 내부 데이터베이스가 존재합니다:

  • main – 열었던 기본 데이터베이스 파일
  • temp – 해당 연결에 연결된 별도 임시 데이터베이스

이들은 내부 이름이며 파일 이름이 아니라 SQL에서 의미를 가집니다. 예를 들어:

SELECT * FROM temp.table1;

위 쿼리는 메인 데이터베이스가 아니라 임시 데이터베이스table1을 조회합니다.

각 SQLite 라이브러리 연결은 자체적인 임시 데이터베이스를 가집니다. 두 연결이 같은 메인 데이터베이스 파일을 열더라도, 각각의 임시 데이터베이스는 완전히 격리됩니다.

임시 데이터베이스는 처음으로 임시 객체를 만들 때 디스크에 실제 파일로 구현됩니다. 예:

CREATE TEMP TABLE table1 (...);

연결이 닫히면 SQLite는 자동으로 임시 데이터베이스 파일을 삭제합니다. 임시 데이터베이스의 구조는 메인 데이터베이스와 동일한 페이지 레이아웃과 내부 조직을 가집니다. 이러한 임시 파일을 직접 이름을 바꾸거나 삭제·수정하는 것은 즉시 손상을 초래할 수 있으며, SQLite는 파일에 대한 독점적인 제어를 기대합니다.

References

Back to Blog

관련 글

더 보기 »

SQLite에서 기본을 넘어선 저널

소개 안녕하세요, 저는 마네시와르입니다. 현재 저는 FreeDevTools 온라인을 구축하고 있습니다 – 모든 개발자 도구, 치트 코드, 그리고 TL;D를 모아 놓은 무료 오픈‑소스 허브입니다.

SQLite 스토리지 심층 분석

안녕하세요, 저는 마네시와르입니다. 저는 FreeDevTools 온라인 https://hexmos.com/freedevtools 를 개발하고 있습니다 – 모든 dev tools, cheat codes, 그리고 T... 를 모아 놓은 무료 오픈소스 허브입니다.