2.1 검색 아키텍처
효과적인 데이터 카탈로그 검색 시스템은 다음 컴포넌트로 구성됩니다:
- Crawler (크롤러): 데이터 소스에서 메타데이터 수집
- Indexer (인덱서): 수집된 메타데이터를 검색 가능한 형태로 색인
- Search Engine (검색 엔진): 사용자 쿼리 처리 및 결과 반환
- Ranker (순위 매김): 검색 결과의 관련도에 따라 정렬
Elasticsearch 기반 검색 구현
대부분의 현대적인 데이터 카탈로그는 Elasticsearch를 검색 엔진으로 사용합니다. Elasticsearch는 전문 검색, 자동완성, 퍼지 매칭 등을 제공합니다.
{
"mappings": {
"properties": {
"name": {
"type": "text",
"analyzer": "standard",
"fields": {
"keyword": { "type": "keyword" },
"autocomplete": { "type": "text", "analyzer": "autocomplete" }
}
},
"description": { "type": "text" },
"tags": { "type": "keyword" },
"platform": { "type": "keyword" },
"owner": { "type": "keyword" },
"updated_at": { "type": "date" }
}
}
}
2.2 검색 쿼리 유형
1) 키워드 검색 (Keyword Search)
가장 기본적인 검색 방식으로, 사용자가 입력한 키워드와 일치하는 데이터를 찾습니다.
2) 퍼지 검색 (Fuzzy Search)
오타가 있어도 유사한 결과를 반환합니다. "custmer" → "customer"
3) 와일드카드 검색
패턴 매칭을 지원합니다. "customer_*" → customer_id, customer_email, customer_name
4) 필터 검색
특정 조건으로 결과를 필터링합니다.
- 플랫폼 = PostgreSQL
- 소유자 = data-team@company.com
- 태그 = customer-domain
- 업데이트 날짜 > 2025-01-01
2.3 자동완성 (Autocomplete)
사용자가 타이핑하는 동안 실시간으로 추천 검색어를 제공합니다. 이는 사용자 경험을 크게 향상시키고 검색 시간을 단축합니다.
자동완성 구현 방법
- Prefix Matching: 입력된 문자로 시작하는 단어 찾기
- N-Gram: 문자 조합을 미리 색인하여 부분 일치 지원
- Completion Suggester: Elasticsearch의 전용 자동완성 기능
자동완성은 다음 순서로 결과를 보여줍니다:
- 정확히 일치하는 테이블명
- 접두사가 일치하는 컬럼명
- 태그나 설명에 키워드가 포함된 항목
- 최근 검색 이력
2.4 관련도 순위 (Relevance Ranking)
검색 결과의 순위를 결정하는 것은 매우 중요합니다. 관련도 점수는 다음 요소들을 고려합니다:
| 요소 | 가중치 | 설명 |
|---|---|---|
| 텍스트 유사도 | 40% | TF-IDF, BM25 알고리즘 |
| 인기도 | 20% | 조회수, 쿼리 빈도 |
| 신선도 | 15% | 최근 업데이트 시간 |
| 품질 점수 | 15% | 문서화 완성도 |
| 개인화 | 10% | 사용자 이력, 팀 정보 |
BM25 알고리즘
Elasticsearch의 기본 순위 알고리즘인 BM25는 다음 공식을 사용합니다:
score(D,Q) = Σ IDF(qi) × (f(qi,D) × (k1 + 1)) / (f(qi,D) + k1 × (1 - b + b × |D| / avgdl))
여기서:
- D: 문서 (데이터셋)
- Q: 쿼리
- f(qi,D): 문서 D에서 키워드 qi의 빈도
- |D|: 문서 길이
- avgdl: 평균 문서 길이
- k1, b: 조정 매개변수
2.5 고급 검색 기능
1) 패싯 검색 (Faceted Search)
왼쪽 사이드바에 카테고리별 필터를 제공하여 결과를 점진적으로 좁혀갈 수 있습니다.
- Platform: PostgreSQL (234), MySQL (156), BigQuery (89)
- Type: Table (456), View (123), File (67)
- Owner: data-team (145), analytics-team (89)
- Tags: customer (234), pii (156), financial (89)
2) 시맨틱 검색 (Semantic Search)
키워드가 아닌 의미를 기반으로 검색합니다. "고객 이메일" 검색 시 "customer_email", "user_email", "contact_email"을 모두 찾습니다.
BERT, Sentence Transformers 등 언어 모델을 사용하여 쿼리와 문서를 벡터로 변환하고 유사도를 계산합니다.
3) 컬럼 레벨 검색
테이블뿐만 아니라 개별 컬럼 수준에서도 검색을 지원합니다. "email 타입의 PII 데이터"를 찾을 수 있습니다.
2.6 검색 성능 최적화
인덱싱 최적화
- 샤딩: 데이터를 여러 샤드로 분산하여 병렬 검색
- 레플리카: 읽기 처리량 증가를 위한 복제본 생성
- 캐싱: 자주 검색되는 쿼리 결과 캐싱
- 증분 인덱싱: 변경된 데이터만 재색인
쿼리 최적화
{
"query": {
"bool": {
"must": [
{ "match": { "name": "customer" } }
],
"filter": [
{ "term": { "platform": "PostgreSQL" } },
{ "range": { "updated_at": { "gte": "2025-01-01" } } }
],
"should": [
{ "match": { "tags": "high-quality" } }
]
}
}
}
filter사용 시 점수 계산을 건너뛰어 빠름must는 관련도 점수에 영향should는 선택적 부스팅
2.7 개인화된 검색
사용자의 역할, 팀, 과거 검색 이력을 활용하여 맞춤형 결과를 제공합니다.
| 사용자 | 검색: "customer" | 상위 결과 |
|---|---|---|
| 마케팅 팀 | 고객 세그먼트 데이터 | customers.customer_segment |
| 재무 팀 | 고객 결제 정보 | customers.payment_method |
| 데이터 팀 | 전체 고객 테이블 | customers (전체) |
2.8 실전 검색 시나리오
검색: email pii
필터:
- Classification: PII
- Data Type: VARCHAR
결과:
1. customers.email
2. users.email_address
3. orders.customer_email
검색: *
필터:
- Updated After: 2025-11-26
- Quality Score: >= 0.9
- Type: TABLE
정렬: Quality Score (내림차순)
결과:
1. customer_analytics (0.98)
2. order_summary (0.95)
3. product_catalog (0.92)
2.9 다음 장 예고
다음 장에서는 Metadata Management를 다룹니다. 메타데이터의 수집, 저장, 관리 방법과 자동화 전략을 배우게 됩니다.