Postgres-wasm은 PostgreSQL이 WebAssembly로 이식된 프로젝트입니다.
최근 postgres-wasm의 무료 이용이 발표되었습니다 . 이는 브라우저에서 실행되는 PostgreSQL 서버로 , 브라우저 상태 영구 저장, pg_dump를 이용한 복원, 원격 데이터베이스와의 논리적 복제 등 모든 기능을 제공합니다.
Postgres-wasm은 PostgreSQL을 WebAssembly로 포팅한 오픈 소스 프로젝트 입니다 . 이 솔루션은 클라우드 데이터베이스 제공업체인 Supabase와 데이터베이스 프로그래밍 전문 기업인 Snaplet의 협력을 통해 개발되었습니다.
Supabase 엔지니어 Mark Burggraf는 "오늘 우리는 Snaplet에서 친구들과 함께 postgres-wasm을 출시합니다.
Postgres 를 잘 모르시는 분들을 위해 설명드리자면 , Postgres 는 가장 진보된 오픈 소스 데이터베이스 관리 시스템 중 하나입니다 . 풍부한 기능, 강력한 데이터 유형, 뛰어난 인덱싱, 그리고 데이터 스택을 간소화하고 개발자가 애플리케이션 개발에 집중할 수 있도록 도와주는 다양한 내장 함수를 제공합니다. Postgres는 단순한 관계형 데이터베이스를 넘어, 신뢰할 수 있는 데이터 플랫폼으로 자리매김했습니다.
Postgres-wasm 정보
Supabase가 브라우저에서 PostgreSQL을 실행하는 최초의 회사는 아닙니다. 그 타이틀은 한 달 전 Hacker News에 자신들의 버전을 공개한 Crunchy Data 팀에게 돌아갑니다. Crunchy Data의 독점 버전을 오픈 소스 버전으로 개발하고자 했던 Supabase는 Snaplet과 협력하여 Postgres-wasm을 개발했습니다.
Postgres-wasm 덕분에 PostgreSQL을 웹 브라우저에서 직접 실행할 수 있게 되었습니다. 이는 용량이 매우 작은 Linux 배포판인 Buildroot와 x86 터미널의 작동 방식을 재현하는 v86 에뮬레이터를 사용하여 구현되었습니다.
반면 WebAssembly는 웹 페이지에서 고성능 애플리케이션을 구축할 수 있도록 설계되었지만, 웹에 특화된 가정이나 기능을 제공하지 않으므로 다른 환경에서도 사용할 수 있습니다. 모든 운영 체제에서 모든 언어를 지원하는 것을 목표로 하는 개방형 표준이며, 실제로 가장 인기 있는 언어들은 이미 어느 정도 수준의 지원을 받고 있습니다. Supabase는 브라우저 내에서 VM을 실행하기 위해 v86을 사용합니다.
브라우저에서 PostgreSQL을 실행하는 것도 좋지만 , PgAdmin으로 접속하는 것은 훨씬 더 편리합니다. 하지만 브라우저는 가상 머신의 TCP 네트워크에 대한 접근을 차단합니다. 이러한 문제를 해결하기 위해 Supabase는 WebSocket을 통해 트래픽을 라우팅합니다. Supabase는 WebSockProxy 포크를 사용하여 에뮬레이터가 인터넷과 통신할 수 있도록 합니다. WebSockProxy 포크는 WebSocket 포트를 통해 전송되는 데이터를 TCP 패킷으로 변환하는 기능을 제공합니다. 또한, 이 WebSockProxy 포크는 PostgreSQL 서버를 터널링하는 기능도 추가합니다.
이 프로젝트의 주요 특징은 다음과 같습니다.
- Postgres 14.5, psql, pg_dump 등
- 파일에/에서 상태를 저장하고 복원합니다.
- Postgres 상태를 브라우저 저장소(IndexedDB)에 저장하고 복원합니다.
- 상태 파일에서 빠른 부팅 또는 전체 에뮬레이터 재설정.
- 128MB ~ 1024MB의 메모리 구성 옵션.
- 터미널의 글꼴 크기를 설정합니다.
- 파일을 에뮬레이터에 업로드합니다(CSV 및 데이터베이스 덤프 포함).
- 에뮬레이터 파일을 다운로드합니다.
- 에뮬레이터에서 인터넷으로 나가는 네트워크 연결.
- 에뮬레이터 내부의 postgres 포트 5432에 대한 인바운드 네트워크 터널.
일반적으로 전체 프로젝트는 PostgreSQL 서버를 실행하는 데 사용되는 12MB 크기의 단일 스냅샷에 포함됩니다.
Postgres-wasm 개발자가 인정하는 것처럼 런타임 성능은 그다지 높지 않지만 psql 명령줄 인터페이스가 있는 전체 브라우저에서 PostgreSQL 14.5를 사용할 수 있도록 하려는 목표 자체는 성공적으로 달성되었습니다.
마지막으로, 이 주제에 대해 더 자세히 알고 싶으시다면 다음 링크 에서 자세한 내용을 확인하실 수 있습니다.