TinyDB로 구성하는 Python 로컬 JSON 데이터 저장소

TinyDB의 JSON 기반 저장 구조와 Python API, 스토리지 확장 방식, SQLite와의 차이, 운영 시 유의할 점을 정리한다.

2026-08-14 · 최초 발행 2025-10-14

JSON 파일을 바로 데이터 저장소로 쓰는 TinyDB

TinyDB는 JSON 파일에 데이터를 저장하고 조회하는 Python 기반의 문서 지향 NoSQL 데이터베이스다. 별도 서버나 복잡한 초기 설정 없이 애플리케이션 내부에서 데이터를 다룰 수 있어, 경량 프로젝트와 로컬 스토리지, 프로토타입 개발에 맞는다.

데이터는 JSON으로 직렬화되므로 파일을 옮기거나 내용을 확인하기 쉽다. Pythonic한 쿼리 인터페이스를 제공하며, 커스텀 스토리지 엔진과 미들웨어를 연결할 수 있는 플러그인 구조도 갖췄다. 수백 KB 단위의 파일에서도 동작할 수 있어 소형 프로젝트에 적합하다.

API 호출부터 JSON 저장까지의 경로

TinyDB API 호출애플리케이션Query / TableStorage InterfaceJSON 파일

애플리케이션의 TinyDB API 호출은 Query 객체와 Table 계층에서 처리되며, 스토리지 인터페이스를 거쳐 JSON 파일에 저장하거나 조회한다.

로컬 데이터가 필요한 자리

TinyDB는 데스크톱 애플리케이션의 설정 데이터를 저장하거나, CLI 도구의 로컬 캐시와 메타데이터를 관리할 때 쓸 수 있다. PyQt·Tkinter 기반 앱, IoT 디바이스의 단순 센서 데이터 저장, 초기 데이터 구조를 빠르게 실험해야 하는 프로토타입이 대표적인 적용 범위다.

Python에서 기본 CRUD 수행하기

from tinydb import TinyDB, Query

# DB 연결
db = TinyDB('db.json')

# 데이터 삽입
db.insert({'name': 'Alice', 'age': 25})
db.insert({'name': 'Bob', 'age': 30})

# 데이터 조회
User = Query()
results = db.search(User.age > 26)
print(results)  # [{'name': 'Bob', 'age': 30}]

# 데이터 업데이트
db.update({'age': 26}, User.name == 'Alice')

# 데이터 삭제
db.remove(User.name == 'Bob')

스토리지 구현은 교체할 수 있다. 다음 예시는 메모리 기반 DB를 사용하는 방식이다.

from tinydb.storages import MemoryStorage
db = TinyDB(storage=MemoryStorage)  # 메모리 기반 DB

운영 환경에서 확인할 제약

대량 데이터가 수십 MB 이상으로 커지면 처리 속도가 저하될 수 있다. 멀티프로세스에서 동시에 접근하면 데이터가 손상될 가능성이 있으므로 Lock이 필요하다.

백업은 JSON 파일을 직접 복사하는 방식으로 가능하지만, 파일이 커질수록 관리 부담도 늘어난다. 파일 권한을 관리하고, 필요하다면 암호화를 적용해야 한다.

SQLite와 선택 기준이 갈리는 지점

구분 TinyDB SQLite
데이터 모델 NoSQL(문서형) SQL(관계형)
스토리지 JSON 파일 SQLite 파일
스키마 없음 고정 스키마
확장성 플러그인 구조 제한적
사용 난이도 매우 쉬움 중간
동시성 처리 약함 강함

초기 프로젝트에서는 DB 설계 부담을 줄이고, 서버나 DBMS 없이 로컬에서 운영할 수 있다. JSON 파일을 이용해 다른 시스템으로 옮기기도 쉽다. 반면 대규모 트래픽이나 복잡한 관계형 모델이 필요하다면 TinyDB는 적합하지 않다.

TinyDBPythonNoSQLJSON로컬 데이터베이스