알고리즘 | 크루스칼 메소드

Faithful Dev·2026년 2월 5일

셀파트너랩스

목록 보기
9/11

질문에서 시작하기

우리는 단일 상품만 등록하는데,,

상품등록그룹상품등록

네이버 솔루션 API 전환을 하다가 문득 그룹 상품 등록이 눈에 띄었다.
우리는 단일 상품만 쓰고 있는데,, 흠.
그룹 상품은 뭐지?


등록과 추천은 다른 이야기일지도

  • 상품 등록 = 시스템에 상품을 넣는 기준
  • 상품 추천 = 어떤 상품을, 어떤 기준으로 묶어서 보여줄지

셀파트너는 지금 단일 상품을 기준으로 상품을 추천해주고 있다.

그렇다면, 그룹 상품 등록은 우리에게 필요한 기능일까?


상품을 아주 단순하게 표현해보자면,,

  • 상품 → 점

  • 상품 추천의 단위 → 선

  • A 상품과 B 상품이 자주 같이 팔린다면

  • A와 B 사이에는 굵은 선이 하나 생긴다

그렇다면 상품 추천은 결국 점과 점을 어떻게 연결하느냐의 문제가 된다.
마치 그래프,, 라 할 수 있다.


문제는

다 연결하면 너무 복잡함

그럼 모든 상품을 전부 연결하면?

  • A도 B랑 연결
  • A도 C랑 연결
  • B도 C랑 연결
  • C도 D랑 연결

셀러 입장에서는

그래서 어쩌라고?,,,

모든 관계를 다 보여주는 건 판단을 오히려 어렵게 만들 것 같다.
그럼 정말 필요한 연결만 남길 수는 없을까?


MST: 꼭 필요한 연결만 남긴다는 생각

여기서 오늘 공부했던 개념이 최소 신장 트리(MST).
이름은 어렵지만,, 개념은 꽤 직관적이다.

모든 점을 연결하되, 가장 작은 연결만으로 설명하자

상품 추천으로 치환해보자면,,

  • 다 묶을 필요는 없고,
  • 가장 의미 있는 연결 몇 개면 충분하다는 것.

"왜 이 상품들이 추천 대상인지"


그럼 어떤 연결부터 남겨야 하는데?

연결은 줄이겠는데... 그럼 뭘 기준으로 남겨야 하나ㅏ,,
그래서 한 단계 더 들어가면 Kruskal 알고리즘이 등장한다.


Kruskal: 제일 확실한 것부터

  1. 제일 확실한 관계부터 보기
  2. 하나씩 연결해보기
  3. 이미 충분히 연결된 경우는 넘어가기

"일단 잘 팔리는 조합부터 보자"


Union-Find: 이미 같은 묶음일까?

Kruskal이 제대로 동작하기 위해서는 이 두 상품이 이미 같은 그룹인지 확인이 필수다.
이걸 확인하는 게 Union-Find.

Union-Find는

  • 상품이 어떤 그룹에 속해 있는지 관리하고
  • 이미 묶인 상품을 또 묶지 않게 해준다

이게 없으면

  • 비슷한 그룹이 계속 생기고
  • 구조는 금방 복잡해짐

Path Compression

한 번 확인한 건, 다음엔 더 빠르게

Union-Find의 최적화 Path Compression

처음에는

  • A랑 D가 같은 그룹인지 확인하려면
  • A → B → C → D 여러 단계를 거쳐야 할 가능성이 높음

한 번 확인하고 나면

  • A, B, C가 전부 바로 D를 가리키게 되는 것.

한 번 검증된 상품 묶음은 다음엔 훨씬 빠르게 판단할 수 있다.

데이터가 쌓이면 판단은 가벼워진다.


그래서

  • MST: 꼭 필요한 만큼만 묶고
  • Kruskal: 가장 신뢰할 수 있는 관계부터 선택하고
  • Union-Find + Path Compression: 중복 없이, 점점 더 빠르게 판단

이긴 한데,, 결국 처음의 질문으로 돌아와서
그룹 상품 API 필요하다고?
라고 하면 아아직은,,,, 안필요한듯,, 그냥 공부에 의의를 두기로 ㅎ


나는

개발을 하다 보면 기능을 만드는 데만 집중하게 된다.
오늘도 스터디를 앞두고 시작하지 못한 쿠팡이 눈앞에 아른거렸다..

그렇지만,,
좋은 기능은 잠시 쉬었다 가는 것,
또 좋은 질문에서 시작한다고 생각한다.

  • 이 기능은 왜 필요할까
  • 이 구조는 누구를 위한 것일까
  • 더 단순하게 설명할 방법을 없을까

계속 공부하고 질문하는 개발자 되기

profile
Turning Vision into Reality.

0개의 댓글