# Postgres를 Graph DB로 사용하기: PgRouting을 Ab(using) - 활용 혹은 남용?

> Clean Markdown view of GeekNews topic #19546. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=19546](https://news.hada.io/topic?id=19546)
- GeekNews Markdown: [https://news.hada.io/topic/19546.md](https://news.hada.io/topic/19546.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2025-03-04T08:38:49+09:00
- Updated: 2025-03-04T08:38:49+09:00
- Original source: [supabase.com](https://supabase.com/blog/pgrouting-postgres-graph-database)
- Points: 10
- Comments: 2

## Summary

pgRouting은 Postgres의 확장 기능으로, 주로 GIS에서 두 지점 간의 최단 경로를 찾는 데 사용되지만, 다양한 그래프 구조의 데이터를 처리하는 데도 활용될 수 있습니다. 이는 작업 스케줄링, 리소스 할당 기반의 리버스 프록시 라우팅, 추천 엔진 등 다양한 분야에서 그래프 알고리즘을 통해 문제를 해결하는 데 유용합니다. pgRouting은 Apache AGE나 Neo4j와 같은 전문 그래프 데이터베이스의 경량 대안으로 사용될 수 있습니다.

## Topic Body

- **pgRouting**은 Postgres의 확장으로, 지리정보 시스템(GIS)에서 두 지점 간의 최단 경로를 찾는 데 주로 사용됨  
- 그러나 pgRouting은 지리공간 데이터 외에도 다양한 그래프 구조의 데이터를 처리하는 데 활용될 수 있음  
- **Apache AGE**나 **Neo4j**와 같은 전문 그래프 데이터베이스의 경량 대안으로 사용 가능함  
  
### pgRouting 소개  
  
- **pgRouting**은 PostGIS의 확장 기능으로, 지리공간 라우팅 기능을 제공함  
- 이를 통해 최단 경로 계산, 네트워크 분석, 복잡한 라우팅 문제 해결 등이 가능함  
- 주로 두 위치 간의 최단 경로를 찾는 등 GIS에서 활용됨  
  
### 그래프와의 연계  
  
- **pgRouting**의 강점은 그래프로 구조화된 모든 데이터와 함께 작업할 수 있다는 점임  
- 그래프는 상호 연결된 지점들의 네트워크로 구성되며, 여기서:  
  - **노드**는 개체를 나타냄  
  - **엣지**는 노드 간의 관계나 경로를 나타냄  
- 지도나 GIS에서는 노드와 엣지가 각각 교차로와 도로를 의미하지만, 소셜 네트워크와 같은 추상 시스템에도 적용 가능함  
  
### GIS 외의 pgRouting 활용 사례  
- # 작업 스케줄링  
  - 프로젝트에서 작업 간에는 의존성이 존재하며, 이는 **유향 비순환 그래프(DAG)**를 형성함  
    - 노드는 작업을 나타냄  
    - 엣지는 의존성을 나타냄  
  - 프로젝트 관리의 주요 과제 중 하나는 전체 프로젝트 기간을 결정하는 '주요 경로(critical path)'를 찾는 것임  
  - pgRouting을 사용하여 작업의 의존성을 모델링하고, 그래프 알고리즘을 통해 주요 경로를 찾을 수 있음  
- # 리소스 할당 기반의 리버스 프록시 라우팅  
  - 분산 시스템에서는 네트워크의 노드 간 리소스를 효율적으로 할당하는 것이 중요함  
  - 각 노드는 물리적 위치나 컴퓨팅 프로세스를 나타내며, 엣지는 노드 간의 데이터 이동 경로를 나타냄  
  - 예를 들어, 클라우드 인프라에서 pgRouting을 사용하여 분산 서버 간의 데이터나 컴퓨팅 작업을 가장 효율적인 경로로 라우팅할 수 있음  
- # YouTube와 같은 추천 엔진  
  - 추천 엔진이나 지식 그래프를 사용하는 검색 알고리즘에서 pgRouting을 활용하여 엔터티와 이벤트 간의 관계를 구축할 수 있음  
  - 예를 들어, YouTube의 추천 알고리즘에서는:  
    - **노드**는 사용자, 비디오, 카테고리 등의 엔터티를 나타냄  
    - **엣지**는 사용자와 비디오 간의 상호작용이나 비디오 간의 카테고리 공유 등의 관계를 나타냄  
  - 이러한 그래프 구조를 통해 사용자에게 맞춤형 추천을 제공할 수 있음  
  
### pgRouting의 추가 정보  
  
- pgRouting은 Postgres의 강력한 확장 기능으로, 다양한 그래프 기반 문제를 해결하는 데 사용될 수 있음  
- 자세한 내용은 [pgRouting 공식 문서](https://docs.pgrouting.org/)에서 확인 가능

## Comments



### Comment 35448

- Author: curiosityprocessor
- Created: 2025-03-05T08:02:17+09:00
- Points: 1

apache age 나 pgRouting 실제 도입해보신 분 계실까요?  
회사에서 그래프DB 도입중인데 기존에 RDB를 postgres로 사용하고 있긴 하나  
plugin/extension은 postgres를 '마치 그래프DB 처럼' 쓸 수는 있으나 실제로 퍼포먼스는 안나온다고 하여 neo4j로 고민중이었는데, 해커뉴스 의견은 또 neo4j에 불만이 많은가보군요

### Comment 35386

- Author: neo
- Created: 2025-03-04T08:38:50+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=43198520) 
* 다섯 해 전, Graph 데이터베이스와 라이브러리에 실망하여 NetworkX와 유사한 Python 인터페이스 뒤에 여러 비-Graph DBMS를 배치하려고 했음
  - Neo4J는 모든 그래프에서 충돌했으며, SQLite와 Postgres가 네트워크 처리 작업에 더 적합한 옵션이었음
  - Postgres 호환성이 증가하면서 프로젝트를 새로 고칠 가치가 있는지 궁금함
  - MemGraph와 같은 더 많은 Graph DB가 CYPHER와 호환되어 Neo4J보다 더 잘 작동할 가능성이 있음
  - pgrouting이 AI/에이전트를 위한 메모리 레이어를 구축하는 데 좋은 도구인지 알아보는 것이 목표였음
  - 초기 결과는 유망하며, 곧 다른 기사를 통해 후속 조치를 취할 예정임
  - SuiteSparse를 기반으로 하는 onesparse와 같은 흥미로운 확장 기능이 있음

* Supabase는 PostGIS와 관련된 훌륭한 콘텐츠를 지속적으로 제공함
  - 타일을 직접 제공하거나 PG 지리적 컨텍스트에서 기능을 (남용)하는 것과 관련된 내용이 있음
  - 혁신적이거나 복잡하지 않지만 재미있고 정신적으로 자극적임
  - 데이터베이스와 작업하는 것에 대한 흥미를 자극하는 콘텐츠를 자주 게시하는 것을 칭찬함

* "그래프를 위한 SQLite"가 없는 이유가 항상 궁금했음
  - 디스크 기반 저장소와의 인프로세스 솔루션을 방해하는 저장 방식이 있는지 궁금함

* 간단한 Postgres 그래프 DB 프로젝트를 작업 중임
  - 쿼리와 테이블 구조가 동일한 작업에 대해 훨씬 간단함

* roaring 비트맵을 bytea postgres 열에 저장하여 인접 행렬을 표현하는 것에 대한 생각을 듣고 싶음
  - RDS가 plrust와 PostgreSQL의 SPI를 지원하므로 croaring-rs를 사용하여 구축할 수 있을 것 같음
  - 많은 그래프를 표현할 수 있으며, 각 그래프는 테넌트(회사/B2B SaaS 사용 사례)에 할당됨
  - plrust를 사용하여 roaring 비트맵을 DB 서버의 bytea에 저장하고 SPI를 사용하여 네트워크 오버헤드를 최소화할 수 있음
  - PostgreSQL은 트랜잭션 안전성을 제공하며, 테넌트 ID 열과 관계 메타데이터를 쿼리하는 JSONB 등 다른 열 기반 데이터에 대한 지원도 제공함
  - 많은 테넌트 그래프를 지원해야 하며, citus를 이미 사용하고 있어 대규모로도 가능할 것 같음
  - 관계를 더 잘 인덱싱하기 위해 일부 연산자 클래스를 만들어야 할 것 같음
  - pg_roaringbitmap을 알고 있지만 int64를 사용하고 RDS에서 시작하는 것을 선호함
  - Neo4J를 사용하지 않고 PostgreSQL을 깊이 사용하고 있음 (~20+ TB 테이블 작업 등)
  - 블로그 게시물 작성자에게 큰 감사를 전함
  - pgRouting을 그래프 DB로 사용할 수 있을 것 같아 테스트 목록에 추가함

* "Apache AGE"에 대한 의견이 있는지 궁금함
  - Apache AGE™는 그래프 데이터베이스 기능을 제공하는 PostgreSQL임

* 데이터 모델만 보고 (예: 쿼리 언어가 아닌) "그래프" 데이터베이스와 "일반 SQL" 데이터베이스 간에 실제 차이가 있는지 궁금함

* PgRouting을 사용하여 등시선 생성 경험이 있는지 궁금함
  - 걷기, 자전거 타기 등을 위한 등시선 지도를 생성하는 사용 사례가 있음
  - 가능하다면 Postgres만 사용하고 Valhalla, OpenTripPlanner, OpenRouteService와 같은 다른 인프라를 피하고 싶음

* Postgres는 항상 새로운 데이터 모델링 기회를 열어주는 확장을 제공함
  - CedarDB (Postgres 호환) 그래프 기능과 비교하여 어떻게 쌓이는지 궁금함
