์ธ๋ฑ์ฑ, ์ฟผ๋ฆฌ, ๊ด๋ จ์ฑ ํ๋, ์ฑ๋ฅ ์ต์ ํ, ์ค์ ๊ตฌํ ์ ๋ต์ ๋ค๋ฃจ๋ฉฐ ์ํ ๊ฒ์์ ์ํ Elasticsearch์ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ํ์ํฉ๋๋ค.
์ํ ๊ฒ์: Elasticsearch ๊ตฌํ์ ์ํ ์ข ํฉ ๊ฐ์ด๋
์ค๋๋ ์ ๋์งํธ ํ๊ฒฝ์์ ๊ฐ๋ ฅํ๊ณ ํจ์จ์ ์ธ ์ํ ๊ฒ์ ๊ธฐ๋ฅ์ ์ด์ปค๋จธ์ค ์ฑ๊ณต์ ๊ฐ์ฅ ์ค์ํฉ๋๋ค. ๊ณ ๊ฐ๋ค์ ์ฐพ๊ณ ์๋ ๊ฒ์ ๋น ๋ฅด๊ณ ์ฝ๊ฒ ์ฐพ๊ธฐ๋ฅผ ๊ธฐ๋ํ๋ฉฐ, ์ ๋๋ก ๊ตฌํ๋์ง ์์ ๊ฒ์ ๊ฒฝํ์ ์ข์ ๊ฐ, ๋งค์ถ ์์ค, ๋ธ๋๋ ํํ ์์์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค. ๊ฐ๋ ฅํ ์คํ ์์ค ๊ฒ์ ๋ฐ ๋ถ์ ์์ง์ธ Elasticsearch๋ ์ ๊ตํ ์ํ ๊ฒ์ ๊ธฐ๋ฅ์ ๊ตฌ์ถํ๊ธฐ ์ํ ํ์ฅ ๊ฐ๋ฅํ๊ณ ์ ์ฐํ ์๋ฃจ์ ์ ์ ๊ณตํฉ๋๋ค. ์ด ์ข ํฉ ๊ฐ์ด๋์์๋ ์ด๊ธฐ ์ค์ ๋ถํฐ ๊ณ ๊ธ ์ต์ ํ ๊ธฐ์ ๊น์ง ์ํ ๊ฒ์์ ์ํ Elasticsearch ๊ตฌํ์ ๋ชจ๋ ๋ณต์กํ ๊ณผ์ ์ ์์ธํ ๋ค๋ฃน๋๋ค.
์ํ ๊ฒ์์ Elasticsearch๋ฅผ ์ ํํด์ผ ํ๋ ์ด์
Elasticsearch๋ ๊ธฐ์กด ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฒ์ ์๋ฃจ์ ์ ๋นํด ์ฌ๋ฌ ์ฅ์ ์ ์ ๊ณตํ์ฌ ์ต์ ์ด์ปค๋จธ์ค ํ๋ซํผ์ ์ด์์ ์ธ ์ ํ์ ๋๋ค:
- ์ ๋ฌธ ๊ฒ์(Full-Text Search): Elasticsearch๋ ์ ๋ฌธ ๊ฒ์์ ํ์ํ์ฌ ์ฌ์ฉ์๊ฐ ์ ํํ ์ํ๋ช ์ด๋ SKU๋ฅผ ๋ชจ๋ฅด๋๋ผ๋ ์ํ์ ์ฐพ์ ์ ์๊ฒ ํด์ค๋๋ค. ๊ฒ์ ์ ํ๋๋ฅผ ๋์ด๊ธฐ ์ํด ์ด๊ฐ ์ถ์ถ, ๋์์ด ํ์ฅ ๋ฐ ๊ธฐํ ๊ธฐ์ ์ ์ง์ํฉ๋๋ค.
- ํ์ฅ์ฑ: Elasticsearch๋ ํ์ฅ์ฑ์ ์ํด ์ค๊ณ๋์์ต๋๋ค. ๋ฐฉ๋ํ ์์ ๋ฐ์ดํฐ์ ๋์ ์ฟผ๋ฆฌ๋์ ์ฒ๋ฆฌํ ์ ์์ด ๋ชจ๋ ๊ท๋ชจ์ ๋น์ฆ๋์ค์ ์ ํฉํฉ๋๋ค.
- ์๋: Elasticsearch๋ ๋งค์ฐ ๋น ๋ฆ ๋๋ค. ์ญ ์ธ๋ฑ์ค ๊ตฌ์กฐ๋ ๊ฑฐ์ ์ค์๊ฐ์ ๊ฐ๊น์ด ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ์ฌ ์ํํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค.
- ์ ์ฐ์ฑ: Elasticsearch๋ ์ปค์คํฐ๋ง์ด์ง์ด ๋งค์ฐ ์ฉ์ดํฉ๋๋ค. ๋ง์ถคํ ๋งคํ, ๋ถ์๊ธฐ, ์ค์ฝ์ด๋ง ํจ์ ์ ์๋ฅผ ํฌํจํ์ฌ ์ด์ปค๋จธ์ค ํ๋ซํผ์ ํน์ ์๊ตฌ์ฌํญ์ ๋ง๊ฒ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
- ๋ถ์: Elasticsearch๋ ๋ด์ฅ๋ ๋ถ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ ๊ฒ์ ํธ๋ ๋๋ฅผ ์ถ์ ํ๊ณ , ์ธ๊ธฐ ์ํ์ ์๋ณํ๋ฉฐ, ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๊ฒ์ ๊ด๋ จ์ฑ์ ๊ฐ์ ํ ์ ์์ต๋๋ค.
- ์คํ ์์ค: ์คํ ์์ค์ธ Elasticsearch๋ ํฌ๊ณ ํ๋ฐํ ์ปค๋ฎค๋ํฐ์ ์ด์ ์ ๋๋ฆฌ๋ฉฐ, ํ๋ถํ ๋ฆฌ์์ค, ์ง์, ์ง์์ ์ธ ๊ฐ๋ฐ์ ์ ๊ณต๋ฐ์ต๋๋ค.
Elasticsearch ๊ตฌํ ๊ณํํ๊ธฐ
๊ธฐ์ ์ ์ธ ์ธ๋ถ ์ฌํญ์ ๋ฐ์ด๋ค๊ธฐ ์ ์ Elasticsearch ๊ตฌํ์ ์ ์คํ๊ฒ ๊ณํํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ฌ๊ธฐ์๋ ๊ฒ์ ์๊ตฌ์ฌํญ ์ ์, ๋ฐ์ดํฐ ๋ชจ๋ธ ์ค๊ณ, ์ ์ ํ ํ๋์จ์ด ๋ฐ ์ํํธ์จ์ด ์ ํ์ด ํฌํจ๋ฉ๋๋ค.
1. ๊ฒ์ ์๊ตฌ์ฌํญ ์ ์
๋จผ์ ๊ณ ๊ฐ์๊ฒ ์ ๊ณตํ๊ณ ์ ํ๋ ํต์ฌ ๊ธฐ๋ฅ๊ณผ ์ฑ๋ฅ์ ํ์ ํ๋ ๊ฒ๋ถํฐ ์์ํ์ธ์. ๋ค์ ์ง๋ฌธ๋ค์ ๊ณ ๋ คํด ๋ณด์ธ์:
- ์ด๋ค ์ข ๋ฅ์ ์ฟผ๋ฆฌ๋ฅผ ์ง์ํ๊ณ ์ถ์ผ์ ๊ฐ์? (์: ํค์๋ ๊ฒ์, ํจ์ฏ ๊ฒ์, ์นดํ ๊ณ ๋ฆฌ ๋ธ๋ผ์ฐ์ง, ์ํ ํํฐ๋ง)
- ์ด๋ค ์์ฑ์ ๊ฒ์ ๊ฐ๋ฅํ๊ฒ ํด์ผ ํ๋์? (์: ์ํ๋ช , ์ค๋ช , ๋ธ๋๋, ์นดํ ๊ณ ๋ฆฌ, ๊ฐ๊ฒฉ, ์์, ์ฌ์ด์ฆ)
- ์ด๋ ์์ค์ ์ ํ๋์ ๊ด๋ จ์ฑ์ด ํ์ํ๊ฐ์? (์: ์คํ๋ ์ฒ ์ ์ค๋ฅ์ ๋ํด ์ผ๋ง๋ ๊ด๋ํ ๊ฒ์ธ๊ฐ?)
- ์ด๋ค ์ฑ๋ฅ ์งํ๋ฅผ ์ถฉ์กฑํด์ผ ํ๋์? (์: ํ๊ท ์ฟผ๋ฆฌ ์๋ต ์๊ฐ, ์ต๋ ์ฟผ๋ฆฌ ์ฒ๋ฆฌ๋)
- ๋ค๊ตญ์ด ์ง์์ด ํ์ํ๊ฐ์?
- ๊ฐ์ธํ๋ ๊ฒ์ ๊ฒฐ๊ณผ๊ฐ ํ์ํ๊ฐ์?
2. ๋ฐ์ดํฐ ๋ชจ๋ธ ์ค๊ณ
Elasticsearch์์ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์กฐํํ๋ ๋ฐฉ์์ ๊ฒ์ ์ฑ๋ฅ๊ณผ ๊ด๋ จ์ฑ์ ํฐ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ์ํ ์นดํ๋ก๊ทธ๋ฅผ ์ ํํ๊ฒ ํํํ๊ณ ๊ฒ์ ์๊ตฌ์ฌํญ์ ์ง์ํ๋ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ์ค๊ณํ์ธ์.
๋ค์ ์์๋ค์ ๊ณ ๋ คํ์ธ์:
- ๋ฌธ์ ๊ตฌ์กฐ: ๊ฐ ์ํ์ Elasticsearch์์ ํ๋์ ๋ฌธ์๋ก ํํ๋์ด์ผ ํฉ๋๋ค. ๊ฐ ๋ฌธ์์ ์ด๋ค ์์ฑ์ ํฌํจํ ์ง์ ๊ทธ ๊ตฌ์กฐ๋ฅผ ๊ฒฐ์ ํ์ธ์.
- ๋ฐ์ดํฐ ํ์ : ๊ฐ ์์ฑ์ ์ ์ ํ ๋ฐ์ดํฐ ํ์ ์ ์ ํํ์ธ์. Elasticsearch๋ ํ ์คํธ, ํค์๋, ์ซ์, ๋ ์ง, ๋ถ๋ฆฌ์ธ ๋ฑ ๋ค์ํ ๋ฐ์ดํฐ ํ์ ์ ์ง์ํฉ๋๋ค.
- ๋งคํ: Elasticsearch๊ฐ ๊ฐ ํ๋๋ฅผ ์ด๋ป๊ฒ ๋ถ์ํ๊ณ ์ธ๋ฑ์ฑํด์ผ ํ๋์ง ์ง์ ํ๊ธฐ ์ํด ๋งคํ์ ์ ์ํ์ธ์. ์ฌ๊ธฐ์๋ ์ ์ ํ ๋ถ์๊ธฐ์ ํ ํฌ๋์ด์ ์ ํ์ด ํฌํจ๋ฉ๋๋ค.
์์:
์๋ฅ๋ฅผ ํ๋งคํ๋ ์ด์ปค๋จธ์ค ์คํ ์ด๋ฅผ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์ํ ๋ฌธ์๋ ๋ค์๊ณผ ๊ฐ์ ์ ์์ต๋๋ค:
{
"product_id": "12345",
"product_name": "Premium Cotton T-Shirt",
"description": "A comfortable and stylish t-shirt made from 100% premium cotton.",
"brand": "Example Brand",
"category": "T-Shirts",
"price": 29.99,
"color": ["Red", "Blue", "Green"],
"size": ["S", "M", "L", "XL"],
"available": true,
"image_url": "https://example.com/images/t-shirt.jpg"
}
3. ํ๋์จ์ด ๋ฐ ์ํํธ์จ์ด ์ ํ
Elasticsearch ๊ตฌํ์ ์ง์ํ ์ ์ ํ ํ๋์จ์ด์ ์ํํธ์จ์ด๋ฅผ ์ ํํ์ธ์. ์ฌ๊ธฐ์๋ ์ฌ๋ฐ๋ฅธ ์๋ฒ ๊ตฌ์ฑ, ์ด์ ์ฒด์ , Elasticsearch ๋ฒ์ ์ ํ์ด ํฌํจ๋ฉ๋๋ค.
๋ค์ ์์๋ค์ ๊ณ ๋ คํ์ธ์:
- ์๋ฒ ๊ตฌ์ฑ: ๋ฐ์ดํฐ ๋ฐ ์ฟผ๋ฆฌ ๋ถํ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ์ ์ถฉ๋ถํ CPU, ๋ฉ๋ชจ๋ฆฌ, ์คํ ๋ฆฌ์ง๋ฅผ ๊ฐ์ถ ์๋ฒ๋ฅผ ์ ํํ์ธ์.
- ์ด์ ์ฒด์ : Elasticsearch๋ Linux, Windows, macOS๋ฅผ ํฌํจํ ๋ค์ํ ์ด์ ์ฒด์ ๋ฅผ ์ง์ํฉ๋๋ค.
- Elasticsearch ๋ฒ์ : ์์ ์ ์ด๊ณ ์ง์๋๋ Elasticsearch ๋ฒ์ ์ ์ ํํ์ธ์.
- ์คํ ๋ฆฌ์ง: ๋ ๋น ๋ฅธ ์ธ๋ฑ์ฑ ๋ฐ ์ฟผ๋ฆฌ ์ฑ๋ฅ์ ์ํด SSD๋ฅผ ์ฌ์ฉํ์ธ์.
์ํ ๊ฒ์์ ์ํ Elasticsearch ๊ตฌํํ๊ธฐ
๊ตฌํ ๊ณํ์ ๋ง์ณค๋ค๋ฉด, Elasticsearch๋ฅผ ์ค์ ํ๊ณ ์ํ ๋ฐ์ดํฐ๋ฅผ ์ธ๋ฑ์ฑํ๊ธฐ ์์ํ ์ ์์ต๋๋ค.
1. Elasticsearch ์ค์น ๋ฐ ๊ตฌ์ฑ
๊ณต์ ์น์ฌ์ดํธ์์ Elasticsearch๋ฅผ ๋ค์ด๋ก๋ํ์ฌ ์ค์นํ์ธ์. ์ฌ์ฉ ์ค์ธ ์ด์ ์ฒด์ ์ ๋ํ ์ค์น ์ง์นจ์ ๋ฐ๋ฅด์ธ์. elasticsearch.yml ํ์ผ์ ํธ์งํ์ฌ Elasticsearch๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. ์ด ํ์ผ์์๋ ํด๋ฌ์คํฐ ์ด๋ฆ, ๋
ธ๋ ์ด๋ฆ, ๋คํธ์ํฌ ์ค์ , ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ ๊ฐ์ ๋ค์ํ ์ค์ ์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
์์:
๊ธฐ๋ณธ์ ์ธ elasticsearch.yml ๊ตฌ์ฑ์ ๋ค์๊ณผ ๊ฐ์ ์ ์์ต๋๋ค:
cluster.name: my-ecommerce-cluster node.name: node-1 network.host: 0.0.0.0 http.port: 9200
2. ์ธ๋ฑ์ค ์์ฑ ๋ฐ ๋งคํ ์ ์
Elasticsearch์ ์ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ์ธ์. Elasticsearch๊ฐ ๊ฐ ํ๋๋ฅผ ์ด๋ป๊ฒ ๋ถ์ํ๊ณ ์ธ๋ฑ์ฑํด์ผ ํ๋์ง ์ง์ ํ๊ธฐ ์ํด ๋งคํ์ ์ ์ํฉ๋๋ค. Elasticsearch API๋ฅผ ์ฌ์ฉํ์ฌ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๊ณ ๋งคํ์ ์ ์ํ ์ ์์ต๋๋ค.
์์:
๋ค์ API ํธ์ถ์ products๋ผ๋ ์ด๋ฆ์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๊ณ product_name ๋ฐ description ํ๋์ ๋ํ ๋งคํ์ ์ ์ํฉ๋๋ค:
PUT /products
{
"mappings": {
"properties": {
"product_name": {
"type": "text",
"analyzer": "standard"
},
"description": {
"type": "text",
"analyzer": "standard"
},
"brand": {
"type": "keyword"
},
"category": {
"type": "keyword"
},
"price": {
"type": "double"
}
}
}
}
์ด ์์์์ product_name ๋ฐ description ํ๋๋ standard ๋ถ์๊ธฐ๊ฐ ์ ์ฉ๋ text ํ๋๋ก ๋งคํ๋ฉ๋๋ค. ์ด๋ Elasticsearch๊ฐ ํ
์คํธ๋ฅผ ํ ํฐํํ๊ณ ์ด๊ฐ ์ถ์ถ ๋ฐ ๋ถ์ฉ์ด ์ ๊ฑฐ๋ฅผ ์ ์ฉํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. brand ๋ฐ category ํ๋๋ keyword ํ๋๋ก ๋งคํ๋์ด ๋ถ์ ์์ด ์๋ ๊ทธ๋๋ก ์ธ๋ฑ์ฑ๋ฉ๋๋ค. price๋ double ํ๋๋ก ๋งคํ๋ฉ๋๋ค.
3. ์ํ ๋ฐ์ดํฐ ์ธ๋ฑ์ฑ
์ธ๋ฑ์ค๋ฅผ ์์ฑํ๊ณ ๋งคํ์ ์ ์ํ๋ค๋ฉด, ์ํ ๋ฐ์ดํฐ ์ธ๋ฑ์ฑ์ ์์ํ ์ ์์ต๋๋ค. Elasticsearch API๋ ๋ฒํฌ ์ธ๋ฑ์ฑ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ธ๋ฑ์ฑํ ์ ์์ต๋๋ค.
์์:๋ค์ API ํธ์ถ์ ๋จ์ผ ์ํ ๋ฌธ์๋ฅผ ์ธ๋ฑ์ฑํฉ๋๋ค:
POST /products/_doc
{
"product_id": "12345",
"product_name": "Premium Cotton T-Shirt",
"description": "A comfortable and stylish t-shirt made from 100% premium cotton.",
"brand": "Example Brand",
"category": "T-Shirts",
"price": 29.99,
"color": ["Red", "Blue", "Green"],
"size": ["S", "M", "L", "XL"],
"available": true,
"image_url": "https://example.com/images/t-shirt.jpg"
}
๋์ฉ๋ ๋ฐ์ดํฐ์ ์ ๊ฒฝ์ฐ, ๋ฒํฌ API๋ฅผ ์ฌ์ฉํ์ฌ ์ธ๋ฑ์ฑํ์ธ์. ์ด๋ ๋ฌธ์๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ์ธ๋ฑ์ฑํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ํจ์จ์ ์ ๋๋ค.
4. ๊ฒ์ ์ฟผ๋ฆฌ ์์ฑ
Elasticsearch ์ฟผ๋ฆฌ DSL(Domain Specific Language)์ ์ฌ์ฉํ์ฌ ๊ฒ์ ์ฟผ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ์ธ์. ์ฟผ๋ฆฌ DSL์ ๋ณต์กํ ๊ฒ์ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๊ธฐ ์ํ ํ๋ถํ ์ฟผ๋ฆฌ ์ ์งํฉ์ ์ ๊ณตํฉ๋๋ค.
์์:
๋ค์ ์ฟผ๋ฆฌ๋ product_name ๋๋ description ํ๋์์ "cotton"์ด๋ผ๋ ๋จ์ด๊ฐ ํฌํจ๋ ์ํ์ ๊ฒ์ํฉ๋๋ค:
GET /products/_search
{
"query": {
"multi_match": {
"query": "cotton",
"fields": ["product_name", "description"]
}
}
}
์ด๊ฒ์ ๊ฐ๋จํ ์์์ด์ง๋ง, ์ฟผ๋ฆฌ DSL์ ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ํจ์ฌ ๋ ๋ณต์กํ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค:
- ๋ถ๋ฆฌ์ธ ์ฟผ๋ฆฌ(Boolean Queries): ๋ถ๋ฆฌ์ธ ์ฐ์ฐ์(
must,should,must_not)๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ์ฟผ๋ฆฌ ์ ์ ๊ฒฐํฉํฉ๋๋ค. - ๋ฒ์ ์ฟผ๋ฆฌ(Range Queries): ํน์ ๊ฐ๊ฒฉ ๋ฒ์๋ ๋ ์ง ๋ฒ์ ๋ด์ ์ํ์ ๊ฒ์ํฉ๋๋ค.
- ์ ์ฌ ์ฟผ๋ฆฌ(Fuzzy Queries): ์ฃผ์ด์ง ์ฟผ๋ฆฌ ์ฉ์ด์ ์ ์ฌํ ์ํ์ ๊ฒ์ํฉ๋๋ค.
- ์ง๋ฆฌ ์ฟผ๋ฆฌ(Geo Queries): ํน์ ์ง๋ฆฌ์ ์์ญ ๋ด์ ์ํ์ ๊ฒ์ํฉ๋๋ค(์ง์ญ ๋น์ฆ๋์ค์ ์ ์ฉ).
์ํ ๊ฒ์์ ์ํ Elasticsearch ์ต์ ํ
์ํ ๊ฒ์์ ์ํด Elasticsearch๋ฅผ ๊ตฌํํ ํ์๋ ๊ฒ์ ์ฑ๋ฅ๊ณผ ๊ด๋ จ์ฑ์ ๊ฐ์ ํ๊ธฐ ์ํด ์ต์ ํํ ์ ์์ต๋๋ค.
1. ๊ด๋ จ์ฑ ํ๋
๊ด๋ จ์ฑ ํ๋์ ๊ฒ์ ๊ฒฐ๊ณผ์ ์ ํ๋์ ๊ด๋ จ์ฑ์ ๋์ด๊ธฐ ์ํด ์ค์ฝ์ด๋ง ํจ์์ ์ฟผ๋ฆฌ ๋งค๊ฐ๋ณ์๋ฅผ ์กฐ์ ํ๋ ๊ฒ์ ํฌํจํฉ๋๋ค. ์ด๊ฒ์ ์คํ๊ณผ ๋ถ์์ด ํ์ํ ๋ฐ๋ณต์ ์ธ ๊ณผ์ ์ ๋๋ค.
๋ค์ ๊ธฐ์ ๋ค์ ๊ณ ๋ คํ์ธ์:
- ๊ฐ์ค์น ๋ถ์ฌ(Boosting): ํน์ ํ๋์ ์ ์์ ๊ฐ์ค์น๋ฅผ ๋ถ์ฌํ์ฌ ๊ฒ์ ๊ฒฐ๊ณผ์์ ๋ ์ค์ํ๊ฒ ๋ง๋ญ๋๋ค. ์๋ฅผ ๋ค์ด,
descriptionํ๋๋ณด๋คproduct_nameํ๋์ ๋ ๋์ ๊ฐ์ค์น๋ฅผ ๋ถ์ฌํ ์ ์์ต๋๋ค. - ๋์์ด ํ์ฅ: ์ฌํ์จ(recall)์ ๋์ด๊ธฐ ์ํด ๊ฒ์ ์ฟผ๋ฆฌ๋ฅผ ๋์์ด๋ก ํ์ฅํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์๊ฐ "shirt"๋ฅผ ๊ฒ์ํ๋ฉด "t-shirt", "tee", "top"๋ ํจ๊ป ๊ฒ์ํ ์ ์์ต๋๋ค.
- ๋ถ์ฉ์ด ์ ๊ฑฐ: ์ ํ๋(precision)๋ฅผ ๋์ด๊ธฐ ์ํด ๊ฒ์ ์ฟผ๋ฆฌ์ ์ธ๋ฑ์ฑ๋ ๋ฌธ์์์ ์ผ๋ฐ์ ์ธ ๋จ์ด(์: "the", "a", "and")๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
- ์ด๊ฐ ์ถ์ถ(Stemming): ์ฌํ์จ(recall)์ ๋์ด๊ธฐ ์ํด ๋จ์ด๋ฅผ ์ด๊ทผ ํํ๋ก ์ค์ ๋๋ค. ์๋ฅผ ๋ค์ด, "running", "runs", "ran"์ ๋ชจ๋ "run"์ผ๋ก ์ด๊ฐ ์ถ์ถ๋ฉ๋๋ค.
- ์ฌ์ฉ์ ์ ์ ์ค์ฝ์ด๋ง ํจ์: ํน์ ์๊ตฌ์ ๋ง๊ฒ ์ค์ฝ์ด๋ง์ ์กฐ์ ํ๊ธฐ ์ํด ์ฌ์ฉ์ ์ ์ ์ค์ฝ์ด๋ง ํจ์๋ฅผ ์ ์ํฉ๋๋ค.
์์:
๋ค์ ์ฟผ๋ฆฌ๋ product_name ํ๋์ 2๋ฐฐ์ ๊ฐ์ค์น๋ฅผ ๋ถ์ฌํฉ๋๋ค:
GET /products/_search
{
"query": {
"multi_match": {
"query": "cotton",
"fields": ["product_name^2", "description"]
}
}
}
2. ์ฑ๋ฅ ์ต์ ํ
์ฑ๋ฅ ์ต์ ํ๋ ์ฟผ๋ฆฌ ์๋ต ์๊ฐ๊ณผ ์ฒ๋ฆฌ๋์ ๊ฐ์ ํ๊ธฐ ์ํด Elasticsearch๋ฅผ ํ๋ํ๋ ๊ฒ์ ํฌํจํฉ๋๋ค. ์ฌ๊ธฐ์๋ ํด๋ฌ์คํฐ ๊ตฌ์ฑ, ์ธ๋ฑ์ฑ ํ๋ก์ธ์ค, ์ฟผ๋ฆฌ ์คํ ์ต์ ํ๊ฐ ํฌํจ๋ฉ๋๋ค.
๋ค์ ๊ธฐ์ ๋ค์ ๊ณ ๋ คํ์ธ์:
- ์ค๋ฉ(Sharding): ์ธ๋ฑ์ค๋ฅผ ์ฌ๋ฌ ๊ฐ์ ์ค๋๋ก ๋๋์ด ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๋ ธ๋์ ๋ถ์ฐ์ํต๋๋ค. ์ด๋ ์ฟผ๋ฆฌ ์ฑ๋ฅ๊ณผ ํ์ฅ์ฑ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
- ๋ณต์ (Replication): ์ค๋์ ๋ณต์ ๋ณธ์ ๋ง๋ค์ด ๋ด๊ฒฐํจ์ฑ๊ณผ ์ฟผ๋ฆฌ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
- ์บ์ฑ(Caching): ์์ฃผ ์ก์ธ์คํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๊ธฐ ์ํด ์บ์ฑ์ ํ์ฑํํฉ๋๋ค.
- ์ธ๋ฑ์ฑ ์ต์ ํ: ์ธ๋ฑ์ฑ ์๋๋ฅผ ๋์ด๊ธฐ ์ํด ์ธ๋ฑ์ฑ ํ๋ก์ธ์ค๋ฅผ ์ต์ ํํฉ๋๋ค. ์ฌ๊ธฐ์๋ ๋ฒํฌ ์ธ๋ฑ์ฑ ์ฌ์ฉ, ์ธ๋ฑ์ฑ ์ค ๋ฆฌํ๋ ์ ๋นํ์ฑํ, ๋งคํ ๊ตฌ์ฑ ์ต์ ํ๊ฐ ํฌํจ๋ฉ๋๋ค.
- ์ฟผ๋ฆฌ ์ต์ ํ: ์ฟผ๋ฆฌ ์ฑ๋ฅ์ ํฅ์์ํค๊ธฐ ์ํด ๊ฒ์ ์ฟผ๋ฆฌ๋ฅผ ์ต์ ํํฉ๋๋ค. ์ฌ๊ธฐ์๋ ์ ์ ํ ์ฟผ๋ฆฌ ์ ์ฌ์ฉ, ๋ถํ์ํ ์ฟผ๋ฆฌ ๋ฐฉ์ง, ์บ์ฑ ์ฌ์ฉ์ด ํฌํจ๋ฉ๋๋ค.
- ํ๋์จ์ด ์ต์ ํ: ํ๋์จ์ด๊ฐ ๋ฐ์ดํฐ ๋ฐ ์ฟผ๋ฆฌ ๋ถํ์ ๋ง๊ฒ ์ ์ ํ ํฌ๊ธฐ๋ก ๊ตฌ์ฑ๋์๋์ง ํ์ธํฉ๋๋ค. ๋ ๋น ๋ฅธ ์ธ๋ฑ์ฑ ๋ฐ ์ฟผ๋ฆฌ ์ฑ๋ฅ์ ์ํด SSD๋ฅผ ์ฌ์ฉํฉ๋๋ค.
3. ๋ชจ๋ํฐ๋ง ๋ฐ ๋ถ์
Elasticsearch ํด๋ฌ์คํฐ๋ฅผ ๋ชจ๋ํฐ๋งํ์ฌ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ์๋ณํ๊ณ ์ฑ๋ฅ ์งํ๋ฅผ ์ถ์ ํ์ธ์. Elasticsearch์ ๋ด์ฅ ๋ชจ๋ํฐ๋ง ๋๊ตฌ๋ ํ์ฌ ๋ชจ๋ํฐ๋ง ์๋ฃจ์ ์ ์ฌ์ฉํ์ธ์.
๋ค์๊ณผ ๊ฐ์ ์ฃผ์ ์งํ๋ฅผ ์ถ์ ํ์ธ์:
- ์ฟผ๋ฆฌ ์๋ต ์๊ฐ: ๊ฒ์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ํ๊ท ์๊ฐ.
- ์ฟผ๋ฆฌ ์ฒ๋ฆฌ๋: ์ด๋น ์คํ๋๋ ๊ฒ์ ์ฟผ๋ฆฌ ์.
- ์ธ๋ฑ์ฑ ์๋: ์ด๋น ์ธ๋ฑ์ฑ๋๋ ๋ฌธ์ ์.
- CPU ์ฌ์ฉ๋ฅ : Elasticsearch ํด๋ฌ์คํฐ๊ฐ ์ฌ์ฉํ๋ CPU ๋น์จ.
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ : Elasticsearch ํด๋ฌ์คํฐ๊ฐ ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ ๋น์จ.
- ๋์คํฌ ์ฌ์ฉ๋ฅ : Elasticsearch ํด๋ฌ์คํฐ๊ฐ ์ฌ์ฉํ๋ ๋์คํฌ ๊ณต๊ฐ ๋น์จ.
๊ฒ์ ๋ก๊ทธ๋ฅผ ๋ถ์ํ์ฌ ์ผ๋ฐ์ ์ธ ๊ฒ์ ์ฟผ๋ฆฌ, ์ธ๊ธฐ ์ํ, ๊ฒ์ ์คํจ๋ฅผ ์๋ณํ์ธ์. ์ด ์ ๋ณด๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒ์ ๊ด๋ จ์ฑ์ ๊ฐ์ ํ๊ณ ์ํ ์นดํ๋ก๊ทธ๋ฅผ ์ต์ ํํ์ธ์.
๊ฒ์ ๋ถ์ ๋๊ตฌ๋ฅผ ํ์ฉํ์ฌ ์ฌ์ฉ์ ํ๋๊ณผ ๊ฒ์ ํจํด์ ๋ํ ํต์ฐฐ๋ ฅ์ ์ป์ผ์ธ์. ์ด ๋ฐ์ดํฐ๋ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ธํํ๊ณ , ์ํ ์ถ์ฒ์ ๊ฐ์ ํ๋ฉฐ, ๋ง์ผํ ์บ ํ์ธ์ ์ต์ ํํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
์ด์ปค๋จธ์ค์์ Elasticsearch๋ฅผ ์ฌ์ฉํ ์ค์ ์ฌ๋ก
๋ง์ ์ ๋์ ์ธ ์ด์ปค๋จธ์ค ๊ธฐ์ ๋ค์ด ์ํ ๊ฒ์์ ๊ฐํํ๊ธฐ ์ํด Elasticsearch๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ช ๊ฐ์ง ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- eBay: eBay๋ ํ๋ฃจ์ ์์ญ์ต ๊ฑด์ ์ฟผ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฒ์ ์์ง์ ๊ฐํํ๊ธฐ ์ํด Elasticsearch๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- Walmart: Walmart๋ ์ํ ๊ฒ์ ๋ฐ ์ํ ์ถ์ฒ์ ๊ฐํํ๊ธฐ ์ํด Elasticsearch๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- Target: Target์ ์ํ ๊ฒ์ ๋ฐ ์ฌ๊ณ ๊ด๋ฆฌ๋ฅผ ๊ฐํํ๊ธฐ ์ํด Elasticsearch๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- Zalando: ์ ๋ฝ์ ์ ๋์ ์ธ ์จ๋ผ์ธ ํจ์ ํ๋ซํผ์ธ Zalando๋ ์ฌ๋ฌ ๊ตญ๊ฐ์ ์ธ์ด์ ๊ฑธ์ณ ๊ณ ๊ฐ์๊ฒ ๊ด๋ จ์ฑ ์๊ณ ๊ฐ์ธํ๋ ์ํ ๊ฒ์ ๊ฒฝํ์ ์ ๊ณตํ๊ธฐ ์ํด Elasticsearch๋ฅผ ํ์ฉํฉ๋๋ค.
- ASOS: ๋ ๋ค๋ฅธ ์ ๋ช ์จ๋ผ์ธ ํจ์ ์๋งค์ ์ฒด์ธ ASOS๋ ์ ์ธ๊ณ ๊ณ ๊ฐ ๊ธฐ๋ฐ์ ์ํด ๋น ๋ฅด๊ณ ์ ํํ ์ํ ๋ฐ๊ฒฌ์ ์ฉ์ดํ๊ฒ ํ๊ธฐ ์ํด Elasticsearch๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ค๊ตญ์ด ์ง์
์ฌ๋ฌ ๊ตญ๊ฐ์์ ์ด์๋๋ ์ด์ปค๋จธ์ค ํ๋ซํผ์ ๊ฒฝ์ฐ ์ํ ๊ฒ์์์ ๋ค๊ตญ์ด๋ฅผ ์ง์ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. Elasticsearch๋ ๋ค๊ตญ์ด ์ง์์ ์ํ ์ฌ๋ฌ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค:
- ์ธ์ด ๋ถ์๊ธฐ: Elasticsearch๋ ๋ค๋ฅธ ์ธ์ด์ ์ต์ ํ๋ ์ธ์ด๋ณ ๋ถ์๊ธฐ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด ๋ถ์๊ธฐ๋ค์ ์ด๊ฐ ์ถ์ถ, ๋ถ์ฉ์ด ์ ๊ฑฐ ๋ฐ ๊ธฐํ ์ธ์ด๋ณ ์์ ์ ์ฒ๋ฆฌํฉ๋๋ค.
- ICU ๋ถ์ ํ๋ฌ๊ทธ์ธ: ICU ๋ถ์ ํ๋ฌ๊ทธ์ธ์ ์ ๋ ฌ, ์์ญ, ๋ถ์ ์ ํฌํจํ ๊ณ ๊ธ ์ ๋์ฝ๋ ์ง์์ ์ ๊ณตํฉ๋๋ค.
- ์์ญ: ๋ค๋ฅธ ์คํฌ๋ฆฝํธ์ ๋ฌธ์์ ์ผ์น์ํค๊ธฐ ์ํด ๊ฒ์ ์ฟผ๋ฆฌ๋ฅผ ์์ญํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ํค๋ฆด ๋ฌธ์ ๊ฒ์ ์ฟผ๋ฆฌ๋ฅผ ๋ผํด ๋ฌธ์๋ก ์์ญํ์ฌ ๋ผํด ๋ฌธ์๋ก ์์ฑ๋ ์ํ๋ช ๊ณผ ์ผ์น์ํต๋๋ค.
- ์ธ์ด ๊ฐ์ง: ์ธ์ด ๊ฐ์ง๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒ์ ์ฟผ๋ฆฌ์ ์ธ์ด๋ฅผ ์๋์ผ๋ก ๊ฐ์งํ๊ณ ์ ์ ํ ์ธ๋ฑ์ค๋ ๋ถ์๊ธฐ๋ก ๋ผ์ฐํ ํฉ๋๋ค.
์์:
๋
์ผ์ด ์ํ ๊ฒ์์ ์ง์ํ๋ ค๋ฉด german ๋ถ์๊ธฐ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค:
PUT /products
{
"mappings": {
"properties": {
"product_name": {
"type": "text",
"analyzer": "german"
},
"description": {
"type": "text",
"analyzer": "german"
}
}
}
}
์ฌ์ฉ์๊ฐ ๋
์ผ์ด๋ก ๊ฒ์ํ๋ฉด, german ๋ถ์๊ธฐ๊ฐ ๊ฒ์ ์ฟผ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ์ฌ ์ ํํ๊ณ ๊ด๋ จ์ฑ ์๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฅํฉ๋๋ค.
๊ณ ๊ธ ๊ธฐ์
๊ธฐ๋ณธ ์ฌํญ์ ๋์ด Elasticsearch ์ํ ๊ฒ์์ ๋์ฑ ํฅ์์ํฌ ์ ์๋ ๋ช ๊ฐ์ง ๊ณ ๊ธ ๊ธฐ์ ์ด ์์ต๋๋ค:
- ๊ฐ์ธํ ๊ฒ์: ๊ณผ๊ฑฐ ํ๋, ๊ตฌ๋งค ๋ด์ญ, ์ ํธ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ๋ณ ์ฌ์ฉ์์๊ฒ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ๋ง์ถคํํฉ๋๋ค. ์ด๋ ํด๋ฆญ๋ฅ ๊ณผ ์ ํ์จ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค.
- ์ด๋ฏธ์ง ๊ฒ์: ์ฌ์ฉ์๊ฐ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ์ฌ ์ํ์ ๊ฒ์ํ ์ ์๊ฒ ํฉ๋๋ค. ์ด๋ ํจ์ ๋ฐ ๊ฐ์ ์ฉํ์ ํนํ ์ ์ฉํฉ๋๋ค.
- ์์ฑ ๊ฒ์: ์์ฑ ์ฟผ๋ฆฌ์ ๋ง๊ฒ ๊ฒ์์ ์ต์ ํํฉ๋๋ค. ์ด๋ฅผ ์ํด์๋ ๊ตฌ์ด์ ๋์์ค๋ฅผ ์ดํดํ๊ณ ๊ทธ์ ๋ฐ๋ผ ๊ฒ์ ์ฟผ๋ฆฌ๋ฅผ ์กฐ์ ํด์ผ ํฉ๋๋ค.
- AI ๊ธฐ๋ฐ ๊ฒ์: AI ๋ฐ ๋จธ์ ๋ฌ๋ ๊ธฐ์ ์ ํตํฉํ์ฌ ๊ฒ์ ๊ด๋ จ์ฑ์ ๊ฐ์ ํ๊ณ , ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ธํํ๋ฉฐ, ์ฌ๊ธฐ์ฑ ๊ฒ์์ ํ์งํฉ๋๋ค.
๊ฒฐ๋ก
์ํ ๊ฒ์์ ์ํด Elasticsearch๋ฅผ ๊ตฌํํ๋ฉด ์ฌ์ฉ์ ๊ฒฝํ์ ํฌ๊ฒ ํฅ์์ํค๊ณ ๋งค์ถ์ ์ฆ๋์ํฌ ์ ์์ต๋๋ค. ๊ตฌํ์ ์ ์คํ๊ฒ ๊ณํํ๊ณ , ๋ฐ์ดํฐ ๋ชจ๋ธ์ ์ต์ ํํ๋ฉฐ, ๊ฒ์ ์ฟผ๋ฆฌ๋ฅผ ํ๋ํจ์ผ๋ก์จ ์ด์ปค๋จธ์ค ํ๋ซํผ์ ํน์ ์๊ตฌ๋ฅผ ์ถฉ์กฑํ๋ ๊ฐ๋ ฅํ๊ณ ํจ์จ์ ์ธ ๊ฒ์ ์์ง์ ๋ง๋ค ์ ์์ต๋๋ค. ๋ค๊ตญ์ด ์ง์์ ์ค์์ฑ๊ณผ ๊ฐ์ธํ ๊ฒ์ ๋ฐ AI ๊ธฐ๋ฐ ๊ฒ์๊ณผ ๊ฐ์ ๊ณ ๊ธ ๊ธฐ์ ์ ์ ์ฌ๋ ฅ์ ์ผ๋์ ๋์ด ๊ฒฝ์์์ ์์ ๋๊ฐ์ญ์์ค. Elasticsearch๋ฅผ ์ฑํํจ์ผ๋ก์จ ์ ์ธ๊ณ ๊ธฐ์ ๋ค์ ์ํ ๋ฐ๊ฒฌ ์์ค์ ๋์ด๊ณ ํ์ํ ์จ๋ผ์ธ ์ผํ ๊ฒฝํ์ ์ ๊ณตํ ์ ์์ต๋๋ค.