점(상품·고객·창고)과 선(함께 삼·배송로). 이 두 가지면 세상의 관계를 거의 다 표현할 수 있습니다.
쇼핑몰을 운영하다 보면 "연결"에 관한 질문을 계속 받게 됩니다.
- 이 상품을 산 사람들이 같이 산 상품은?
- 이 카테고리 아래에 어떤 카테고리들이 있지?
- 서울 창고에서 제주까지 가장 싼 경로는?
- 이 계정과 연결된 의심 계정들은?
이 모든 질문이 같은 자료 구조 위에서 풀립니다. 그래프(graph)예요.
그래프를 코드로 담는 두 가지 방법
① 인접 리스트 — 각 점마다 "내가 이어진 점들"의 목록.
실무에서 거의 항상 이걸 씁니다.
② 인접 행렬 — n×n 표에 이어졌으면 1, 아니면 0.
간단하지만 점이 3만 개면 9억 칸이 필요합니다.
같은 관계를 두 가지로 표현했습니다. 어느 쪽이 더 효율적일까요?
🎮 관계망 편집기
점을 클릭해 선을 잇거나 끊어 보세요.
인접 리스트와 인접 행렬이 동시에 갱신됩니다.
점의 개수를 늘리면 행렬이 얼마나 빨리 커지는지도 보여 줍니다.
쇼핑몰의 그래프들
| 그래프 | 정점 | 간선 | 쓰임새 |
| 함께 구매 | 상품 | 같은 주문에 담김 (가중치=횟수) | 추천 (15강) |
| 카테고리 | 카테고리 | 상위→하위 (트리) | 메뉴 전개 |
| 배송망 | 창고·집하지 | 운송 가능 (가중치=비용) | 최저 비용 경로 |
| 계정 관계 | 계정 | 같은 카드·IP·주소 사용 | 부정거래 탐지 (18강) |
| 서비스 의존 | 서버·서비스 | A가 B를 호출 | 장애 영향 범위 파악 |
재귀로 트리를 훑는 기본형입니다. 15강에서 본격적으로 다룹니다.
🤔 확인 문제
상품 30,000개의 '함께 구매' 관계를 인접 행렬로 저장하면 필요한 칸 수는?
해설 30,000² = 9억 칸입니다. 대부분 0으로 채워지죠. 실제 관계는 30만 개쯤이니 인접 리스트를 쓰면 30만 칸이면 됩니다.
🤔 확인 문제
카테고리 구조처럼 순환이 없고 부모가 하나인 그래프를 무엇이라 부를까요?
해설 트리입니다. 그래프의 특별한 경우라서 그래프 알고리즘이 그대로 적용돼요.
🤔 확인 문제
그래프를 훑을 때 방문한 곳을 기록해야 하는 이유는?
해설 A→B→C→A 같은 순환이 있으면 영원히 돕니다. visited 집합으로 막는 것이 그래프 탐색의 기본이에요.