예전에 Mapbox에서 MBTiles 포맷을 만들었음
당시 iPad용 오프라인 맵을 연구 중이었는데, 수많은 작은 PNG 타일(256px)을 USB나 네트워크로 옮기는 게 너무 번거로웠음
그래서 타일을 SQLite에 묶어 저장했더니 이동도 쉽고 체크섬 관리도 간단해졌음
타일은 X, Y, Z(줌 레벨)로 인덱싱되어 관계형 DB에서 다루기 쉬웠고, iPad에서는 파일 확장자와 메타데이터를 이용해 앱 아이콘까지 붙일 수 있었음
파일 포맷을 직접 만드는 건 두려웠지만, DB는 익숙했기에 CLI 도구를 만들어 다양한 언어에서 쉽게 다룰 수 있었음
.zip, .tar, sqlite, 파일 시스템을 비교 테스트했는데, sqlite가 가장 압축률이 높고 오버헤드가 적었음
MBTiles 포맷을 정말 사랑함, 만들어줘서 고맙다는 인사
SQLite는 앱 포맷으로 정말 놀라운 존재임
수많은 도구가 SQLite 데이터를 읽을 수 있고, CLI만으로도 데이터 작업이 매우 편리함
20년 넘게 존재하며 세계에서 가장 테스트가 많이 된 소프트웨어 중 하나임
단순하면서도 강력하고 신뢰성이 높아, 장기적인 데이터 보존 측면에서 SQLite를 파일 포맷으로 쓰는 건 최고의 선택이라 생각함
나도 SQLite를 비슷하게 사용하고 있음 Internet-Places-Database 프로젝트에서 HTML UI를 사용했는데, 부트스트랩 컴포넌트 덕분에 별도 설치 없이 누구나 접근 가능했음
모든 데이터는 하나의 SQLite 파일에서 읽고 반환함
DB가 커서 탐색이 느리긴 하지만, 검색 범위를 제한하는 효율적인 탐색 방식을 고민 중임
예전에 데스크톱 블로깅 앱을 만들 때 SQLite를 사용했음
블로그 기본 구조를 만들어 파일로 가족에게 전달하면, 그들은 글 작성과 배포만 하면 되었음
관련 내용은 이 블로그 글에 정리되어 있음
대부분의 앱 파일 포맷은 트리 구조지만, 데이터가 평면 테이블 형태라면 SQLite가 명확한 선택임
트리 구조라면 JSON을 blob으로 저장할 수도 있지만, 그 경우 이점이 줄어듦
하지만 이미지나 바이너리 데이터가 함께 있다면 SQLite가 훨씬 유리함 — ZIP보다 다루기 쉬움
데이터베이스 정규화에 익숙하지 않아도 트리 구조를 외래 키 관계로 평면화하는 건 어렵지 않음
SQLite는 재귀 쿼리도 지원하므로 자기참조 데이터도 깔끔히 표현 가능함
JSON blob을 TEXT 필드에 넣는 건 간단하지만, 마이그레이션과 인덱싱 같은 SQL의 장점을 잃게 됨
관계형 저장의 핵심은 데이터를 한 문서 단위로 보지 않고 다양한 관점에서 추출할 수 있게 하는 것임
대부분의 데이터는 겉보기엔 계층적이지만, 이를 여러 단면으로 자르면 관계형 구조가 됨
다만 프로그래밍 언어에서 관계형 타입이 잘 표현되지 않아 아쉬움이 있음
JSON 데이터를 주석 달기 위한 인터페이스가 필요해서 Codex에게 SQLite 기반 웹서버를 만들어달라 했더니 금방 완성됨
SQLite는 JSON 유사 객체에 대한 쿼리도 지원함
다만 CLI가 너무 미니멀해서 좀 더 나은 도구를 썼어야 했다고 느낌
SQLite에서는 여러 테이블을 만들고 참조 관계를 설정할 수 있음
심지어 재귀 참조도 가능함
우리 팀은 UAT 환경에서 운영 환경으로 설정을 옮길 때 SQLite를 사용함
설정이 이미 Postgres 테이블에 저장되어 있어서, 일부 설정을 SQLite 파일로 옮기면 간단히 배포 가능함 바이너리 포맷이라 실수로 수정될 위험도 줄어듦
반대로 운영 데이터를 테스트용으로 내보낼 때도 SQLite 파일로 쉽게 인코딩할 수 있음
어릴 때 WinRAR로 게임이나 프로그램 파일을 열어 숨겨진 리소스를 찾아보던 기억이 있음