PG라이트 시대: 웹의 진화

PG라이트 시대: 웹의 진화
Share

브라우저 내 데이터베이스 PGLite 등장과 웹 개발 패러다임 변화, 로컬 퍼스트 아키텍처의 가능성과 한계를 분석합니다.

PG라이트 시대: 웹의 진화

한때 메인프레임 시대에는 모든 컴퓨팅 파워가 중앙에 집중되어 있었지만, 개인용 컴퓨터의 등장과 인터넷의 발전으로 분산 컴퓨팅 환경이 구축되었습니다. 이제 클라우드가 주도권을 쥐고 있는 가운데, 로컬 퍼스트 운동이 다시 한번 컴퓨팅 패러다임의 변화를 예고하고 있습니다. 웹 브라우저 안에 풍부한 기능을 갖춘 데이터 저장 옵션을 직접 내장하는 새로운 기술 흐름, 그 중심에는 PG라이트가 있습니다.

PG라이트: 브라우저 안의 데이터베이스

현대의 웹 브라우저는 수년간의 발전을 거듭하여 강력한 소프트웨어 플랫폼으로 진화했습니다. 하지만 데이터를 얻기 위해 서버에 의존해야 하는 구조는 여전히 개선해야 할 과제입니다. PG라이트는 관계형 데이터베이스의 일부를 브라우저에 직접 내장하고, 동기화 엔진을 통해 데이터 일관성을 유지하는 새로운 접근 방식을 제시합니다. 이를 통해 프런트엔드에서는 즉각적인 반응성을 확보하고, 백엔드와의 대칭성을 유지할 수 있습니다.

동형성의 미래와 웹어셈블리

윈터TC는 서버와 클라이언트를 동일한 환경으로 맞추는 동형 자바스크립트의 비전에 한 걸음 더 다가서고 있습니다. 다음 단계는 데이터 저장소에서도 이러한 동질성을 구현하는 것입니다. 웹어셈블리(WASM)의 발전은 브라우저 안에서 완전한 기능을 갖춘 포스트그레SQL 인스턴스를 실행할 수 있게 했습니다. PG라이트는 WASM 기반 데이터베이스로, 데이터센터에서 운영하는 것과 동일한 데이터베이스를 브라우저에서 사용할 수 있도록 합니다.

형상 기반 동기화 API

전체 데이터베이스를 브라우저에 둘 수는 없기 때문에, 특정 세션에서 사용자가 필요로 하는 데이터만 가져오는 것이 중요합니다. 이때 ‘형상 기반’ 동기화 개념이 활용됩니다. 형상은 일종의 뷰(view)와 유사하며, 쿼리를 통해 관련 데이터의 일부를 클라이언트 측 데이터베이스에 채워 넣습니다. 엘라스틱SQL이 대중화한 방식으로, PG라이트 역시 이 프로젝트가 주도합니다. 동기화는 포스트그레스의 네이티브 논리적 복제 프로토콜에 기반합니다.

충돌 없는 복제 데이터 타입 (CRDT)

여러 사용자가 오프라인 상태에서 동일한 데이터를 동시에 수정하는 경우, 데이터 충돌이 발생할 수 있습니다. CRDT(Conflict-free Replicated Data Types)는 이러한 동기화 문제를 해결하기 위한 데이터 구조입니다. CRDT는 Map이나 List 같은 구조를 수학적으로 병합할 수 있도록 설계되어, 여러 사용자의 입력을 자동으로 합칠 수 있습니다. 이를 통해 사용자는 오프라인에서 수정한 내용이 사라지지 않고, 연결이 복구되면 변경 사항이 자연스럽게 결합되는 경험을 누릴 수 있습니다.

JSON API를 넘어

로컬 퍼스트 데이터 모델은 JSON을 직렬화하고 역직렬화하는 과정을 거칠 필요가 없습니다. 필요한 SQL 문을 작성하면, 동기화 엔진이 정의한 규칙에 따라 전송 과정을 자동으로 처리합니다. 더 이상 GET /todos 같은 엔드포인트를 작성할 필요 없이, 컴포넌트 안에 SELECT * FROM todos와 같은 SQL 쿼리를 직접 작성할 수 있습니다. 이러한 변화는 웹 개발자들이 20년 넘게 추구해 온 목표, 즉 데스크톱급 사용자 경험을 가능하게 합니다.

인덱스드DB와 OPFS

인덱스드DB는 브라우저에 데이터베이스를 제공하려는 시도였지만, 복잡한 API와 성능 제약으로 인해 한계가 있었습니다. 웹어셈블리와 OPFS(Origin Private File System)는 이러한 한계를 극복하고, 검증된 엔진을 클라이언트로 직접 포팅할 수 있게 했습니다. OPFS는 브라우저가 사용자 하드 드라이브에 직접 접근할 수 있도록 지원하며, 서버급 데이터베이스를 브라우저에서 거의 네이티브에 가까운 성능으로 실행할 수 있게 하는 핵심적인 역할을 수행합니다.

노SQL의 대안, RxDB

PG라이트가 ‘클라이언트 위의 SQL’을 대표한다면, RxDB(Reactive Database)는 그에 대응하는 노SQL 진영입니다. RxDB는 반응성(reactivity)을 중심으로 설계되었으며, 쿼리를 ‘구독’하는 방식으로 UI를 즉시 갱신합니다. 이를 통해 리덕스(Redux)나 피니아(Pinia) 같은 상태 관리 라이브러리를 따로 둘 필요 없이, 데이터베이스 자체가 반응형 상태의 원천이 됩니다.

결론

로컬 퍼스트 아키텍처는 우리가 익숙한 REST 모델에서 벗어나는 급진적인 전환이지만, 런타임 통합과 산업 수준의 로컬 데이터베이스를 통해 브라우저는 완전한 애플리케이션 플랫폼으로 도약할 가능성을 얻었습니다. 로컬 퍼스트와 동기화 모델이 JSON과 REST의 왕좌를 위협할 수 있을지는 미지수이지만, 브라우저 기반 웹 개발의 미래를 엿볼 수 있는 중요한 흐름임에는 틀림없습니다.

이것도 좋아하실 수 있습니다...