본문 바로가기
장인으로의 여정/유용한 TIP

🚀 Hyperscan 완벽 가이드! 초고속 정규식 매칭 라이브러리 사용법 💡✨

by 유기농프로그래밍 2025. 2. 15.
반응형

하이퍼스캔

📌 목차

  1. Hyperscan이란? (개요 & 특징)
  2. Hyperscan의 핵심 기능 & 장점
  3. Hyperscan 설치 방법 (Linux & Windows)
  4. Hyperscan 기본 사용법 (코드 예제 포함)
  5. Hyperscan을 활용한 고급 응용 사례

🔍 Hyperscan이란? (개요 & 특징)

HyperscanIntel에서 개발한 고성능 정규식(Regex) 매칭 라이브러리입니다.
CPU의 SIMD(벡터 연산) 기능을 활용하여 대량의 텍스트를 빠르게 분석하는 것이 특징입니다.

정규식 매칭 성능이 매우 빠름 (PCRE 대비 수십 배 성능 향상 가능)
멀티 스레드 및 스트리밍 데이터 지원
보안, 네트워크 트래픽 분석, 로그 분석 등에 활용 가능
Intel CPU의 SIMD(AVX2, SSE) 최적화

💡 PCRE보다 빠른 정규식 매칭이 필요할 때 Hyperscan이 최고의 선택!


⚙️ Hyperscan의 핵심 기능 & 장점

🚀 1. 초고속 정규식 매칭

  • 기존 정규식 엔진 대비 수십 배 빠른 성능
  • 멀티 패턴 검색 가능 (한 번에 여러 정규식을 검색)

📂 2. 스트리밍 지원

  • 파일, 네트워크 패킷 등 실시간 데이터 스트리밍 분석 가능

🔄 3. 멀티 스레드 최적화

  • CPU 코어를 최대한 활용하여 병렬 정규식 처리 가능

💡 보안 솔루션, 침입 탐지 시스템(IDS), 로그 분석 시스템에서 자주 활용!


🛠 Hyperscan 설치 방법

🔹 1. Linux (Ubuntu 기준) 설치 방법

sudo apt update
sudo apt install libhyperscan-dev

또는 소스 코드 직접 빌드:

git clone https://github.com/intel/hyperscan.git
cd hyperscan
mkdir build && cd build
cmake ..
make -j$(nproc)
sudo make install

🔹 2. Windows에서 설치 방법

Windows에서는 WSL(Windows Subsystem for Linux)을 이용하거나,
CMake를 사용해 직접 빌드할 수 있습니다.

1️⃣ CMake 설치 후, GitHub에서 소스 코드 다운로드
2️⃣ Visual Studio에서 빌드 진행
3️⃣ DLL & 라이브러리 파일을 프로젝트에 추가

💡 Windows에서는 MSVC 컴파일러를 이용한 빌드 추천!


💻 Hyperscan 기본 사용법 (코드 예제 포함)

📌 1. C++에서 기본적인 Hyperscan 사용 예제

#include <hs/hs.h>
#include <iostream>

// 정규식 매칭 시 호출될 콜백 함수
int matchHandler(unsigned int id, unsigned long long from,
                 unsigned long long to, unsigned int flags, void *ctx) {
    std::cout << "Match found from " << from << " to " << to << std::endl;
    return 0;
}

int main() {
    hs_database_t *db = nullptr;
    hs_compile_error_t *compileErr;
    hs_scratch_t *scratch = nullptr;

    // 정규식 패턴
    const char *pattern = "hello";
    
    // 정규식 컴파일
    if (hs_compile(pattern, HS_FLAG_CASELESS, HS_MODE_BLOCK, nullptr, &db, &compileErr) != HS_SUCCESS) {
        std::cerr << "Compile error: " << compileErr->message << std::endl;
        hs_free_compile_error(compileErr);
        return -1;
    }

    // Scratch 공간 할당
    if (hs_alloc_scratch(db, &scratch) != HS_SUCCESS) {
        std::cerr << "Scratch allocation failed" << std::endl;
        hs_free_database(db);
        return -1;
    }

    // 매칭 수행
    const char *text = "Hello, world! This is a hello test.";
    if (hs_scan(db, text, strlen(text), 0, scratch, matchHandler, nullptr) != HS_SUCCESS) {
        std::cerr << "Scan failed" << std::endl;
    }

    // 자원 해제
    hs_free_scratch(scratch);
    hs_free_database(db);

    return 0;
}

설명:

  • "hello"라는 패턴을 검색하는 정규식 컴파일
  • hs_scan()을 이용해 문자열에서 정규식 패턴 찾기
  • 매칭이 발생하면 콜백 함수(matchHandler)가 실행됨

💡 멀티 패턴 검색이 가능하며, 성능 최적화를 위해 hs_compile() 옵션 조정 가능!


🎯 Hyperscan을 활용한 고급 응용 사례

🔥 1. 네트워크 침입 탐지 시스템(IDS)에서 악성 패턴 검색

Wireshark, Snort 등의 보안 툴에서 정규식 탐지 가속화
악성 URL, 피싱 도메인 필터링에 활용 가능

📊 2. 로그 분석 시스템 (ELK, Splunk) 속도 향상

대량의 서버 로그 데이터에서 특정 패턴을 빠르게 찾을 때 사용

🤖 3. AI & 머신러닝 데이터 전처리 속도 향상

정규식 기반 데이터 필터링 & 전처리를 GPU보다 빠르게 수행 가능

💡 기존의 PCRE 기반 정규식 매칭보다 10~100배 빠른 속도로 분석 가능!


🔗 자세히 알아보기

Hyperscan 사용법


📌 태그

#Hyperscan #Intel #정규식 #Regex #고속검색 # 보안분석  #네트워크필터링 #로그분석 #패턴매칭 #C++라이브러리

반응형

댓글