본문 바로가기
Web Programming Language/JAVA

MurmurHash3

by manchesterandthecity 2025. 2. 17.

MurmurHash3

1. MurmurHash3란?

MurmurHash3는 높은 성능과 뛰어난 해시 품질을 제공하는 비암호학적 해시 함수이다.

원래 Austin Appleby에 의해 개발되었으며, 특히 해시 테이블과 같은 데이터 구조에서 균등한 해시 분포를 제공하는 데 최적화되어 있다.

자바에서는 Apache Commons Codec 또는 Guava 라이브러리를 활용하여 MurmurHash3을 사용할 수 있다.


2. MurmurHash3의 특징

  • 비암호학적 해시 함수: 보안이 아닌 빠르고 균일한 해싱을 목표로 함
  • 우수한 해시 분포: 충돌 가능성이 낮고, 데이터 분포가 고르게 퍼짐
  • 빠른 성능: CPU 친화적인 설계로 매우 빠르게 해시 값을 생성
  • 고정된 크기의 해시 출력: 32비트 또는 128비트 해시 값 제공
  • 엔디언(Endianness) 독립적: x86과 x64 아키텍처에서 일관된 결과 보장

3. MurmurHash3 구현 방법

3.1. Apache Commons Codec을 이용한 MurmurHash3

Apache Commons Codec 라이브러리는 MurmurHash3을 쉽게 사용할 수 있도록 제공한다.

Maven 의존성 추가

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.15</version>
</dependency>

Java 코드 예제

import org.apache.commons.codec.digest.MurmurHash3;

public class MurmurHashExample {
    public static void main(String[] args) {
        String input = "Hello, MurmurHash3!";
        int hash32 = MurmurHash3.hash32x86(input.getBytes());
        long[] hash128 = MurmurHash3.hash128x64(input.getBytes());

        System.out.println("32-bit Hash: " + hash32);
        System.out.println("128-bit Hash: " + hash128[0] + ", " + hash128[1]);
    }
}

3.2. Guava 라이브러리를 이용한 MurmurHash3

Google Guava 라이브러리에도 MurmurHash3 기반 해시 기능이 포함되어 있다.

Maven 의존성 추가

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>32.0.1-jre</version>
</dependency>

Java 코드 예제

import com.google.common.hash.HashFunction;
import com.google.common.hash.Hashing;
import java.nio.charset.StandardCharsets;

public class GuavaMurmurHashExample {
    public static void main(String[] args) {
        HashFunction murmur3_32 = Hashing.murmur3_32();
        int hashValue = murmur3_32.hashString("Hello, Guava MurmurHash3!", StandardCharsets.UTF_8).asInt();
        
        System.out.println("MurmurHash3 (32-bit) using Guava: " + hashValue);
    }
}

4. MurmurHash3의 다양한 활용 사례

활용 사례 설명
해시 테이블 균일한 해시 분포로 충돌을 최소화
Bloom Filter 빠른 해싱으로 효율적인 확률적 데이터 구조 구현
데이터 샘플링 대규모 데이터에서 균등한 샘플 추출
로그 분석 대량의 로그 데이터를 효과적으로 해싱하여 색인
게임 및 그래픽 무작위 값 생성, 셰이딩 기법 등에서 활용

5. MurmurHash3와 다른 해시 함수 비교

해시 함수 속도 충돌 가능성 암호학적 보안
MurmurHash3 빠름 매우 낮음 보안 목적 X
MD5 중간 높음 보안 취약
SHA-256 느림 극히 낮음 암호학적 안전
CRC32 매우 빠름 높음 보안 목적 X

MurmurHash3는 보안이 아닌 빠른 데이터 해싱과 균등한 분포가 필요한 경우에 최적화된 해시 함수이다.


6. 결론

MurmurHash3는 빠르고 균일한 해시 값을 생성하는 비암호학적 해시 함수로, 해시 테이블, Bloom Filter, 로그 분석 등의 다양한 분야에서 활용된다.
Java에서는 Apache Commons Codec이나 Google Guava 라이브러리를 통해 손쉽게 구현할 수 있으며, 성능과 균일한 해시 분포가 필요한 경우 최적의 선택이 될 수 있다.

댓글