TL;DR

  • Postgres Schema Gallery가 Temporal, Miniflux, Listmonk, Matrix Synapse, Sourcegraph, Cal.com, GitLab CE의 실제 PostgreSQL 스키마를 문서화·리뷰하고 회전형 3D 탐색기로 제공함.
  • 일곱 제품은 각각 38개, 16개, 16개, 137개, 180개, 121개, 1,429개 테이블로 구성되며, GitLab CE가 규모 스트레스 테스트 역할을 함.
  • products.json의 저장소·고정 커밋·스키마 파일·라이선스를 바탕으로 스키마 추출, 리뷰, 문서화, 탐색기 영상 녹화, GitHub Pages 배포를 자동화함.
  • WebGL 브라우저에서는 실시간 3D 미니어처를 렌더링하고, 미지원 브라우저에서는 녹화 영상과 평면 스키마 맵을 대체 표시함.
  • 새 제품은 PostgreSQL 스키마 유형과 메타데이터를 담은 products.json 항목을 풀 리퀘스트로 추가하며, 스키마는 각 프로젝트의 라이선스를 유지함.

갤러리

  • Postgres Schema Gallery 저장소는 잘 알려진 오픈소스 제품의 실제 PostgreSQL 스키마를 문서화하고 리뷰한 결과를 회전형 3D 탐색기로 제공함.
  • 첫 버전에는 다음 일곱 제품이 포함됨.
  • Temporal: 38개 테이블
  • Miniflux: 16개 테이블
  • Listmonk: 16개 테이블
  • Matrix Synapse: 137개 테이블
  • Sourcegraph: 180개 테이블
  • Cal.com: 121개 테이블
  • GitLab CE: 1,429개 테이블
  • 각 섬네일은 해당 제품의 스키마 맵이며, 선택하면 회전 가능한 전체 탐색기로 열림.
  • 첫 화면은 일곱 스키마를 모두 실시간으로 천천히 회전하는 미니어처로 표시하고, 각 카드에서 전체 탐색기와 리뷰 결과가 담긴 문서를 열 수 있음.

구축 방식

  • 저장소 내부에는 별도의 제3자 산출물이 포함되지 않으며, products.json이 각 제품의 저장소, 고정 커밋, 스키마 파일, 라이선스를 지정함.
  • main에 푸시될 때마다 워크플로가 지정된 커밋에서 파일을 가져오고, 필요한 경우 평문 SQL로 변환함.
  • Miniflux는 Go 마이그레이션 문자열에서 변환함.
  • Cal.com은 Prisma 스키마에서 변환함.
  • 워크플로가 리뷰어를 라이브러리로 실행하고, 제품별 문서 폴더를 생성하며, 각 탐색기가 회전하는 3초 클립과 가로형 애니메이션 배너를 기록하고, 첫 화면을 렌더링한 뒤 site/를 GitHub Pages에 배포함.
  • 첫 화면의 미니어처는 브라우저에서 WebGL로 실시간 렌더링됨.
  • WebGL을 지원하지 않는 브라우저에서는 각 제품의 녹화 클립을 대신 표시하고, 포스터 이미지로 평면 스키마 맵을 사용함.
  • 해당 브라우저에서 WebGL을 켜는 위치와 확장 프로그램을 끈 비공개 창이 가장 빠른 테스트 방법이라는 안내도 함께 표시함.
  • 도메인 정보는 다음 우선순위로 결정됨.
  • products/<slug>/narratives.json에 직접 작성된 정보가 있으면 사용함. 현재 Temporal, Miniflux, Listmonk가 해당됨.
  • 없으면 빌드 과정에서 테이블 이름 접두사로 테이블을 그룹화하고, 카드에 domains by table prefix를 표시함.
  • 이를 통해 접두사 기반 그룹을 리뷰 판단으로 오인하지 않게 함.
  • npm ci로 의존성을 설치하고, npm test로 매니페스트·추출·접두사 도메인·첫 화면을 검사함.
  • node build/index.ts로 네트워크가 필요한 전체 빌드를 실행해 site/에 결과를 생성함.
  • 배너 생성에는 ffmpeg와 Playwright가 필요함.
  • --only temporal --no-banner 옵션으로 Temporal만 빌드하고 배너를 생략할 수 있음.
  • Node.js 24 이상이 필요하며, 리뷰어는 products.json에 지정된 태그로 .cache/reviewer/에 복제됨.

제품 추가

  • 새 제품은 다음 정보를 포함한 항목을 products.json에 추가하는 풀 리퀘스트로 제안함.
  • slug: 제품 식별자
  • name: 제품명
  • homepage: 제품 홈페이지 URL
  • repo: GitHub 저장소 경로
  • commit: 40자리 커밋 해시
  • ref: 버전 또는 참조 이름
  • license: 라이선스
  • blurb: 제품 설명과 스키마의 주목할 만한 특징을 담은 한두 문장
  • source: 스키마 소스 유형과 파일 경로
  • domains: prefix 또는 curated
  • source.kind는 다음 세 유형 중 하나임.
  • sql: 파일을 지정된 순서로 이어 붙임.
  • go-raw-strings: 마이그레이션을 담은 백틱 문자열이 포함된 Go 파일 하나를 사용함.
  • prisma: schema.prisma 파일 하나를 사용함.
  • 가능하면 실제 도메인을 담은 products/<slug>/narratives.json도 추가하고 domainscurated로 설정함.
  • narratives.json의 형식은 Temporal 항목을 참고함.
  • 지원 대상은 PostgreSQL로 한정됨.

라이선스

  • 갤러리 코드와 텍스트의 라이선스는 MIT임.
  • 각 스키마는 해당 프로젝트의 라이선스를 그대로 유지함.
  • 프로젝트별 라이선스 목록은 NOTICE.md에 기록됨.