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๋ฅผ ๋ค๋ฃน๋๋ค. ๋ฉํ๋ฐ์ดํฐ์ ์์ง, ์ ์ฅ, ๊ด๋ฆฌ ๋ฐฉ๋ฒ๊ณผ ์๋ํ ์ ๋ต์ ๋ฐฐ์ฐ๊ฒ ๋ฉ๋๋ค.