[Tech] 빅데이터 알고리즘을 활용한 이상 패턴(Anomaly Detection) 탐지 시스템 구축기

salex·약 23시간 전

왜 룰(Rule) 기반으로는 부족한가?

안녕하세요. MT-LAB(먹튀랩)의 데이터 엔지니어링 팀입니다. 우리는 매일 수백만 건의 트랜잭션 로그가 발생하는 온라인 게이밍(iGaming) 플랫폼 시장을 모니터링하고 있습니다.

초기에는 단순한 Rule-Based 시스템(예: "10분 내 5회 이상 IP 변경 시 차단")을 사용했습니다. 하지만 악성 운영자(Scammer)들은 이 규칙을 교묘하게 우회하기 시작했습니다. VPN을 통한 IP 세탁, User-Agent 로테이션, 그리고 정상 유저처럼 보이는 '지능형 시뮬레이션'까지.

우리는 깨달았습니다. 인간이 정한 규칙은 깨지기 마련이라고. 그래서 우리는 비지도 학습(Unsupervised Learning) 기반의 이상 탐지 모델을 도입하여, 알려지지 않은 패턴(Unknown Patterns)까지 잡아내는 'Deep-Watch' 프로젝트를 시작했습니다.

오늘은 그 기술적 여정을 공유합니다.

System Architecture (시스템 구조)

실시간성을 보장하기 위해 우리는 다음과 같은 파이프라인을 구축했습니다.

Data Ingestion: Fluentd를 사용하여 전 세계 3,000개 타겟 서버의 Access Log와 Packet 데이터를 수집.

Message Queue: Apache Kafka를 통해 초당 5만 건 이상의 로그를 버퍼링 없이 처리.

Processing: Apache Spark (Streaming)로 실시간 데이터 전처리 및 피처(Feature) 추출.

Storage: Elasticsearch (로그 검색용) + InfluxDB (시계열 데이터용).

Analysis: Python (Scikit-learn, TensorFlow) 기반의 추론 엔진.

Core Logic: 고립 숲(Isolation Forest) 알고리즘 적용

우리가 주목한 알고리즘은 Isolation Forest입니다. 대부분의 정상 데이터는 서로 뭉쳐 있고(Dense), 이상 데이터(먹튀 징후)는 멀리 떨어져 있고 고립되기 쉽다는 점에 착안한 모델입니다.

우리는 서버에서 수집된 로그 중 다음 3가지 차원(Dimension)을 벡터화했습니다.

RTP Volatility (환수율 변동성): 특정 시간대에 승률이 0%로 수렴하는 구간이 존재하는가?

Latency Jitter (지연 시간): 배팅 요청 시 고의적인 딜레이(Lag)가 발생하는가?

Session Discontinuity (세션 불연속성): 로그인 세션이 비정상적으로 자주 끊기는가?

[Python Pseudocode Implementation]


Python
import pandas as pd
from sklearn.ensemble import IsolationForest

# 1. 데이터 로드 (전처리된 로그 데이터)
# features: [rtp_volatility, latency_ms, session_breaks]
data = load_server_logs_from_db()

# 2. 모델 학습 (Contamination은 전체의 1%를 이상징후로 가정)
model = IsolationForest(n_estimators=100, contamination=0.01, random_state=42)
model.fit(data)

# 3. 이상치 탐지 (Predict: -1 = Anomaly, 1 = Normal)
data['anomaly_score'] = model.decision_function(data)
data['is_scam'] = model.predict(data)

# 4. 결과 필터링
detected_scams = data[data['is_scam'] == -1]

print(f"[Alert] 탐지된 고위험 서버 수: {len(detected_scams)}")
# 결과값 예시: 위험도 -0.85 이상의 서버들을 블랙리스트 큐로 전송

이 간단해 보이는 코드가 실제 환경에서는 놀라운 성능을 발휘했습니다. 사람의 눈으로는 절대 찾을 수 없는 "평소와 미세하게 다른 입출금 패턴"을 기계는 수학적 거리(Distance)로 찾아냈습니다.

Case Study: '주말 야간'의 유령 트래픽

모델 배포 후 첫 주말, 흥미로운 데이터가 포착되었습니다. 특정 서버 그룹(Cluster A)에서 매주 금요일 밤 11시부터 새벽 2시 사이에 '가짜 당첨 로그'가 급증하는 패턴이 발견된 것입니다.

현상: 실제 유저 트래픽은 없는데, DB 상으로는 고액 당첨이 계속 발생함.

분석: 운영자가 유저들을 유혹하기 위해 '바람잡이 봇'을 돌려 가짜 당첨 현황을 전광판에 띄우고 있었음.

검증: 해당 시간대 실제 트래픽(Network I/O)과 애플리케이션 로그 간의 불일치(Mismatch) 확인.

우리는 이 패턴을 'Phantom Winning(유령 당첨)'으로 명명하고, 해당 패턴이 발견되는 즉시 위험 등급을 [Critical]로 격상시키는 자동화 로직을 추가했습니다.

Conclusion: 데이터는 거짓말을 하지 않는다

개발자로서 가장 보람찬 순간은, 막연한 '심증'이 명확한 '데이터'로 증명될 때입니다. 화려한 배너 광고와 입발린 홍보 멘트는 조작할 수 있습니다. 하지만 서버가 뱉어내는 Raw Data와 알고리즘의 스코어는 조작할 수 없습니다.

MT-LAB의 기술팀은 지금도 24시간 돌아가는 GPU 서버실에서, 수천 개의 사설 서버를 실시간으로 모니터링하고 있습니다. 우리가 쌓아 올린 이 거대한 데이터 댐(Data Dam)이, 정보의 비대칭으로 고통받는 유저들에게 확실한 나침반이 되기를 바랍니다.

우리의 알고리즘이 분석한 실시간 서버 안전도 평가 리포트가 궁금하시다면, 아래 데이터 센터에서 직접 확인하실 수 있습니다.

👉 먹튀랩 데이터 센터

0개의 댓글