Apache lucene ๊ธฐ๋ฐ์ java ์คํ์์ค ๋ถ์ฐ ๊ฒ์ ์์ง์ ๋๋ค. "๋ฐ์ดํฐ ์ ์ฅ์"๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋์ฒดํ ์ ์์ต๋๋ค. ๋ง์ ์์ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ณ ๊ฑฐ์ ์ค์๊ฐ์ผ๋ก ์ ์ฅ, ๊ฒ์, ๋ถ์ํ ์ ์์ต๋๋ค.
์ฅ์
- ๋น ๋ฆ
- ๊ฑฐ์ ์ค์๊ฐ ๊ฒ์ ํ๋ซํผ์ด๋ค.
- Lucene๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋์ด ํํ ์คํธ ๊ฒ์์ ๋ฐ์ด๋๋ค
- ๋ณธ์ง์ ๋ถ์ฐ์
- elasticsearch์ ์ ์ฅ๋ ๋ฌธ์๋ ์ค๋๋ผ๊ณ ํ๋ ์ฌ๋ฌ ๋ค๋ฅธ ์ปจํ ์ด๋์ ๋ถ์ฐ์ ์ผ๋ก ์ ์ฅ
- ์ค๋๋ ๋ณต์ ๋์ด ์ฅ์ ๋์ ๊ฐ๋ฅ(replication)
- ๊ด๋ฒ์ํ ๊ธฐ๋ฅ ์ธํธ์ ํจ๊ป ์ฌ์ฉ
- ๋ฐ์ดํฐ ๋กค์ , ์ธ๋ฑ์ค ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ ๋ฑ๊ณผ ๊ฐ์ด ๋ฐ์ดํฐ๋ฅผ ๋ ํจ์จ์ ์ผ๋ก ์ ์ฅํ๊ณ ๊ฒ์ํ ์ ์๊ฒ ํ๋ ์ฌ๋ฌ ๊ธฐ๋ฅ ํ์ฌ
- ๋ฐ์ดํฐ ์์ง, ์๊ฐํ, ๋ณด๊ณ ๋ฅผ ๊ฐ์ํ ํจ
- ๋ฐ์ดํฐ๋ฅผ ๋ ์ฝ์ ์ฒ๋ฆฌ
- kibana => ์ค์๊ฐ ์๊ฐํ, beats+logstash => ์์ธ ์ ๋ฐ์ดํฐ ์ฝ๊ฒ ์ฒ๋ฆฌ ๊ฐ๋ฅ
- Rest API ์ง์
- ๋ถ์ฐ ๋ฌธ์ ์ ์ฅ์๋ก์ json ํํ๋ก ์ง๋ ฌํ๋ ๋ณต์กํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ ์ฅํ๋ค.
๋จ์
- ์ค์๊ฐ ์ฒ๋ฆฌ๊ฐ ๋ถ๊ฐ๋ฅ
- ํธ๋์ญ์ ์ง์ํ์ง ์์
- ์ง์ ํ ์๋ฏธ์ ์ ๋ฐ์ดํธ๋ฅผ ์ง์ํ์ง ์๋๋ค.
- document๊ฐ์ join์ ์ํํ ์ ์๋ค.
- ๊ณ ๊ฐ์ด ํ๋งค ์ ํ์ ๊ฒ์ํ ์ ์๋ ์จ๋ผ์ธ ์น ์คํ ์ด๋ฅผ ์ด์. elasticsearch๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฒด ์ ํ ์นดํ๋ก๊ทธ ๋ฐ ์ฌ๊ณ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ๊ทธ์ ๋ํ ๊ฒ์ ๋ฐ ์๋ ์์ฑ ์ ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ ์ ์๋ค.
- ๋ก๊ทธ ๋๋ ํธ๋์ญ์ ๋ฐ์ดํฐ๋ฅผ ์์งํ๊ณ ๋ถ์ํ์ฌ ์ถ์ด, ํต๊ณ, ์์ฝ ์ ๋ณผ๋ฅด ์ป๊ฑฐ๋ ์ด์ ์์ธ์ ์์๋ธ๋ค.
- ๋ถ์/๋น์ฆ๋์ค ์ธํ ๋ฆฌ์ ์ค ๊ธฐ๋ฅ์ด ํ์ํ์ฌ ๋ฐฉ๋ํ ๋ฐ์ดํฐ๋ฅผ ๋์์ผ๋ก ์ ์ํ๊ฒ ์กฐ์ฌ, ๋ถ์, ์๊ฐํ, ์์ ์ง์๋ฅผ ์ํํ๊ณ ์ถ๋ค. ์ด ๊ฒฝ์ฐ์๋ elasticserach๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์ ์ฅํ kibana๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์ค ์ค์ํ ์์๋ฅผ ์๊ฐํํ ๋ง์ถคํ ๋์๋ณด๋๋ฅผ ๋ง๋ค ์ ์๋ค.
Elastic Search
- ์๋ฒ๋ก ๋ถํฐ ์ํ๋ ๋ชจ๋ ์ ํ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ์ค์๊ฐ์ผ๋ก ํด๋น ๋ฐ์ดํฐ๋ฅผ ๊ฒ์, ๋ถ์ ๋ฐ ์๊ฐํ ํ ์ ์๋๋ก ๋์์ฃผ๋ Elastic์ ์คํ ์์ค ์๋น์ค ์ ํ์ด๋ค.
Logstash
- ๋ค์ํ ์์ค(csv, db..)์ ๋ก๊ทธ ๋๋ ํธ๋์ญ์ ๋ฐ์ดํฐ๋ฅผ ์์ง, ์ง๊ณ, ํ์ฑํ์ฌ elastic search๋ก ์ ๋ฌํ๋ค.
Kibana
- ๋น ๋ฅธ ๊ฒ์์ ํตํด ๋ฐ์ดํฐ ์๊ฐํ ๋ฐ ๋ชจ๋ํฐ๋ง
- elasticsearch ๋ด ๊ฐ์ฅ ํฐ ์์คํ ๋จ์
- ์ต์ ํ๋ ์ด์์ ๋ ธ๋๋ก ์ด๋ฃจ์ด์ง ๋ ธ๋์ ์งํฉ
- ์๋ก ๋ค๋ฅธ ํด๋ฌ์คํฐ๋ ๋ฐ์ดํฐ์ ์ ๊ทผ ๊ตํ์ ํ ์ ์์, ๋ ๋ฆฝ์ ์ธ ์์คํ ์ผ๋ก ์ ์ง
- ์ฌ๋ฌ๋์ ์๋ฒ๊ฐ ํ๋์ ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ฑํ ์ ์๊ณ ํ ์๋ฒ์ ์ฌ๋ฌ ๊ฐ์ ํด๋ฌ์คํฐ๊ฐ ์กด์ฌํ ์ ์๋ค.
- ํด๋ฌ์คํฐ์ ํฌํจ๋ ๋จ์ผ ์๋ฒ๋ก์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ํด๋ฌ์คํฐ์ ์์ธํ ๋ฐ ๊ฒ์ ๊ธฐ๋ฅ์ ์ฐธ์ฌ
- mater-eligible
- ํด๋ฌ์คํฐ๋ฅผ ์ ์ดํ๋ ๋ง์คํฐ๋ก ์ ํํ ์ ์๋ ๋ ธ๋์ด๋ค.
- ์ธ๋ฑ์ค ์์ฑ, ์ญ์
- ํด๋ฌ์คํฐ ๋ ธ๋์ ์ถ์ , ๊ด๋ฆฌ
- ๋ฐ์ดํฐ ์ ๋ ฅ ์ ํ ๋นํ ์ค๋ ์ ํ
- data
- document๊ฐ ์ ์ฅ๋๋ ๋ ธ๋์ด๋ฉฐ ๋ฐ์ดํฐ๊ฐ ๋ถ์ฐ ์ ์ฅ๋๋ ๋ฌผ๋ฆฌ์ ๊ณต๊ฐ์ธ ์ค๋๊ฐ ๋ฐฐ์น๋๋ ๋ ธ๋์ด๋ค. CRUD ์์ธ, ๊ฒ์, ํต๊ณ ๋ฑ์ ๋ฐ์ดํฐ ์์ ์ ์ํํ๋ฏ๋ก ๋ง์ ๋ฆฌ์์ค๊ฐ ํ์
- ingest
- ๋ฐ์ดํฐ๋ฅผ ๋ณํํ๋ ๋ฑ ์ฌ์ ์ฒ๋ฆฌ ํ์ดํ๋ผ์ธ์ ์คํํ๋ ์ญํ ์ ํ๋ค
- coordination only node
- ์ฌ์ฉ์์ ์์ฒญ์ ๋ฐ๊ณ ๋ผ์ด๋ ๋ก๋น ๋ฐฉ์์ผ๋ก ๋ถ์ฐ์ ํ๋ ๋ ธ๋.
- document๋ค์ Index์ ์ ์ฅ๋๋ฉฐ ๊ฐ index๋ ํ๊ฐ ํน์ ์ฌ๋ฌ๊ฐ์ shard๋ก ๊ตฌ์ฑ๋๋ค. ๊ฐ ์ค๋๋ lucene index์ด๋ฉฐ ์ด๋ elasticsearch ํด๋ฌ์คํฐ ๋ด์ ์ธ๋ฑ์ฑ์ ํ๊ฑฐ๋ ๋ฐ์ดํฐ ์ผ๋ถ๋ฅผ ์กฐํํ๊ธฐ ์ํ ๋ ๋ฆฝ์ ์ธ ๊ฒ์ ์์ง์ด๋ผ๊ณ ์๊ฐํ ์ ์๋ค.
- document๋ฅผ ์ ๋ ฅํ ๋ index์ ์ ๋ ฅํ์ง๋ง index๋ ์ค๋๋ก ๊ตฌ์ฑ๋์ด์๊ณ ๋ฐ์ดํฐ๋ฅผ ์ค๋์ ์ ๋ ฅํ ๋, elasticsearch๋ ์ฃผ๊ธฐ์ ์ผ๋ก ๋์คํฌ์ lucene ์ธ๊ทธ๋จผํธ ํํ๋ก ์ ์ฅํ๋ฉฐ ์ด ์์ ์ดํ ํด๋น document ๊ฒ์์ด ๊ฐ๋ฅํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ธ๊ทธ๋จผํธ ๊ฐ์๊ฐ ๋ง์์ง๋ฉด ์ฃผ๊ธฐ์ ์ผ๋ก ๋ ํฐ ์ธ๊ทธ๋จผํธ ๋ณํฉ์ด๋๊ณ ์ด ๊ณผ์ ์ merging ์์ ์ด๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ ๋์คํฌ io์ ํฐ ์ํฅ์ ๋ฐ๋๋ค.
- ๊ฐ ์ธ๋ฑ์ค์๋ shard๊ฐ ์กด์ฌํ๋ฉฐ ๊ฐ node๋ง๋ค primary shard๊ฐ ์๊ณ ์ด๋ฅผ ๋ณต์ ํ replica๊ฐ ์๋ค. primary shard๋ฅผ ๊ฐ๊ณ ์์ง ์์ ๋ค๋ฅธ ์๋ฒ๋ ๋ฐ์ดํฐ๋ฅผ ๋๊ธฐํํ๊ณ ์ฅ์ ๋ฐ์ ์ ๋์ฒํ๊ธฐ ์ํด primary shard๋ฅผ ๋ณต์ ํ replica๋ฅผ ๊ฐ๊ณ ์๋ค.
- ์ฅ์ ๋ฐ์ ์ replica๊ฐ primary shard๋ก ์น๊ฒฉ