ElasticSearch๋
- -
ElasticSearch๋ ?
๐ ElasticSearch๋?
Elasticsearch๋ Apache Lucene(์ํ์น ๋ฃจ์ฌ) ๊ธฐ๋ฐ์ Java ์คํ ์์ค ๋ถ์ฐ ๊ฒ์ ์์ง์ด๋ค. Elasticsearch๋ฅผ ํตํด ๋ฃจ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(Java์์ ๊ฐ๋ฐํ ์ ๋ณด ๊ฒ์์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ)๋ฅผ ๋จ๋ ์ผ๋ก ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ๋ฐฉ๋ํ ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ํ๊ฒ(๊ฑฐ์ ์ค์๊ฐ) ์ ์ฅ, ๊ฒ์, ๋ถ์์ ์ํํ ์ ์๋ค.
Elasticsearch๋ ๊ฒ์์ ์ํด ๋จ๋ ์ผ๋ก ์ฌ์ฉ๋๊ธฐ๋ ํ๋ฉฐ, ELK(Elasticsearch / Logstash / Kibana) ์คํ์ผ๋ก ์ฌ์ฉ๋๊ธฐ๋ ํ๋ค. ELK ์คํ์ ๋ค์๊ณผ ๊ฐ๋ค.
LogStash
: ๋ค์ํ ์์ค(DB, csvํ์ผ ๋ฑ) ์ ๋ก๊ทธ ๋๋ ํธ๋์ญ์
๋ฐ์ดํฐ๋ฅผ ์์ง, ์ง๊ณ, ํ์ฑํ์ฌ ElasticSearch ๋ก ์ ๋ฌ
ElasticSearch
: LogStash ๋ก ๋ถํฐ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ ๋ฐ ์ง๊ณํ์ฌ ํ์ํ ๊ด์ฌ ์๋ ์ ๋ณด๋ฅผ ํ๋
Kibana
: ElasticSearch์ ๋น ๋ฅธ ๊ฒ์์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์๊ฐํ ๋ฐ ๋ชจ๋ํฐ๋ง
์ฃผ๋ก ELK๋ ๋ก๋๋ฐธ๋ฐ์ฑ๋์ด ์๋ WAS์ ํฉ์ด์ ธ ์๋ ๋ก๊ทธ๋ฅผ ํ ๊ณณ์ผ๋ก ๋ชจ์ผ๊ณ , ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ๊ฒ์ํ ๋ค ์๊ฐํํ์ฌ ๋ชจ๋ํฐ๋งํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
๐ ElasticSearch ๊ณผ RDB ์ ๋น๊ต
๊ธฐ์กด์ RDB๋ฅผ ๋ง์ด ์จ ์๋ค๋ฉด Elasticsearch์์ ์ฌ์ฉํ๋ ํค์๋์ ๋งค์นญ์ ํ๊ธฐ ์ฝ๋ค. ๋ค๋ง, ์ธ๋ฑ์ค์ ํ์ ์ ๋ํด ์ฃผ์ํ ์ ์ด ์๋ค.
โญRDB์ฒ๋ผ ์ฌ๋ฌ ํ ์ด๋ธ, ํ ์ธ๋ฑ์ค ๋ด์ ๋ฉํฐ ํ์ ์ด ๊ฐ๋ฅํ๊ฐ?
๊ฒฐ๋ก ๋ถํฐ ๋งํ๋ฉด ๋ถ๊ฐ๋ฅํ๋ค!
์์์ ์ธ๋ฑ์ค๋ RDB์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ด๊ณ , ํ์ ์ RDB์ ํ ์ด๋ธ์ด๋ผ๊ณ ํ์๋ค. ํ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฌ๋ฌ ํ ์ด๋ธ์ ๊ฐ์ง๋ฏ์ด, Elasticsearch๋ ํ๋์ ์ธ๋ฑ์ค์ ์ฌ๋ฌ ํ์ ์ ๊ฐ์ง ์ ์๋ค. ํ์ง๋ง Elasticsearch 7.0 ์ด์๋ถํฐ๋ ํ๋์ ์ธ๋ฑ์ค์๋ ํ๋์ ํ์ ๋ง ๊ฐ์ง ์ ์๋๋ก ๋ฐ๋์๋ค. ์ด ๋ณ๊ฒฝ์ Elasticsearch์ ๊ฐ์ํ์ ์คํค๋ง ๊ด๋ฆฌ์ ์ฉ์ด์ฑ์ ๋์ด๊ธฐ ์ํ ๊ฒ์ด๋ค. ๋ง์ฝ ์ฌ๋ฌ ์ข ๋ฅ์ ๋ฐ์ดํฐ๋ฅผ ํจ๊ป ์ ์ฅํด์ผ ํ๋ค๋ฉด, ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ ๊ณ ๋ คํ ์ ์๋ค.
- ํ๋์ ์ธ๋ฑ์ค์ ์ฌ๋ฌ ํ์
๋์ ์ฌ๋ฌ ์ธ๋ฑ์ค ์ฌ์ฉ:
: ๊ฐ๊ฐ์ ๋ฐ์ดํฐ ํ์ ์ ๋ํด ๋ณ๋์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๊ณ ํ์ํ ๋์๋ ๋ณ๋์ ๊ฒ์์ ์ํํ๋ ๋ฐฉ๋ฒ์ ๊ณ ๋ คํ ์ ์๋ค. - Nested ํ์
์ฌ์ฉ:
: ํ๋์ ์ธ๋ฑ์ค ๋ด์์ ์ฌ๋ฌ ํ์ ์ด ํ์ํ ๊ฒฝ์ฐ, Nested ํ์ ์ ์ฌ์ฉํ์ฌ ๋ณต์กํ ๊ตฌ์กฐ์ ๋ฌธ์๋ฅผ ์ ์ฅํ ์ ์๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก Elasticsearch๋ ์ธ๋ฑ์ค๊ฐ ๋งคํ๋๋ฉด ์์ ์ด ๋ถ๊ฐ๋ฅํ๋ฏ๋ก, ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํ๋ ค๋ฉด ์๋ก์ด ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๊ณผ์ ์ด ํ์ํ ์ ์๋ค.
๐ ElasticSearch์ ๊ตฌ์กฐ
์๋์ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ํตํด Elasticsearch๋ ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ ์ฅํ๊ณ ๊ฒ์ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ๋ถ์ฐํ ์ํคํ ์ฒ๋ฅผ ํตํด ํ์ฅ์ฑ์ ๊ฐ์ง๋ฉฐ, ๊ณ ์ฑ๋ฅ ๊ฒ์ ๋ฐ ์ง์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
- ์ธ๋ฑ์ค(Index)
: Elasticsearch์์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ๋จ์๋ค. ๊ฐ ์ธ๋ฑ์ค๋ ํ๋ ์ด์์ ์ค๋๋ก ๊ตฌ์ฑ๋์ด ์๋ค. ์ผ๋ฐ์ ์ผ๋ก ํ๋์ ์ธ๋ฑ์ค๋ ํน์ ์ ํ ๋๋ ์นดํ ๊ณ ๋ฆฌ์ ๋ฐ์ดํฐ๋ฅผ ๋ด๊ณ ์๋ค. ์ฆ RDBMS์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋์ํ๋ ๊ฐ๋ ์ด๋ค. - ์ค๋(Shard)
: ์์ธ๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ํํฐ์ ์ผ๋ก ๋๋์ด ์ ์ฅํ๋ ๋ ผ๋ฆฌ์ ์ธ ๋จ์์ด๋ค. ์์ธ์ด ์ปค์ง ๊ฒฝ์ฐ์ ๊ฒ์ ์ฑ๋ฅ์ ํฅ์์ํค๊ธฐ ์ํด ์ฌ๋ฌ ๋ ธ๋์ ์ฌ๋๋ฅผ ๋ถ์ฐ ์ ์ฅํ ์ ์๋ค. ์ค๋๋ ํ๋ผ์ด๋จธ๋ฆฌ ์ค๋์ ๋ ํ๋ฆฌ์นด ์ค๋๋ก ๋๋๋ค. - ๋
ธ๋(Node)
: Elasticsearch ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ฑํ๋ ๊ฐ๊ฐ์ ์๋ฒ ๋๋ ์ธ์คํด์ค๋ฅผ ๋ํ๋ธ๋ค. ๋ ธ๋๋ ํด๋ฌ์คํฐ์ ์ฐธ์ฌํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๊ฒ์ ์์ ์ ์ํํ๋ค. - ๋ฌธ์(Document)
: ์ธ๋ฑ์ค ๋ด์์ ์ ์ฅ๋๋ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ๋จ์์ ๋๋ค. JSON ํ์์ผ๋ก ํํ๋๋ฉฐ, ๊ฐ ๋ฌธ์๋ ๊ณ ์ ํ ID๋ฅผ ๊ฐ์ง๊ณ ์๋ค. - ํ๋(Field)
: ๋ฌธ์ ๋ด์ ๋ฐ์ดํฐ๋ฅผ ๋ํ๋ด๋ ๋จ์๋ก, ๊ฐ ๋ฌธ์๋ ์ฌ๋ฌ ํ๋๋ก ๊ตฌ์ฑ๋๋ค. ๊ฐ ํ๋๋ ํด๋น ๋ฐ์ดํฐ์ ์ ํ๊ณผ ๊ฐ์ ๊ฐ์ง๊ณ ์๋ค. - ๋งคํ(Mapping)
: Elasticsearch์์๋ ์ธ๋ฑ์ค ๋ด์ ๋ฌธ์์ ๋ํ ๊ตฌ์กฐ๋ฅผ ์ ์ํ๋ ๊ฒ์ "๋งคํ"์ด๋ผ๊ณ ํ๋ค. ๋งคํ์ ์ด๋ค ํ๋๊ฐ ์ด๋ค ์ ํ์ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๊ณ ์๋์ง๋ฅผ ์ ์ํ๋ค. - ๊ฒ์ ๋ฐ ์ง์(Query)
: Elasticsearch๋ ๊ฐ๋ ฅํ ๊ฒ์ ์์ง์ ์ ๊ณตํ๋ฉฐ, ์ฌ์ฉ์๋ JSON ํ์์ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ ์ ์๋ค. - ํด๋ฌ์คํฐ(Cluster)
: Elasticsearch์ ์ ์ฒด ์์คํ ์ ๋ํ๋ด๋ฉฐ, ํ๋ ์ด์์ ๋ ธ๋๋ก ๊ตฌ์ฑ๋๋ค. ๋ ธ๋๋ ํด๋ฌ์คํฐ์ ์ฐธ์ฌํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๊ณ ๋ถ์ฐ ์ฒ๋ฆฌ๋ฅผ ์ํํ๋ค.
๐ ElasticSearch์ ์ฅ/๋จ์
ES๋ NoSQL์ ์ผ์ข ์ผ๋ก ๋ถ๋ฅํ ์ ์๊ณ , ๋ถ์ฐ์ฒ๋ฆฌ๋ฅผ ํตํด ์ค์๊ฐ์ฑ์ผ๋ก ๋น ๋ฅธ ๊ฒ์์ด ๊ฐ๋ฅํ๋ค. ํนํ ๊ธฐ์กด์ ๋ฐ์ดํฐ๋ก ์ฒ๋ฆฌํ๊ธฐ ํ๋ ๋๋์ ๋น์ ํ ๋ฐ์ดํฐ ๊ฒ์์ด ๊ฐ๋ฅํ๋ฉฐ ์ ๋ฌธ ๊ฒ์(full text) ๊ฒ์๊ณผ ๊ตฌ์กฐ ๊ฒ์ ๋ชจ๋๋ฅผ ์ง์ํ๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก๋ ๊ฒ์์์ง์ด์ง๋ง MongoDB๋ Hbase์ ๊ฐ์ ๋์ฉ๋ ์คํ ๋ฆฌ์ง๋ก๋ ํ์ฉ์ด ๊ฐ๋ฅํ๋ค.
์ฅ์
- ์คํ์์ค ๊ฒ์์์ง์ด๋ค. ํ๋ฐํ ์คํ์์ค ์ปค๋ฎค๋ํฐ๊ฐ ES๋ฅผ ๋์์์ด ๊ฐ์ ํ๊ณ ๋ฐ์ ์ํค๊ณ ์๋ค.
- ์ ๋ฌธ๊ฒ์
๋ด์ฉ ์ ์ฒด๋ฅผ ์์ธํด์ ํน์ ๋จ์ด๊ฐ ํฌํจ๋ ๋ฌธ์๋ฅผ ๊ฒ์ํ ์ ์๋ค. ๊ธฐ๋ฅ๋ณ, ์ธ์ด๋ณ ํ๋ฌ๊ทธ์ธ์ ์ ์ฉํ ์ ์๋ค. - ํต๊ณ ๋ถ์
๋น์ ํ ๋ก๊ทธ ๋ฐ์ดํฐ๋ฅผ ์์งํ์ฌ ํต๊ณ ๋ถ์์ ํ์ฉํ ์ ์๋ค. Kibana๋ฅผ ์ฐ๊ฒฐํ๋ฉด ์ค์๊ฐ์ผ๋ก ๋ก๊ทธ๋ฅผ ๋ถ์ํ๊ณ ์๊ฐํํ ์ ์๋ค. - Schemaless
์ ํํ๋์ง ์์ ๋ฌธ์๋ ์๋์ผ๋ก ์์ธํ๊ณ ๊ฒ์ํ ์ ์๋ค. - RESTful API
HTTP๊ธฐ๋ฐ์ RESTful๋ฅผ ํ์ฉํ๊ณ ์์ฒญ/์๋ต์ JSON์ ์ฌ์ฉํด ๊ฐ๋ฐ ์ธ์ด, ์ด์์ฒด์ , ์์คํ ์ ๊ด๊ณ์์ด ๋ค์ํ ํ๋ซํผ์์ ํ์ฉ์ด ๊ฐ๋ฅํ๋ค. - Multi-tenancy
์๋ก ์์ดํ ์ธ๋ฑ์ค์ผ์ง๋ผ๋ ๊ฒ์ํ ํ๋๋ช ๋ง ๊ฐ์ผ๋ฉด ์ฌ๋ฌ ์ธ๋ฑ์ค๋ฅผ ํ๋ฒ์ ์กฐํํ ์ ์๋ค. - Document-Oriented
์ฌ๋ฌ ๊ณ์ธต ๊ตฌ์กฐ์ ๋ฌธ์๋ก ์ ์ฅ์ด ๊ฐ๋ฅํ๋ฉฐ, ๊ณ์ธต ๊ตฌ์กฐ๋ก๋ ๋ฌธ์๋ ํ๋ฒ์ ์ฟผ๋ฆฌ๋ก ์ฝ๊ฒ ์กฐํํ ์ ์๋ค. - ์ญ์์ธ(Inverted Index)
- ํ์ฅ์ฑ
๋ถ์ฐ ๊ตฌ์ฑ์ด ๊ฐ๋ฅํ๋ค. ๋ถ์ฐ ํ๊ฒฝ์์ ๋ฐ์ดํฐ๋ shard๋ผ๋ ๋จ์๋ก ๋๋๋ค.
๋จ์
- ์์ ์ค์๊ฐ์ ์๋๋ค.
์์ธ๋ ๋ฐ์ดํฐ๋ 1์ด ๋ค์๋ ๊ฒ์์ด ๊ฐ๋ฅํ๋ค. ๋ด๋ถ์ ์ผ๋ก commit๊ณผ flush๊ฐ์ ๋ณต์กํ ๊ณผ์ ์ ๊ฑฐ์น๊ธฐ ๋๋ฌธ. - Transaction Rollback์ ์ง์ํ์ง ์๋๋ค.
์ ์ฒด์ ์ธ ํด๋ฌ์คํฐ์ ์ฑ๋ฅ ํฅ์์ ์ํด ์์คํ ์ ์ผ๋ก ๋น์ฉ ์๋ชจ๊ฐ ํฐ ๋กค๋ฐฑ๊ณผ ํธ๋์ญ์ ์ ์ง์ํ์ง ์๋๋ค. ์กฐ์ฌํ์.. - ๋ฐ์ดํฐ์ ์
๋ฐ์ดํธ๋ฅผ ์ ๊ณตํ์ง ์๋๋ค.
์ ๋ฐ์ดํธ ๋ช ๋ น์ด ์ฌ ๊ฒฝ์ฐ ๊ธฐ์กด ๋ฌธ์๋ฅผ ์ญ์ ํ๊ณ ์๋ก์ด ๋ฌธ์๋ฅผ ์์ฑํ๋ค. ์ ๋ฐ์ดํธ์ ๋นํด์ ๋ง์ ๋น์ฉ์ด ๋ค์ง๋ง ์ด๋ฅผ ํตํด ๋ถ๋ณ์ฑ(Immutable)์ด๋ผ๋ ์ด์ ์ ์ทจํ๋ค.
[์ฐธ๊ณ ]
์์คํ ๊ณต๊ฐ ๊ฐ์ฌํฉ๋๋ค