ElasticSearch(ES)๋ Elasticsearch๋ Apache Lucene๊ธฐ๋ฐ์ Java ์คํ์์ค ๋ถ์ฐ ๊ฒ์ ์์ง์ผ๋ก, ๋๋์ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ๊ฒ์ํ๊ณ ์ค์๊ฐ ๋ถ์ํ ์ ์๋๋ก ์ค๊ณ๋ ์คํ์์ค ๊ฒ์ ์์ง์ด๋ค. JSON ๊ธฐ๋ฐ์ RESTful API๋ฅผ ์ ๊ณตํ๋ฉฐ, Apache Lucene์ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ค.
Apache Lucene ๊ธฐ๋ฐ โ ์ญ์์ธ(Inverted Index) ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋น ๋ฅธ ๊ฒ์ ๊ฐ๋ฅํ๋ค. ์ด๋ฅผ ํตํด ๋์ฉ๋ ๋ฐ์ดํฐ์์๋ ์ค์๊ฐ ๊ฒ์ ๋ฐ ๋ถ์ ๊ฐ๋ฅํ๋ค.
ํ๊ธ ๊ฒ์ ์ Nori Analyzer ๊ฐ์ ํ ํฐํ(Tokenizer) ๋ฐ ํํ์ ๋ถ์๊ธฐ ํ์ฉ ๊ฐ๋ฅ
โ ์ญ์์ธ (inverted index)
์ฝ๊ฒ ๋งํด์ ์ฑ
์์ ๋งจ ์์ ๋ณผ ์ ์๋ ๋ชฉ์ฐจ๊ฐ index์ด๊ณ ,
์ฑ
๋งจ ๋ค์ ํค์๋๋ง๋ค ์ฐพ์๋ณผ ์ ์๋๋ก ์ฐพ์๋ณด๊ธฐ๊ฐ inverted idnex์ด๋ค.
Elasticsearch๋ ํ
์คํธ๋ฅผ ํ์ฑํด์ ๊ฒ์์ด ์ฌ์ ์ ๋ง๋ ๋ค์์ inverted index ๋ฐฉ์์ผ๋ก ํ
์คํธ๋ฅผ ์ ์ฅํ๋ค.
์ค๋ฉ(Sharding)๊ณผ ๋ณต์ (Replication) ์ง์ โ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ฌ ๋
ธ๋์ ๋ถ์ฐ ์ ์ฅ๋๋ค.
๋
ธ๋ ์ถ๊ฐ ์ ์๋์ผ๋ก ๋ฐ์ดํฐ ๋ถ๋ฐฐ ๋ฐ ๋ก๋ ๋ฐธ๋ฐ์ฑ ์ํํ๊ณ , ํ๋์ ๋
ธ๋๊ฐ ๋ค์ด๋๋๋ผ๋ ๋ค๋ฅธ ๋
ธ๋๊ฐ ๋ฐ์ดํฐ ์ ๊ณต ๊ฐ๋ฅํ ๊ณ ๊ฐ์ฉ์ฑ์ด ํน์ง์ด๋ค.
๊ฒ์ ์์ฒญ ์ ์ฆ๊ฐ์ ์ธ ๋ฐ์ดํฐ ์
๋ฐ์ดํธ ๊ฐ๋ฅํ๋ค. ๋๋ฌธ์ ์ค์๊ฐ ๋ก๊ทธ ๋ถ์ ๋ฐ ๋ชจ๋ํฐ๋ง ์์คํ
์์ ํ์ฉ๋๋ค.
Elastic Stack(ELK: Elasticsearch + Logstash + Kibana)๊ณผ ์ฐ๋ํ์ฌ ๋์๋ณด๋ ๊ตฌ์ฑ ๊ฐ๋ฅํ๋ค.
SQL์ GROUP BY ๊ธฐ๋ฅ์ฒ๋ผ ๋ฐ์ดํฐ ์ง๊ณ ๋ฐ ํต๊ณ ๋ถ์ ๊ฐ๋ฅํ๋ค. ๋ํ ํ๊ท , ์ต๋๊ฐ, ์ต์๊ฐ, ํ์คํ ๊ทธ๋จ ๋ถ์๋ ๊ฐ๋ฅํ๋ค.
JSON ๊ธฐ๋ฐ REST API ์ ๊ณตํ์ฌ ์ฝ๊ฒ ์์ฒญ ๋ฐ ์๋ต ๊ฐ๋ฅํ๋ค.
HTTP ์์ฒญ์ ํตํด CRUD(Create, Read, Update, Delete) ์ํํ๋ค.
JSON ํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์ฌ ์คํค๋ง๋ฅผ ์ ์ฐํ๊ฒ ๋ณ๊ฒฝ ๊ฐ๋ฅํ๋ค.
๊ธฐ์กด RDBMS์ฒ๋ผ ํ
์ด๋ธ ์คํค๋ง๋ฅผ ์๊ฒฉํ๊ฒ ์ ์ํ ํ์๊ฐ ์๋ค.
Dynamic Mapping ๊ธฐ๋ฅ์ ํตํด ๋ฐ์ดํฐ ์ฝ์
์ ์๋์ผ๋ก ํ๋ ํ์
์ด ๊ฒฐ์ ๋๋ค.
ํด๋ฌ์คํฐ๋ Elasticsearch ์์ ๊ฐ์ฅ ํฐ ์์คํ
๋จ์๋ฅผ ์๋ฏธํ๋ค.
์ต์ ํ๋ ์ด์์ ๋
ธ๋๋ก ์ด๋ฃจ์ด์ง ๋
ธ๋๋ค์ ์งํฉ์ด๋ค.
์๋ก ๋ค๋ฅธ ํด๋ฌ์คํฐ๋ ๋ฐ์ดํฐ์ ์ ๊ทผ, ๊ตํ์ ํ ์ ์๋ ๋
๋ฆฝ์ ์ธ ์์คํ
์ผ๋ก ์ ์ง๋๋ค.
์ฌ๋ฌ ๋์ ์๋ฒ๊ฐ ํ๋์ ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ฑํ ์ ์๊ณ , ํ ์๋ฒ์ ์ฌ๋ฌ ๊ฐ์ ํด๋ฌ์คํฐ ์กด์ฌํ ์๋ ์๋ค.
ES ํด๋ฌ์คํฐ๋ ์ฌ๋ฌ ๊ฐ์ ๋ ธ๋(์๋ฒ)๋ก ๊ตฌ์ฑ๋๋ฉฐ, ์ญํ ์ ๋ฐ๋ผ ๋ค์ํ ์ข ๋ฅ์ ๋ ธ๋๊ฐ ์๋ค.
Master Node | ํด๋ฌ์คํฐ ๊ด๋ฆฌ(๋
ธ๋ ์ถ๊ฐ/์ ๊ฑฐ, ์ค๋ ๋ฐฐ์น)
Data Node | ๋ฐ์ดํฐ ์ ์ฅ ๋ฐ ๊ฒ์, ์ง๊ณ ์ฒ๋ฆฌ
Ingest Node | ๋ฐ์ดํฐ๋ฅผ ์ฌ์ ์ฒ๋ฆฌ(ํํฐ๋ง, ๋ณํ)
Coordinator Node | ํด๋ผ์ด์ธํธ ์์ฒญ์ ๋ผ์ฐํ
(๋ถํ ๋ถ์ฐ)
Machine Learning Node | ๋จธ์ ๋ฌ๋ ๊ธฐ๋ฐ ์ด์ ํ์ง ์ํ
ํด๋ฌ์คํฐ๋ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ ์ฅํ๊ณ ๋น ๋ฅด๊ฒ ๊ฒ์ํ๊ธฐ ์ํด ์ค๋ฉ(Sharding)๊ณผ ๋ณต์ (Replication) ๋ฅผ ์ฌ์ฉํ๋ค.
โ ํ๋์ ์ธ๋ฑ์ค๋ฅผ ์ฌ๋ฌ ๊ฐ์ ์์ ๋จ์๋ก ๋๋ ๊ฒ (RDB์ ํํฐ์
๋๊ณผ ์ ์ฌ)
โ ์ค๋ ๋จ์๋ก ์ฌ๋ฌ ๋
ธ๋์ ๋ถ์ฐ ์ ์ฅ โ ๋ฐ์ดํฐ ๊ฒ์ ์๋ ํฅ์
product_index
โโโ Shard 1 โ Node 2
โโโ Shard 2 โ Node 3
โโโ Shard 3 โ Node 4
โ ์ค๋(Shard)์ ๋ณต์ฌ๋ณธ์ ์์ฑํ์ฌ ๋ฐฑ์
๋ฐ ์ฅ์ ๋์
โ ํ๋์ ์ค๋๊ฐ ์์ค๋๋๋ผ๋ ๋ณต์ ๋ณธ(Replica) ์ ํตํด ๋ฐ์ดํฐ ์ ์ง ๊ฐ๋ฅ
โ ๊ฒ์ ์ฑ๋ฅ ํฅ์(์ฌ๋ฌ ๋ณต์ ๋ณธ์์ ๋์์ ๊ฒ์ ๊ฐ๋ฅ)
product_index
โโโ Shard 1 (Node 2) โ Replica 1 (Node 3)
โโโ Shard 2 (Node 3) โ Replica 2 (Node 4)
โโโ Shard 3 (Node 4) โ Replica 3 (Node 2)
๋๋์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ ฅํ ๊ฒ์ ์ฑ๋ฅ๊ณผ ํ์ฅ์ฑ์ ์ ๊ณตํ์ง๋ง, ์ด์ ์ ๋ช๊ฐ์ง ๊ณ ๋ คํด์ผํ ์ฌํญ๋ค์ด ์๋ค.
1. ๋์ ๋ฆฌ์์ค ์ฌ์ฉ๋ (CPU, ๋ฉ๋ชจ๋ฆฌ, ๋์คํฌ I/O)
ElasticSearch๋ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๊ธฐ ์ํด ์ญ์์ธ(Inverted Index) ์ ์ฌ์ฉํ๋๋ฐ ์ด ๊ณผ์ ์์ CPU ์ฐ์ฐ๋์ด ๋ง๊ณ , JVM ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง์ด ์ฌ์ฉํจ.
๋๋์ ๋ฐ์ดํฐ๊ฐ ์์ ๊ฒฝ์ฐ, ๋์คํฌ I/O ๋ถํ๋ ์๋นํ ํผ.
โ
ํด๊ฒฐ ๋ฐฉ๋ฒ
: JVM Heap ๋ฉ๋ชจ๋ฆฌ ์กฐ์ (ES_HEAP_SIZE ์ค์ )
๋
ธ๋ ๊ฐ ๋ถํ ๋ถ์ฐ (๋ก๋ ๋ฐธ๋ฐ์ฑ)
๊ณ ์ฑ๋ฅ SSD ์ฌ์ฉ (๋์คํฌ I/O ๋ณ๋ชฉ ํด๊ฒฐ)
2. ๋ฐ์ดํฐ ๋ถ์ผ์น ๊ฐ๋ฅ์ฑ
ElasticSearch๋ ์ค์๊ฐ ์์ธ(near real-time indexing) ์ ์ง์ํ์ง๋ง, ์์ ํ ํธ๋์ญ์
์ผ๊ด์ฑ์ ๋ณด์ฅํ์ง ์์.
-> ํน์ ์์ ์์ Primary Shard์ Replica Shard ๊ฐ ๋ฐ์ดํฐ ๋ถ์ผ์น๊ฐ ๋ฐ์ํ ์ ์์
โ
ํด๊ฒฐ ๋ฐฉ๋ฒ
: Refresh Interval ์กฐ์ (index.refresh_interval ์กฐ์ )
์ ํํ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ด ํ์ํ ๊ฒฝ์ฐ RDB์ ๋ณํ ์ฌ์ฉ
3. ํด๋ฌ์คํฐ ์ด์ ๋ณต์ก์ฑ
4. ์ฅ์ ๋ฐ์ ์ ํด๋ฌ์คํฐ ๋ถ์์
๋ง์คํฐ ๋
ธ๋๊ฐ ์ฅ์ ๋๋ฉด ํด๋ฌ์คํฐ๊ฐ ๋น์ ์ ์ํ๊ฐ ๋ ์ ์์.
ํน์ ๋
ธ๋์์ GC(๊ฐ๋น์ง ์ปฌ๋ ์
) ์ง์ฐ์ด ๋ฐ์ํ๋ฉด ์ ์ฒด ํด๋ฌ์คํฐ๊ฐ ๋๋ ค์ง ์ ์์.
โ
ํด๊ฒฐ ๋ฐฉ๋ฒ
: ๋ง์คํฐ ๋
ธ๋๋ฅผ 3๊ฐ ์ด์ ์ ์ง (ํ์ ๊ฐ ์ค์ ํ์)
JVM GC ํ๋ (-XX:+UseG1GC ์ค์ )
5. ๋ณด์ ์ด์ (๊ธฐ๋ณธ์ ์ผ๋ก ๋ณด์ ๊ธฐ๋ฅ ์์)
๊ธฐ๋ณธ์ ์ผ๋ก ElasticSearch๋ ๋ณด์ ์ค์ ์ด ์๊ธฐ ๋๋ฌธ์
๋ณ๋์ ์ธ์ฆ, ๊ถํ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ์ค์ ํ์ง ์์ผ๋ฉด ๋ฐ์ดํฐ ์ ์ถ ์ํ์ด ํผ.
โ
ํด๊ฒฐ ๋ฐฉ๋ฒ
: x-pack ๋ณด์ ๊ธฐ๋ฅ ํ์ฑํ (Elastic Security)
Kibana์์ Role-Based Access Control(RBAC) ์ ์ฉ
VPC ๋ด๋ถ์์ ์ด์ํ์ฌ ์ธ๋ถ ์ ๊ทผ ์ฐจ๋จ
ElasticSearch ์ ์ฃผ์ ๊ธฐ๋ฅ๋ค๊ณผ ๋์ ์๋ฆฌ๋ค์ ๊ฐ๋ตํ๊ฒ ์ ๋ฆฌํด๋ณด์๋๋ฐ, ์ ์ฉํ ๊ธฐ๋ฅ์ธ ๊ฒ ๊ฐ๋ค. ElasticSearch ํ์ฉํ ์ค์๊ฐ ๋ก๊ทธ ๋ถ์์ด๋ ์ถ์ฒ ์์คํ ์ ์ง์ ์ ์ฉํด๋ณด๊ณ ์ถ๋ค!