3P by GN⁺ 5시간전 | ★ favorite | 댓글 1개
  • PGliteWASM 환경에서 완전한 Postgres 데이터베이스를 로컬로 실행할 수 있는 경량 솔루션
  • 압축 시 3MB 미만의 크기로, 브라우저나 클라이언트 환경에서도 손쉽게 구동 가능
  • 데이터 로딩, 동기화, 실시간 쿼리 기능이 내장되어 반응형 데이터 처리 가능
  • pgvector를 포함한 동적 확장 로딩 기능을 지원해 다양한 확장 모듈을 활용할 수 있음
  • Supabase 기반의 database.build를 통해 AI로 Postgres 데이터베이스를 생성·배포할 수 있어, 웹 기반 데이터베이스 개발의 유연성을 높임

개요

  • PGlite는 WASM(WebAssembly) 환경에서 실행되는 임베디드 Postgres 데이터베이스
    • 로컬 환경에서 완전한 Postgres 인스턴스를 구동할 수 있음
    • 반응형 데이터 처리와 실시간 동기화를 지원

주요 특징

  • 경량성: Gzip 압축 기준 3MB 미만의 완전한 Postgres 빌드 제공
    • 브라우저나 경량 클라이언트 환경에서도 실행 가능
  • 확장성: 동적 확장 로딩 메커니즘을 통해 다양한 Postgres 확장 기능을 추가 가능
    • pgvector 확장을 기본 지원
  • 반응성: 데이터 로딩, 동기화, 실시간 쿼리를 위한 내장 기능 포함
    • 실시간 데이터 업데이트 및 반응형 애플리케이션 구축에 적합

체험 및 활용

  • database.build 플랫폼에서 PGlite 기반 Postgres 데이터베이스를 생성 및 게시 가능
    • Supabase가 구축한 AI 기반 도구로, 사용자가 직접 데이터베이스를 생성할 수 있음
  • 브라우저 내에서 PGlite Postgres 인스턴스를 직접 실행 가능
    • pgvector 포함
    • 추가 확장은 playground(REPL) 환경에서 실험 가능

의의

  • PGlite는 Postgres의 기능을 브라우저 수준으로 확장해, 클라이언트 중심 데이터베이스 실행을 가능하게 함
  • 경량성과 확장성, 반응성을 결합해 차세대 웹 애플리케이션 개발에 적합한 데이터베이스 솔루션으로 주목됨
