Show HN: Capsule – 데이터를 SQLite에 저장하는 단일 파일 웹 앱
1. 이게 뭔가요?
이번 기사에서 소개하는 '캡슐'은 웹사이트를 만드는 데 쓰이는 HTML 파일과 그 안에서 다루는 데이터를 하나의 SQLite 파일이라는 단일 데이터베이스 안에 통째로 담아 관리할 수 있게 해주는 프로그램입니다. 여기서 HTML은 인터넷 브라우저에 화면을 보여주기 위한 기본 문서 형식을 뜻하고, SQLite는 컴퓨터나 스마트폰 같은 기기 안에 가볍게 저장하고 불러올 수 있는 파일 형태의 데이터베이스 관리 도구를 말합니다. 개발자는 캡슐을 통해 웹 화면뿐만 아니라 사용자가 입력한 데이터, PDF 파일, 이미지 같은 부가 자료까지 모두 한 파일에 묶어 둘 수 있습니다. 또한 이 데이터들은 필요할 때 일반적인 표 형식인 CSV나 텍스트 데이터 형식인 JSON으로 쉽게 내보낼 수 있으며, 문서 안에 들어가는 프로그램들이 컴퓨터의 파일 시스템을 마음대로 건드리지 못하게 막고 인터넷 연결에도 허락을 받도록 보안 장치를 두었습니다.
2. 왜 화제인가요?
기존에는 웹페이지를 만드는 과정 자체는 예전보다 훨씬 간단해졌지만, 사용자가 입력한 데이터를 따로 서버에 올려서 보관해야 하고 만든 결과물을 다른 사람과 공유하기도 번거로운 문제가 있었습니다. 캡슐은 화면을 보여주는 프로그램과 데이터를 별도의 서버에 나누어 두지 않고 하나의 파일로 합쳐서 이러한 불편함을 줄이려고 시도했다는 점이 특징입니다. 다만 여러 사람이 동시에 같은 파일을 수정하면 각각 다른 복사본이 생기기 때문에, 나중에 파일들을 서로 합칠 수 있도록 각 데이터마다 고유한 번호와 시간 기록을 남겨두는 방식을 적용했습니다. 이 프로그램은 아직 완성된 상태가 아니라 계속 다듬어 나가는 개발 과정에 있으며, 정식 버전인 1.0이 나올 때 파일 형식을 공개해 다른 프로그램도 읽고 쓸 수 있게 만들 계획입니다.
3. 핵심 내용
안녕하세요, 해커뉴스(HN, 전 세계 개발자들이 모여 최신 기술과 아이디어를 공유하는 온라인 커뮤니티) 독자 여러분,
저는 항상 웹 페이지(인터넷 브라우저로 볼 수 있는 화면)를 만드는 일은 이제 정말 간단해졌지만, 그 안에서 입력된 데이터를 저장하려면 어딘가에 서버(데이터와 웹사이트를 보관하는 컴퓨터)를 빌려서 올려야 하고, 그렇게 저장한 데이터를 나중에 다른 사람과 공유하기도 쉽지 않다는 문제를 겪었습니다. 그래서 지난 몇 달 동안 저는 캡슐(Capsule)이라는 프로그램을 만들어왔습니다. 이 프로그램은 파일 확장자(파일 이름 뒤에 붙는 성격 표시) 이름이기도 하며, 러스트(Rust, 메모리를 안전하게 관리해주어 프로그램 오류를 줄여주는 최신 프로그래밍 언어)로 작성되었고 타우리 2.0(Tauri 2.0, 웹 기술을 활용해 컴퓨터와 스마트폰에서 모두 실행되는 프로그램을 쉽게 만들 수 있게 돕는 개발 도구)을 사용하여, HTML 앱(웹 브라우저에서 실행되는 프로그램)과 그 데이터 전체를 하나의 SQLite(스마트폰이나 소형 프로그램에 널리 쓰이는, 가볍고 별도의 복잡한 설정이 필요 없는 데이터베이스 파일 형식) 파일 안에 통째로 담을 수 있게 해줍니다.
이 프로그램에서는 웹 페이지를 구성하는 HTML 파일과 관련 자산(이미지나 스타일 파일 등)이 데이터베이스(체계적으로 정리된 데이터 모음) 안에 직접 들어갑니다. 사용자가 입력한 데이터는 웹 브라우저가 간단한 정보를 기억하게 돕는 저장소인 로컬스토리지(localStorage)의 키와 값 형태로 저장하거나, 몽고DB(MongoDB, 데이터를 표 형태가 아니라 문서 형태로 유연하게 저장하는 데이터베이스)에서 영감을 받은 컬렉션 API(응용 프로그램 프로그래밍 인터페이스, 서로 다른 프로그램이 소통할 수 있게 돕는 규칙)를 통해 문서 형태로 데이터베이스 안의 표에 저장할 수 있습니다. 또한 PDF 파일이나 사진 같은 다른 자료들도 데이터베이스 안에 직접 저장하여 여러 관련 문서를 한곳에 모아둘 수 있습니다. 필요하다면 모든 데이터를 엑셀 등에서 열어볼 수 있는 CSV 파일이나 웹에서 읽기 쉬운 JSON 파일 형식으로 간편하게 내보낼 수 있습니다.
사생활 보호와 보안(외부의 침입이나 유출로부터 정보를 지키는 일)을 가장 중요하게 생각했기 때문에, 문서들은 기본 상태에서는 아무리 강력한 작업도 제멋대로 할 수 없습니다. 문서들이 컴퓨터 내부의 파일 시스템(파일을 저장하고 관리하는 체계)에 직접 접근하지 못하며, 인터넷을 사용하려면 반드시 허락을 받아야 합니다. 이 허락을 관리하는 구조는 아직도 계속 개선해 나가는 중입니다. 또한 캡슐 문서는 문서와 관련된 인공지능(AI, 인간의 학습 및 추론 능력을 컴퓨터로 구현한 기술) 기능을 사용하기 위해 컴퓨터 내부나 인터넷에 있는 인공지능 모델을 이용할 수 있습니다.
이 방식의 한 가지 단점은 여러 사람이 이 파일을 가지고 각자 수정하면 서로 다른 복사본들이 생겨난다는 점입니다. 같은 파일의 여러 복사본을 하나로 매끄럽게 합칠 수 있도록, 각각의 데이터 항목에는 고유한 UUID(중복되지 않는 고유한 128비트 식별 번호)와 타임스탬프(데이터가 만들어지거나 수정된 시각 기록)가 붙어 있습니다.
저는 이 앱의 정식 버전인 1.0이 나올 때쯤 다른 프로그램들도 캡슐 파일을 읽거나 쓸 수 있도록 파일 형식의 규칙(스펙)을 공개할 계획입니다.
웹 미리보기 주소인 https://withcapsule.app/preview 에서 미리 만들어진 템플릿(틀)을 통해 직접 써보거나, 아래의 명령어를 인공지능 서비스에 입력하여 캡슐에 알맞은 맞춤형 앱을 직접 만들어 볼 수 있습니다:
"https://withcapsule.app/prompt.txt 에 있는 앱 마법사 안내서를 읽고 앱 디자인을 도와주세요."
저는 아직 파일 형식을 다듬고 있는 중이지만, 새로운 버전이 나올 때마다 데이터를 변환해 주는 마이그레이션(버전이 바뀔 때 기존 데이터를 새 형식에 맞게 안전하게 옮겨주는 과정) 기능이 준비되어 있으므로, 나중에 앱의 새 버전을 쓰더라도 데이터가 유실되지 않아야 합니다. 이 기술이 유용하게 쓰일 만한 아이디어가 있거나 실제로 쓸모없는 상황에 대해 알려주시면 감사하겠습니다.
4. 나에게 어떤 영향이 있나요?
일반 독자의 경우 당장 일상에서 캡슐을 직접 설치해 쓰지 않는다면 직접적인 변화는 크지 않으며, 개발자가 만든 단일 파일을 주고받는 방식을 간접적으로 경험하는 정도에 그칠 수 있습니다. 웹 개발이나 개인용 도구를 직접 만드는 개발자라면, 별도의 복잡한 서버 설정을 하지 않고도 화면과 데이터를 하나의 파일로 묶어 간편하게 배포하고 관리하는 새로운 방식을 시험해 볼 수 있습니다. 다만 이 프로그램은 아직 개발 중인 단계이므로 실제 중요한 데이터를 다룰 때는 버전 업데이트 과정에서 파일 구조가 바뀔 가능성을 염두에 두어야 합니다. 프로그램의 미리보기 기능을 통해 미리 살펴볼 수는 있지만, 보안 권한 설정이나 파일 병합 기능 등은 앞으로 계속 개선되어야 하는 조건에 달려 있습니다.