그래프DB는 뭔가요?
여러 단계로 연결된 데이터의 관계와 지나온 경로를 찾는 방법을 설명해요
2026-08-25 · 읽는 시간 7분
여러 단계로 연결된 항목의 관계와 지나온 경로를 확인해야 할 때 그래프DB를 사용합니다.
‘이 글을 참고한 다른 글은 무엇이고, 그 글은 다시 어떤 글을 참고했을까?’처럼 여러 단계의 연결을 찾을 때 유용해요. 현재 상품이 포함된 주문을 거쳐 함께 구매한 상품을 찾을 수도 있습니다. 연결 순서가 짧고 고정돼 있다면 관계형 데이터베이스로도 충분하지만, 관계의 종류·방향·탐색 범위가 달라지거나 지나온 경로까지 필요하다면 그래프DB를 검토합니다. UQA로 원본 데이터와 항목 사이의 관계를 함께 저장하고 여러 단계의 관계와 경로를 탐색할 수 있습니다.
1. 여러 단계의 연결 관계를 찾을 때 그래프DB가 필요한 이유
인터넷에서 글을 읽거나 상품을 구매할 때 ‘이 글을 본 사람이 다른 글도 봤어요’ 또는 ‘이 상품을 산 사람이 이것도 함께 샀어요’ 같은 추천을 자주 볼 수 있습니다.
이 추천 기능은 단순히 같은 종류의 항목을 모으는 것이 아니라 여러 단계를 거쳐 연결된 관계를 찾습니다.
‘로그인 구현하기’ 글이 ‘세션 저장 방법’ 글을 참고하고, 그 글이 다시 ‘쿠키 보안 설정’ 글을 참고했다면 세 글의 연결을 차례로 탐색할 수 있어요.
그래프DB는 여러 단계로 연결된 항목의 관계를 찾고, 어떤 연결을 거쳐 도착했는지 경로까지 확인할 때 사용하는 데이터베이스입니다.
출발 항목에서 정해진 관계를 따라 다음 항목으로 이동하는 과정을 반복하므로 직접 연결과 한 단계 더 이어진 연결을 구분할 수 있어요.
보물찾기에서 출발점부터 단서를 차례로 확인하듯, 어디서 시작해 어떤 연결을 거쳤는지 함께 보여줍니다.
2. 그래프DB가 저장하는 노드와 엣지
노드(Node)는 글·사용자·주문·상품처럼 각각 구분할 수 있는 항목입니다.
사람·상품·장소처럼 서로 구분할 수 있는 대상을 하나씩 저장한다고 생각하면 쉬워요.
‘글 A’, ‘사용자 1’, ‘주문 101’, ‘상품 X’가 각각 하나의 노드가 될 수 있어요.
엣지(Edge)는 노드 사이의 연결이나 관계입니다.
‘A 글이 B 글을 참조함’, ‘사용자가 상품을 주문함’, ‘주문에 상품이 포함됨’ 같은 사실을 엣지로 저장합니다.
엣지에는 관계의 종류와 방향이 있습니다.
A 글에서 B 글로 향하는 ‘참조함’ 관계를 저장하면 ‘A 글이 참고한 글’과 ‘A 글을 참고한 글’을 구분할 수 있어요.
일방통행 도로처럼 관계가 향하는 방향에 따라 탐색 결과가 달라집니다.
출발 항목, 탐색할 관계의 종류와 방향, 탐색 범위를 정하면 조건에 맞는 항목과 그 항목까지 지나온 경로를 확인할 수 있습니다.
3. 관계형 데이터베이스와 그래프DB의 선택 기준
관계형 데이터베이스는 데이터를 표에 저장하고 ID로 표 사이를 연결합니다. 연결 순서가 정해져 있고 탐색 범위가 짧다면 관계형 데이터베이스로도 충분해요. 관계의 종류·방향·탐색 범위가 자주 달라지거나 지나온 경로 자체를 확인해야 한다면 그래프DB가 적합합니다.
| 비교 기준 | 관계형 데이터베이스 | 그래프DB |
|---|---|---|
| 데이터 표현 | 표에 항목을 저장하고 ID로 연결 | 노드와 관계의 종류·방향을 함께 저장 |
| 연결 탐색 | 연결할 표와 순서를 미리 정해 조회 | 출발 노드에서 지정한 관계를 원하는 단계까지 탐색 |
| 적합한 기능 | 직접 참고한 글이나 같은 주문의 상품처럼 경로가 고정된 기능 | 간접 참조 글이나 여러 주문을 거친 상품처럼 탐색 범위가 달라지는 기능 |
| 요구가 바뀌면 | 표를 연결하는 조건과 순서를 수정 | 관계의 종류·방향·최대 탐색 단계를 변경 |
| 확인 결과 | 조건에 맞는 항목 목록 | 도착한 항목과 그 항목까지 지나온 경로 |
관계형 데이터베이스가 적합한 경우
정해진 기차 노선처럼 연결 순서와 탐색 범위가 짧고 고정된 경우
현재 글이 직접 참고한 글만 찾기
같은 주문에 들어 있는 다른 상품만 찾기
그래프DB가 적합한 경우
내비게이션이 목적지에 따라 경로를 바꾸듯 관계의 종류·방향·탐색 범위가 달라지는 경우
현재 글이 참고한 글과 그 글이 다시 참고한 글까지 여러 단계로 찾기
현재 상품이 포함된 주문을 찾고 각 주문에 담긴 다른 상품을 모두 찾기
관계의 종류와 방향을 바꾸거나 지나온 경로를 결과와 함께 확인하기
4. UQA로 원본 데이터와 관계를 함께 저장해 그래프DB 동기화 코드 줄이기
별도 그래프DB를 추가하면 원본 데이터와 관계 데이터를 서로 다른 곳에 저장할 수 있습니다.
상품이나 글을 수정·삭제할 때 두 저장소의 내용을 함께 갱신해야 해요.
두 개의 일기장에 같은 내용을 적는 것처럼 한쪽만 바뀌면 서로 다른 정보가 남을 수 있어요.
삭제된 항목이 관계 탐색 결과에 남거나 이전 정보가 표시될 수도 있습니다.
UQA는 글·상품·주문 같은 원본 데이터와 항목 사이의 관계를 함께 저장하고 조회합니다.
상품의 주문 취소 여부와 함께 구매된 다른 상품을 한 번에 확인할 수 있어요.
저장소마다 식별자를 대응시키거나 수정 내용을 여러 곳에 반영하는 코드를 줄일 수 있습니다.
UQA가 화면에 표시할 항목을 대신 정하는 것은 아닙니다.
몇 단계까지 관계를 찾을지, 비공개 글을 제외할지, 어떤 순서로 보여줄지는 앱에서 정해야 해요.
UQA는 앱이 정한 규칙을 적용하는 데 필요한 원본 조회와 관계 탐색을 맡습니다.
세법 판례 검색기에서는 질문과 관련된 판례를 찾고, 판례가 인용한 조문과 쟁점을 따라 다른 관련 판례를 추가 후보로 찾는 데 UQA를 사용합니다.
관계로 찾은 후보를 모두 보여주지 않고 검색 후보와 겹치는 판례를 우선해 탐색 범위가 지나치게 넓어지지 않도록 합니다.
데이터베이스를 선택하기 전에 어떤 관계를 얼마나 깊이 찾아야 하는지, 지나온 경로를 확인해야 하는지 먼저 정하세요. 연결 순서가 고정돼 있다면 관계형 데이터베이스로 충분하고, 복잡한 관계 탐색이 필요하면서 원본과 관계를 여러 저장소로 분리하지 않으려면 UQA를 사용할 수 있습니다.
curl -fsSL https://releases.uqa-cloud.cognica.io/install.sh | sh &&
export PATH="${UQA_INSTALL_DIR:-$HOME/.local/bin}:$PATH" &&
uqa llm install skills함께 구매한 상품 추천 프롬프트
UQA에 사용자, 주문, 상품 데이터를 저장하고 주문과 상품의 포함 관계를 구성해 줘. 상품 상세 화면에서 선택한 상품이 포함된 주문을 찾고, 같은 주문에 포함된 다른 상품을 추천 후보로 조회해 줘. 구매자가 취소한 주문, 현재 선택한 상품, 판매 중지 상품은 제외하고 후보가 나온 주문 경로도 함께 확인할 수 있게 해 줘.
다단계 참조 글 탐색 프롬프트
UQA에 게시글 사이의 참조 관계를 저장해 줘. 글 상세 화면에서 현재 글이 직접 참조한 글과 해당 글이 다시 참조한 글을 구분해 조회해 줘. 비공개 글과 현재 글은 제외하고, 같은 글이 여러 경로로 중복 조회되면 한 번만 표시해 줘.
별도 그래프DB 서비스 없이 UQA에서 실행