Hacker News 의견
  • 나는 PGlite 팀에서 일하고 있음. 다시 HN에 소개되어 기쁨
    최근 주간 다운로드 수가 300만을 넘었고 곧 400만에 도달할 예정임 — npm 패키지 페이지 참고
    원래는 웹앱에 임베드하기 위해 만들었지만, 지금은 개발 도구CLI 환경에서의 사용이 폭발적으로 늘고 있음. Google Firebase와 Prisma도 각각의 CLI에 PGlite를 내장해 서버 제품을 에뮬레이션하고 있음

    • 흥미로움. 그런데 왜 WASM 전용으로 만든 것인지 궁금함. 보통은 라이브러리화 후 WASM으로 옮기는 게 순서일 것 같은데, 내가 뭔가 놓친 부분이 있는 듯함
    • 멋진 작업에 감사함. 혹시 http-vfs read-only 시나리오를 지원할 계획이 있는지 궁금함
      DuckDB나 sql.js-httpvfs처럼 원격 URL에서 range request로 블록을 읽는 방식 말임
      우리 연구실에서도 이런 프로젝트를 진행 중인데, http-vfs 생태계는 아직 프로토타입 수준이라 최적화된 라이브러리가 거의 없음
      PostgreSQL의 디스크 접근 패턴이 SQLite보다 http-vfs에 더 적합한지도 궁금함
    • Flutter용 라이브러리 계획이 있는지 묻고 싶음
    • PGlite가 메모리 모드에서 일반 Postgres보다 빠른지 궁금함
      만약 그렇다면 네트워크 프로토콜을 지원해서 JS 외 언어의 CI 환경에서도 쓸 수 있으면 정말 멋질 것 같음
    • 정말 멋져 보임. 구체적으로 어떤 사용 사례에서 이걸 쓰면 좋은지 알고 싶음
      목표가 SQLite나 DuckDB의 대체재가 되는 것인지 궁금함
  • 나는 비 JavaScript 런타임에서 PGlite를 쓰고 싶음
    예를 들어 Go CLI에 WASM 런타임으로 임베드해서 SQLite 대체로 쓰는 식임
    이슈 #89를 보면 Rust용 서드파티 바인딩이 있는 것 같은데, 공식적으로 다른 언어 바인딩을 지원할 계획이 있는지 궁금함

    • 맞음, PGlite + Go 조합은 정말 좋을 것 같음
  • PGlite는 정말 훌륭함. 나는 브라우저 내 PostgreSQL 서버로 개발용으로 사용 중임
    서버가 PG 프로토콜을 구현하고, 클라이언트가 연결하면 쿼리를 브라우저로 전달해 내부에서 PGlite가 실행됨
    결과적으로 브라우저 안에서 완전한 PG 서버가 동작함 — dbfor.dev

  • 이 프로젝트는 매우 흥미로움. Postgres의 단점 중 하나가 항상 서버를 세팅해야 한다는 점인데, 이게 그 문제를 해결함
    혹시 네이티브 라이브러리로 컴파일할 방법이 있는지 궁금함. 일부 코드는 재사용 가능할 것 같음

    • 나는 실험적으로 React Native용으로 컴파일해봤음. iOS와 Android에서 Postgres가 돌아감 — PR 링크
    • 네이티브 라이브러리는 현재 로드맵에 포함되어 있음
    • 정말 공감함. SQL이나 동작을 바꾸지 않고 임베디드에서 네트워크 모드로 전환할 수 있다면 너무 멋질 것 같음
  • PGlite와 SQLite의 차이점이 궁금함
    나는 주로 임베디드 환경과 브라우저 클라이언트 쪽에서 SQLite를 써왔음
    SQLite는 단순함이 장점인데, PGlite는 다양한 확장 기능이 흥미로움. 두 DB의 핵심적인 차이가 무엇인지 알고 싶음

    • 내 생각엔 주요 사용처는 테스트/CI 환경
      SQLite로 빠르게 테스트를 돌릴 수 있지만, 실제 인프라가 PostgreSQL이라면 그 가치가 제한적임
  • 단위 테스트에서는 여전히 TestContainers로 Docker 기반 Postgres를 돌리고 있음
    하지만 이런 대안 덕분에 py-pglite 같은 Python용 테스트 도구도 가능해졌음
    그래도 나는 pgserver처럼 진짜 Postgres를 pip 패키지로 가볍게 돌릴 수 있는 쪽이 더 신뢰감 있음
    내 의견은 어디까지나 단위 테스트 관점임

    • 두 접근 방식의 트레이드오프가 어떤지 궁금함. 이런 경험담은 항상 도움이 됨
  • 우리 팀은 새 내부 서비스를 만들면서 테스트 환경에 PGlite를 도입했음
    테스트 시에는 PGlite를, 실제 실행 시에는 Postgres 인스턴스를 쓰도록 래퍼를 구성했는데 아주 성공적이었음
    특히 .clone() 기능으로 DB 체크포인트를 만들어 테스트마다 초기 상태로 되돌릴 수 있음
    50개의 테스트 스위트를 병렬로 돌리는 것도 아주 쉬워짐

  • 테스트용으로 사용 중인데, 인메모리 SQLite와 풀 Postgres 인스턴스의 중간 지점 같은 느낌임
    오랫동안 이런 걸 찾고 있었는데, 테스트 속도가 빨라져 만족스러움. 지금까지는 제약도 거의 없음

  • Doltgres라는 단일 실행 파일 형태의 Postgres도 있음
    Deno처럼 단일 .exe 파일을 다운로드해 실행하면 바로 Postgres가 동작함 — Doltgres 설치 문서