원문 캡처 · lab4.app
원문 캡처 · lab4.app

db4 제작자는 브라우저 탭 안에서 실행되는 Postgres 기반 데이터베이스와 릴레이를 오픈소스로 공개하고 호스팅 서비스를 종료했다. 로컬 모델을 이용한 검색 증강 생성(RAG)을 클라우드 데이터베이스 없이 구성할 수 있지만, 외부 클라이언트로 연결하려면 사용자가 릴레이를 직접 실행해야 한다.

db4는 Postgres를 웹어셈블리(WebAssembly)로 컴파일한 PGlite를 브라우저 탭에서 실행하고, 데이터를 브라우저 저장소에 둔다. LM Studio나 Claude Desktop 같은 MCP 클라이언트는 db4의 MCP 서버를 통해 로컬 LM Studio 임베딩 모델로 텍스트를 벡터화하고 탭 안에 저장할 수 있다. 검색은 일반 SQL로 작성한 코사인 유사도 방식이며, 예시 앱은 커뮤니티 앱 저장소에서 확인할 수 있다. 벡터 데이터베이스 서비스나 클라우드 계정은 필요하지 않으며, 로컬 모델을 쓰면 데이터가 기기를 벗어나지 않는다.

데이터베이스는 표준 Postgres 와이어 프로토콜을 지원해 psql, DBeaver, TablePlus, ORM에서 연결할 수 있다. 릴레이는 연결 ID에 맞는 브라우저 탭으로 데이터를 전달할 뿐 저장하지 않고 접근 권한도 결정하지 않는다. 다만 전달하는 쿼리 트래픽은 볼 수 있으므로, 제작자는 릴레이를 직접 운영하는 것도 고려할 이유라고 설명한다. 인증 토큰, 읽기 전용 모드, 쿼리 제한, 앱별 스키마 격리는 브라우저 탭에서 적용된다.

코드는 GitHub 저장소에서 MIT 라이선스로 공개됐다. 웹사이트(db4.lab4.app)에서는 데이터베이스와 SQL 편집기, 커뮤니티 앱을 계속 사용할 수 있지만, 외부 클라이언트 연결에는 직접 운영하는 릴레이가 필요하다. 호스팅 버전을 사용했더라도 데이터베이스는 원래대로 브라우저에 남아 있다. 릴레이에는 데이터가 저장되지 않았지만, 기존 *.pg.db4.app 연결 주소는 더 이상 작동하지 않는다.

로컬에서 실행하는 명령은 다음과 같다.

text
git clone --recurse-submodules https://github.com/maxabrahamsson/db4app.git cd db4app && npm install npm run relay   # relay: :8787 (WebSocket) + :6543 (Postgres) npm run dev     # web app: http://localhost:5173

데이터베이스 페이지에서 연결 ID와 토큰을 복사한 뒤 psql로 연결한다.

text
psql "postgres://postgres:YOUR_TOKEN@localhost:6543/YOUR_CONNECTION_ID"

서버에서 릴레이를 운영한다면 인증 토큰을 비밀번호처럼 다뤄야 한다. 제작자는 릴레이를 TLS를 제공하는 역방향 프록시 뒤에 두고, 필요하지 않다면 Postgres 포트 6543을 외부에 공개하지 말라고 안내한다. SSH 터널이나 방화벽 허용 목록이 더 안전한 선택지이며, 자가 호스팅 안내서에서 TLS와 요청 제한 설정을 다룬다. 릴레이용 Dockerfile, Claude Desktop과 LM Studio 등을 위한 MCP 서버, 단일 사용자 릴레이를 감싸는 데스크톱 앱도 제공한다.

제작자는 db4의 활용 예로 로컬 RAG, AI 에이전트용 개인 데이터베이스, SQL 교육, 프로토타입 제작, 오프라인 도구, 사용자의 브라우저에 데이터를 보관하는 웹 앱을 들었다. 향후 아이디어로는 PGlite의 pgvector 확장을 활용한 벡터 열과 인덱스, 실제 Postgres와 동기화하는 브라우저 복제본, 피어 투 피어 릴레이, 스키마별 권한 토큰, 추가 커뮤니티 앱을 제안했다.