전체 목록
자료구조Hard#175

Bloom Filter의 장점과 한계를 설명해주세요.

#자료구조#BloomFilter#확률자료구조#캐시

답변 포인트

메모리 효율과 false positive를 기준으로 정의, 장점, 한계, 예시를 함께 설명해보세요.

정답 및 해설

빠른 요약

Bloom Filter는 적은 메모리로 포함 가능성을 빠르게 판단하는 확률적 자료구조입니다. 없다는 결과는 확실하지만 있다는 결과는 오탐일 수 있습니다.

Bloom Filter는 원소가 집합에 없다는 사실은 확실히 말할 수 있고, 있다는 사실은 확률적으로만 말하는 메모리 효율적인 자료구조입니다. 대량 데이터에서 비싼 조회를 하기 전에 빠르게 걸러내는 용도로 많이 사용됩니다.

핵심 개념

  • 여러 해시 함수로 bit array의 여러 위치를 1로 설정합니다.
  • 조회 시 해당 위치가 하나라도 0이면 원소는 확실히 없습니다.
  • 모두 1이면 있을 가능성이 있지만, 다른 원소들이 만든 bit 때문에 false positive가 발생할 수 있습니다.

동작 방식 또는 판단 기준

이 주제를 이해할 때는 다음 순서로 보면 실무 적용이 쉬워집니다.

  1. 무엇을 해결하려는가: 성능, 표현력, 안정성, 접근성 중 어떤 문제를 줄이려는지 확인합니다.
  2. 전제 조건은 무엇인가: 정렬 여부, 브라우저 지원, 네트워크 특성, 동시성 조건처럼 성립해야 하는 조건을 점검합니다.
  3. 비용은 어디서 발생하는가: 시간 복잡도, 메모리, 캐시, 재시도, 렌더링 비용처럼 병목 지점을 나눠 봅니다.
  4. 실패 시 어떤 문제가 생기는가: 잘못 적용했을 때의 버그나 운영 리스크를 함께 고려합니다.

실제 예시

Text
insert("alice") -> h1=2, h2=7, h3=10  1 
contains("bob")
  - h1/h2/h3    0 -> definitely not exists
  -  1 -> probably exists
JavaScript
// 실무 활용 예
if (!bloomFilter.mightContain(userId)) {
  return null; // DB 조회 생략 가능
}
return db.users.findById(userId); // 오탐 가능성이 있으므로 실제 조회로 확인

실무에서 주의할 점

  • false negative는 없도록 설계하지만 false positive는 존재합니다. 따라서 '있다'는 결과만 믿고 중요한 처리를 끝내면 안 됩니다.
  • 기본 Bloom Filter는 삭제가 어렵습니다. 삭제가 필요하면 Counting Bloom Filter를 검토합니다.
  • 예상 원소 수보다 훨씬 많이 넣으면 false positive 비율이 급격히 올라갑니다.

실무 적용 가이드

  • 캐시 관통(cache penetration) 방지, 크롤러 중복 URL 필터링, 악성 URL 후보 필터링에 활용됩니다.
  • bit array 크기와 해시 함수 개수는 목표 false positive rate와 예상 데이터 수로 계산합니다.
  • Bloom Filter 뒤에는 항상 실제 저장소 검증 단계를 둡니다.

함께 연결해서 보면 좋은 키워드

Bloom Filter, Probabilistic Data Structure, False Positive, Cache

정리

Bloom Filter는 원소가 집합에 없다는 사실은 확실히 말할 수 있고, 있다는 사실은 확률적으로만 말하는 메모리 효율적인 자료구조입니다. 다만 개념 자체보다 중요한 것은 적용 조건과 한계를 함께 이해하는 것입니다. 작은 예제에서는 단순해 보여도 실제 서비스에서는 성능, 보안, 유지보수성, 접근성 요구사항이 함께 얽히므로, 문제의 성격을 먼저 파악한 뒤 적절한 도구로 선택하는 것이 좋습니다.

관련 질문

같은 카테고리/태그 기준