Skip to content

Latest commit

ย 

History

History
253 lines (168 loc) ยท 16.9 KB

File metadata and controls

253 lines (168 loc) ยท 16.9 KB

ElasticSearch

ElasticSearch๋ž€?

ElasticSearch๋Š” Apache Lucene(์•„ํŒŒ์น˜ ๋ฃจ์”ฌ) ๊ธฐ๋ฐ˜์˜ Java ์˜คํ”ˆ ์†Œ์Šค ๊ฒ€์ƒ‰ ์—”์ง„์ด๋‹ค.

๋ฐฉ๋Œ€ํ•œ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ ์†ํ•˜๊ฒŒ(๊ฑฐ์˜ ์‹ค์‹œ๊ฐ„) ์ €์žฅ, ๊ฒ€์ƒ‰, ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

ElasticSearch๋Š” ์–ด๋””์— ์‚ฌ์šฉ๋˜๋‚˜์š”?

ElasticSearch์˜ ์†๋„์™€ ํ™•์žฅ์„ฑ, ๊ทธ๋ฆฌ๊ณ  ์ˆ˜๋งŽ์€ ์ข…๋ฅ˜์˜ ์ฝ˜ํ…์ธ ๋ฅผ ์ƒ‰์ธํ•  ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ์ด์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.

  • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฒ€์ƒ‰
  • ์›น์‚ฌ์ดํŠธ ๊ฒ€์ƒ‰
  • ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๊ฒ€์ƒ‰
  • ๋กœ๊น…๊ณผ ๋กœ๊ทธ ๋ถ„์„
  • ์ธํ”„๋ผ ๋ฉ”ํŠธ๋ฆญ๊ณผ ์ปจํ…Œ์ด๋„ˆ ๋ชจ๋‹ˆํ„ฐ๋ง
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง
  • ์œ„์น˜ ๊ธฐ๋ฐ˜ ์ •๋ณด ๋ฐ์ดํ„ฐ ๋ถ„์„ ๋ฐ ์‹œ๊ฐํ™”
  • ๋ณด์•ˆ ๋ถ„์„
  • ๋น„์ฆˆ๋‹ˆ์Šค ๋ถ„์„

ํ™œ์šฉ ์˜ˆ

  1. ๊ณ ๊ฐ์ด ํŒ๋งค ์ œํ’ˆ์„ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋Š” ์˜จ๋ผ์ธ ์›น ์Šคํ† ์–ด๋ฅผ ์šด์˜ํ•œ๋‹ค. ์ด ๊ฒฝ์šฐ์—๋Š” ElasticSearch๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ „์ฒด ์ œํ’ˆ ์นดํƒˆ๋กœ๊ทธ ๋ฐ ์žฌ๊ณ  ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ทธ์— ๋Œ€ํ•œ ๊ฒ€์ƒ‰ ๋ฐ ์ž๋™ ์™„์„ฑ ์ œ์•ˆ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค.

  2. ๋กœ๊ทธ ๋˜๋Š” ํŠธ๋žœ์žญ์…˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ๋งˆ์ด๋‹ํ•˜์—ฌ ์ถ”์ด, ํ†ต๊ณ„, ์š”์•ฝ ์ •๋ณด๋ฅผ ์–ป๊ฑฐ๋‚˜ ์ด์ƒ ์š”์ธ์„ ์•Œ์•„๋‚ด๋ ค ํ•œ๋‹ค.

  3. ๋ถ„์„/๋น„์ฆˆ๋‹ˆ์Šค ์ธํ…”๋ฆฌ์ „์Šค ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜์—ฌ ๋ฐฉ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ(์ˆ˜๋ฐฑ๋งŒ ๋˜๋Š” ์ˆ˜์‹ญ์–ต ๊ฐœ์˜ ๋ ˆ์ฝ”๋“œ)๋ฅผ ๋Œ€์ƒ์œผ๋กœ ์‹ ์†ํ•˜๊ฒŒ ์กฐ์‚ฌ, ๋ถ„์„, ์‹œ๊ฐํ™”, ์ž„์‹œ ์งˆ์˜๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์‹ถ๋‹ค. ์ด ๊ฒฝ์šฐ์—๋Š” ElasticSearch๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ ๋‹ค์Œ Kibana๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ค‘ ์ค‘์š”ํ•œ ์š”์†Œ๋ฅผ ์‹œ๊ฐํ™”ํ•  ๋งž์ถคํ˜• ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ ElasticSearch ์ง‘๊ณ„ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ์ธํ…”๋ฆฌ์ „์Šค ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋น„์ฆˆ๋‹ˆ์Šค ์ธํ…”๋ฆฌ์ „์Šค(BI)๋Š” ์กฐ์ง์ด ๋” ๋‚˜์€ ์˜์‚ฌ ๊ฒฐ์ •์„ ๋‚ด๋ฆฌ๊ณ  ์ •๋ณด์— ์ž…๊ฐํ•œ ์กฐ์น˜๋ฅผ ์ทจํ•˜๋ฉฐ ๋ณด๋‹ค ํšจ์œจ์ ์ธ ๋น„์ฆˆ๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋งํ•œ๋‹ค.

Elastic Stack๋ž€?

์‚ฌ์šฉ์ž๊ฐ€ ์„œ๋ฒ„๋กœ ๋ถ€ํ„ฐ ์›ํ•˜๋Š” ๋ชจ๋“  ์œ ํ˜•์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์„œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰, ๋ถ„์„ ๋ฐ ์‹œ๊ฐํ™” ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” Elastic์˜ ์˜คํ”ˆ์†Œ์Šค ์„œ๋น„์Šค ์ œํ’ˆ์ด๋‹ค.

๊ธฐ์กด ElasticSearch + Logstash + Kibana๋ฅผ ๊ฐ™์ด ๋ฌถ์–ด ELK(ELK Stack)๋ผ๋Š” ์„œ๋น„์Šค๋ช…์œผ๋กœ ์ œ๊ณตํ–ˆ์œผ๋‚˜ 5.0.0 ๋ฒ„์ „๋ถ€ํ„ฐ Beats๊ฐ€ ํฌํ•จ๋˜์–ด Elastic Stack์ด๋ž€ ์ด๋ฆ„์œผ๋กœ ์„œ๋น„์Šค๊ฐ€ ์ œ๊ณต๋˜๊ณ  ์žˆ๋‹ค.

elasticstack

  • Logstash
    • ๋‹ค์–‘ํ•œ ์†Œ์Šค(DB, csv ํŒŒ์ผ ๋“ฑ)์˜ ๋กœ๊ทธ ๋˜๋Š” ํŠธ๋žœ์žญ์…˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘, ์ง‘๊ณ„, ํŒŒ์‹ฑํ•˜์—ฌ ElasticSearh๋กœ ์ „๋‹ฌ
  • ElasticSearch
    • Logstash๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ ๋ฐ ์ง‘๊ณ„ํ•˜์—ฌ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ํš๋“
  • Kibana
    • ElasticSearch์˜ ๋น ๋ฅธ ๊ฒ€์ƒ‰์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์‹œ๊ฐํ™” ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง
  • Beats
    • ๊ฒฝ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘๊ธฐ
    • ๋‹จ์ผ ๋ชฉ์ ์˜ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘๊ธฐ ๋ฌด๋ฃŒ ์˜คํ”ˆ ์†Œ์Šค ํ”Œ๋žซํผ์œผ๋กœ ์ˆ˜๋ฐฑ ์ˆ˜์ฒœ ๊ฐœ์˜ ์žฅ๋น„์™€ ์‹œ์Šคํ…œ์œผ๋กœ๋ถ€ํ„ฐ Logstash๋‚˜ ElasticSearch์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•œ๋‹ค.

์ฃผ๋กœ ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ๋˜์–ด ์žˆ๋Š” WAS์˜ ํฉ์–ด์ ธ ์žˆ๋Š” ๋กœ๊ทธ๋ฅผ ํ•œ๊ณณ์œผ๋กœ ๋ชจ์œผ๊ณ , ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ๊ฒ€์ƒ‰ํ•œ ๋’ค ์‹œ๊ฐํ™”ํ•˜์—ฌ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

ElasticSearch๋Š” ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋‚˜์š”?

๋กœ๊ทธ, ์‹œ์Šคํ…œ ๋ฉ”ํŠธ๋ฆญ, ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋“ฑ ๋‹ค์–‘ํ•œ ์†Œ์Šค๋กœ๋ถ€ํ„ฐ ์›์‹œ ๋ฐ์ดํ„ฐ๊ฐ€ ElasticSearch๋กœ ํ˜๋Ÿฌ ๋“ค์–ด๊ฐ„๋‹ค.

๋ฐ์ดํ„ฐ ์ˆ˜์ง‘์€ ์›์‹œ ๋ฐ์ดํ„ฐ๊ฐ€ ElasticSearch์—์„œ ์ƒ‰์ธ๋˜๊ธฐ ์ „์— ๊ตฌ๋ฌธ ๋ถ„์„, ์ •๊ทœํ™”๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.

ElasticSearch์—์„œ ์ผ๋‹จ ์ƒ‰์ธ๋˜๋ฉด, ์‚ฌ์šฉ์ž๋Š” ์ด ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์ง‘๊ณ„๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ์˜ ๋ณต์žกํ•œ ์š”์•ฝ์„ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

Kibana์—์„œ ์‚ฌ์šฉ์ž๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์‹œ๊ฐํ™”ํ•˜๊ณ , ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๊ณต์œ ํ•˜๋ฉฐ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

ElasticSearch vs RDB

rdb

rdb2

RDB์™€ ๋งค์นญ๋˜๋Š” ํ‚ค์›Œ๋“œ๋“ค์ด๋‹ค. ์ธ๋ฑ์Šค์™€ ํƒ€์ž…์— ๋Œ€ํ•ด ์ฃผ์˜ํ•ด์•ผํ•œ๋‹ค.

RDB์™€ ElasticSearch์˜ ๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐฉ์‹์ด ๋‹ค๋ฅด๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ RDB๋Š” ํ–‰์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค. ๊ทธ์— ๋ฐ˜ํ•ด ElasticSearch๋Š” ๋‹จ์–ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ(์—ญ ์ธ๋ฑ์Šค,Inverted Index)๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค.

RDB๋Š” ๋ฐ์ดํ„ฐ ์ˆ˜์ •,์‚ญ์ œ์˜ ํŽธ์˜์„ฑ๊ณผ ์†๋„๋ฉด์—์„œ ๊ฐ•์ ์ด ์žˆ์ง€๋งŒ ๋‹ค์–‘ํ•œ ์กฐ๊ฑด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์ง‘๊ณ„ํ•˜๋Š” ๋ฐ์—๋Š” ๊ตฌ์กฐ์ ์ธ ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค.

์•„๋ž˜์˜ ์‚ฌ์ง„์ฒ˜๋Ÿผ 'MSA'๋ผ๋Š” ๊ฒ€์ƒ‰ํ• ๋•Œ ๋„ํ๋จผํŠธ ๊ฐœ์ˆ˜๋งŒํผ 'MSA'๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ์„ ๋ฐ˜๋ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ ์ˆ˜์˜ ๋„ํ๋จผํŠธ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ๋น„ํšจ์œจ์ ์ด๋‹ค.

RDB

๋ฐ˜๋ฉด์— ๋‹จ์–ด ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ElasticSearch๋Š” ํŠน์ • ๋‹จ์–ด๊ฐ€ ์–ด๋””์— ์ €์žฅ๋˜์–ด์žˆ๋Š”์ง€ ์ด๋ฏธ ์•Œ๊ณ  ์žˆ์–ด ๋ชจ๋“  ๋„ํ๋จผํŠธ๋ฅผ ๊ฒ€์ƒ‰ํ•˜ ใ„นํ•„์š”๊ฐ€ ์—†๋‹ค.

์•„๋ž˜์˜ ์‚ฌ์ง„์ฒ˜๋Ÿผ ์—ญ์ธ๋ฑ์Šค ๊ตฌ์กฐ๋กœ ์ €์žฅํ•œ ์ƒํƒœ์—์„œ 'MSA'๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋ฉด ๋‹จ์–ด๊ฐ€ ์ €์žฅ๋œ ๋„ํ๋จผํŠธ๋ฅผ ์•Œ๊ณ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋„ํ๋จผํŠธ ๊ฐœ์ˆ˜์™€ ์ƒ๊ด€์—†์ด ํ•œ ๋ฒˆ์˜ ์กฐํšŒ๋กœ ๊ฒ€์ƒ‰์„ ๋๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

invertedIndex

๋‹ค๋งŒ ์ˆ˜์ •๊ณผ ์‚ญ์ œ๋Š” ElasticSearch ๋‚ด๋ถ€์ ์œผ๋กœ ๊ต‰์žฅํžˆ ๋งŽ์€ ๋ฆฌ์†Œ์Šค๊ฐ€ ์†Œ์š”๋˜๋Š” ์ž‘์—…์ด๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐ์ดํ„ฐ ํŠน์„ฑ์ƒ ์ˆ˜์ •๊ณผ ์‚ญ์ œ๊ฐ€ ๋งŽ์€ ๊ฒฝ์šฐ์—๋Š” RDB์™€ ์—˜๋ผ์Šคํ‹ฑ ์˜์—ญ์„ ๋‚˜๋ˆ„์–ด ์•„ํ‚คํ…์ฒ˜๋งํ•˜๋Š” ๊ฒƒ์ด ํ•„์š”ํ•˜๋‹ค.

ElasticSearch ์ธ๋ฑ์Šค

ElasticSearch ์ธ๋ฑ์Šค๋Š” ์„œ๋กœ ๊ด€๋ จ๋˜์–ด ์žˆ๋Š” ๋ฌธ์„œ๋“ค์˜ ๋ชจ์Œ์ด๋‹ค.

ElasticSearch๋Š” JSON ๋ฌธ์„œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค. ๊ฐ ๋ฌธ์„œ๋Š” ์ผ๋ จ์˜ ํ‚ค(ํ•„๋“œ๋‚˜ ์†์„ฑ์˜ ์ด๋ฆ„)์™€ ๊ทธ์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’(๋ฌธ์ž์—ด, ์ˆซ์ž, ๋ถ€์šธ, ๋‚ ์งœ, ๊ฐ’์˜ ๋ฐฐ์—ด, ์ง€๋ฆฌ์  ์œ„์น˜ ๋˜๋Š” ๊ธฐํƒ€ ๋ฐ์ดํ„ฐ ์œ ํ˜•)์„ ์„œ๋กœ ์—ฐ๊ฒฐํ•œ๋‹ค.

ElasticSearch๋Š” ์—ญ ์ธ๋ฑ์Šค๋ผ๊ณ  ํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์ด๊ฒƒ์€ ์•„์ฃผ ๋น ๋ฅธ ํ’€ ํ…์ŠคํŠธ ๊ฒ€์ƒ‰์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋œ ๊ฒƒ์ด๋‹ค.

์—ญ ์ธ๋ฑ์Šค๋Š” ๋ฌธ์„œ์— ๋‚˜ํƒ€๋‚˜๋Š” ๋ชจ๋“  ๊ณ ์œ ํ•œ ๋‹จ์–ด์˜ ๋ชฉ๋ก์„ ๋งŒ๋“ค๊ณ , ๊ฐ ๋‹จ์–ด๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๋ชจ๋“  ๋ฌธ์„œ๋ฅผ ์‹๋ณ„ํ•œ๋‹ค.

์ƒ‰์ธ ํ”„๋กœ์„ธ์Šค ์ค‘์—, ElasticSearch๋Š” ๋ฌธ์„œ๋ฅผ ์ €์žฅํ•˜๊ณ  ์—ญ ์ธ๋ฑ์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜์—ฌ ๊ฑฐ์˜ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฌธ์„œ๋ฅผ ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ๋กœ ๋งŒ๋“ ๋‹ค. ์ธ๋ฑ์Šค API๋ฅผ ์‚ฌ์šฉํ•ด ์ƒ‰์ธ์ด ์‹œ์ž‘๋˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋Š” ํŠน์ •ํ•œ ์ธ๋ฑ์Šค์—์„œ JSON ๋ฌธ์„œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธ ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•œ ์ธ๋ฑ์Šค ๋‚ด ๋ฉ€ํ‹ฐ ํƒ€์ž…์ด ๊ฐ€๋Šฅํ•œ๊ฐ€?

RDB ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค = ์ธ๋ฑ์Šค RDB ํ…Œ์ด๋ธ” = ํƒ€์ž…

ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์„ ๊ฐ€์ง€๋“ฏ์ด, ElasticSearch๋„ ํ•˜๋‚˜์˜ ์ธ๋ฑ์Šค์— ์—ฌ๋Ÿฌ ํƒ€์ž…์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ElasticSearch 7.0 ์ด์ƒ๋ถ€ํ„ฐ๋Š” ํ•˜๋‚˜์˜ ์ธ๋ฑ์Šค์— ํ•˜๋‚˜์˜ ํƒ€์ž…๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋„๋ก ๋ฐ”๋€Œ์—ˆ๋‹ค.

RDB์˜ ํ…Œ์ด๋ธ”์€ ์™„์ „ ๊ฐœ๋ณ„์ ์ธ ๊ด€๊ณ„์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ ํ…Œ์ด๋ธ”์— ์ด๋ฆ„์ด ๊ฐ™์€ ์ปฌ๋Ÿผ์ด ์žˆ์–ด๋„ ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Twitter DB ์•ˆ์˜ User Table, Tweet Table์ด ์žˆ๊ณ  ๊ฐ๊ฐ์˜ ํ…Œ์ด๋ธ” ์•ˆ์— user_name์ด ์žˆ์–ด๋„ ์ƒ๊ด€์—†๋‹ค.

๋ฐ˜๋ฉด, ElasticSearch์—์„œ ํ•œ ์ธ๋ฑ์Šค ๋‚ด์˜ ํƒ€์ž…๋“ค์€ ๋‚ด๋ถ€์ ์œผ๋กœ ๊ฐ™์€ Lucene ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ฆ‰ ์œ„์—์„œ ์˜ˆ๋กœ ๋“ค์—ˆ๋˜ User ํƒ€์ž…์˜ user_name ํ•„๋“œ์™€ Tweet ํƒ€์ž…์˜ user_name ํ•„๋“œ๋Š” ๋™์ผํ•œ ํ•„๋“œ์— ์ €์žฅ๋˜๋ฉฐ ๋‘ user_name ํ•„๋“œ๋Š” ๋™์ผํ•œ ๋งคํ•‘(์ •์˜)๋ฅผ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ํƒ€์ž…์ด ๋‹ค๋ฅผ์ง€๋ผ๋„ ๋™์ผํ•œ ์ด๋ฆ„์„ ๊ฐ€์ง„ ํ•„๋“œ๋Š” ๋…๋ฆฝ์ ์ด์ง€ ์•Š์œผ๋ฏ€๋กœ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ ํ•˜๋‚˜์˜ ์ธ๋ฑ์Šค์—๋Š” ํ•˜๋‚˜์˜ ํƒ€์ž…๋งŒ์„ ๊ฐ–๋„๋ก ์ˆ˜์ •๋˜์—ˆ๋‹ค.

ElasticSearch ๊ตฌ์กฐ

elasticSearch ๊ตฌ์กฐ

ํด๋Ÿฌ์Šคํ„ฐ

Elasticsearch์—์„œ ๊ฐ€์žฅ ํฐ ์‹œ์Šคํ…œ ๋‹จ์œ„๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, ์ตœ์†Œ ํ•˜๋‚˜ ์ด์ƒ์˜ ๋…ธ๋“œ๋กœ ์ด๋ฃจ์–ด์ง„ ๋…ธ๋“œ์˜ ์ง‘ํ•ฉ์ด๋‹ค.

์„œ๋กœ ๋‹ค๋ฅธ ํด๋Ÿฌ์Šคํ„ฐ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ ‘๊ทผ, ๊ตํ™˜์„ ํ•  ์ˆ˜ ์—†๋Š” ๋…๋ฆฝ์ ์ธ ์‹œ์Šคํ…œ์œผ๋กœ ์œ ์ง€๋˜๋ฉฐ, ์—ฌ๋Ÿฌ ๋Œ€์˜ ์„œ๋ฒ„๊ฐ€ ํ•˜๋‚˜์˜ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๊ณ  ํ•œ ์„œ๋ฒ„์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค.

๋…ธ๋“œ

๋…ธ๋“œ๋Š” ํด๋Ÿฌ์Šคํ„ฐ์— ํฌํ•จ๋œ ๋‹จ์ผ ์„œ๋ฒ„๋กœ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ƒ‰์ธํ™” ๋ฐ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์— ์ฐธ์—ฌํ•œ๋‹ค.

๋…ธ๋“œ๋Š” ์—ญํ• ์— ๋”ฐ๋ผ Master-eligible, Data, Ingest, Tribe Coordination Only Node ๋…ธ๋“œ๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“Œ Master-eligible Node

ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ œ์–ดํ•˜๋Š” ๋งˆ์Šคํ„ฐ๋กœ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ๋…ธ๋“œ์ด๋‹ค. ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ๊ฐ€ ํ•˜๋Š” ์—ญํ• ์„ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ์ธ๋ฑ์Šค ์ƒ์„ฑ, ์‚ญ์ œ
  • ํด๋Ÿฌ์Šคํ„ฐ ๋…ธ๋“œ์˜ ์ถ”์ , ๊ด€๋ฆฌ
  • ๋ฐ์ดํ„ฐ ์ž…๋ ฅ ์‹œ ํ• ๋‹นํ•  ์ƒค๋“œ ์„ ํƒ

๐Ÿ“Œ Data Node

๋ฐ์ดํ„ฐ(Document)๊ฐ€ ์ €์žฅ๋˜๋Š” ๋…ธ๋“œ์ด๋ฉฐ, ๋ฐ์ดํ„ฐ๊ฐ€ ๋ถ„์‚ฐ ์ €์žฅ๋˜๋Š” ๋ฌผ๋ฆฌ์  ๊ณต๊ฐ„์ธ ์ƒค๋“œ๊ฐ€ ๋ฐฐ์น˜๋˜๋Š” ๋…ธ๋“œ์ด๋‹ค.

CRUD, ์ƒ‰์ธ, ๊ฒ€์ƒ‰, ํ†ต๊ณ„ ๋“ฑ์˜ ๋ฐ์ดํ„ฐ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ ๋งŽ์€ ๋ฆฌ์†Œ์Šค(CPU, ๋ฉ”๋ชจ๋ฆฌ ๋“ฑ)๋ฅผ ํ•„์š”๋กœ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๋ชจ๋‹ˆํ„ฐ๋ง ์ž‘์—…์„ ํ•ด์•ผ ํ•˜๊ณ , ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์™€๋Š” ๋ถ„๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.

Elasticsearch ๋ฒ„์ „์ด ์—…๊ทธ๋ ˆ์ด๋“œ ๋˜๋ฉด์„œ Data Node์—๋„ ์ข€ ๋” ๋‹ค์–‘ํ™”๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ Data Node๋Š” Content Data, Hot Data, Warm Data, Cold Data, Frozen Data๋กœ ์„ธ๋ถ„ํ™” ๋˜์—ˆ๋‹ค.

  • Content Data
    • Content Data ๋…ธ๋“œ๋Š” ์œ ์ €๊ฐ€ ๋งŒ๋“  ์ฝ˜ํ…์ธ ๋ฅผ ์ˆ˜์šฉํ•˜๋Š” ๋…ธ๋“œ์ด๋‹ค.
    • CRUD, ๊ฒ€์ƒ‰ ๋ฐ ์ง‘๊ณ„์™€ ๊ฐ™์€ ์ž‘์—…์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค.
  • Hot Data
    • Hot Data ๋…ธ๋“œ๋Š” ์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค. - ํ•ด๋‹น ๋…ธ๋“œ๋Š” read/write๊ฐ€ ๋น ๋ฅด๋ฉฐ ๋” ๋งŽ์€ ํ•˜๋“œ์›จ์–ด ๋ฆฌ์†Œ์Šค(SSD)๊ฐ€ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ณ ์‚ฌ์–‘์˜ ์„œ๋ฒ„์— ์ ํ•ฉํ•˜๋‹ค.
  • Warm Data
    • Warm Data ๋…ธ๋“œ๋Š” ๋” ์ด์ƒ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋˜์ง€ ์•Š์ง€๋งŒ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ธ๋ฑ์Šค๋ฅผ ์ €์žฅํ•œ๋‹ค.
    • ์ฆ‰ ์˜ค๋ž˜๋œ ๋ฐ์ดํ„ฐ์ด์ง€๋งŒ ํ™œ์šฉํ•˜๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ด€ํ•œ๋‹ค.
    • ์ผ๋ฐ˜์ ์œผ๋กœ ์ด ๋…ธ๋“œ๋Š” ์„ฑ๋Šฅ์ด ๋‚ฎ์€ ํ•˜๋“œ์›จ์–ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Cold Data
    • Cold Data ๋…ธ๋“œ๋Š” ์ฝ๊ธฐ ์ „์šฉ ์ธ๋ฑ์Šค๋ฅผ ์ €์žฅํ•œ๋‹ค.(์ž์ฃผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ธ๋ฑ์Šค)
    • ์ „์šฉ ๋ฐ์ดํ„ฐ์˜ ๊ฒฝ์šฐ ํด๋Ÿฌ์Šคํ„ฐ ์ €์žฅ๊ณต๊ฐ„์„ ์ตœ๋Œ€ 50% ์ ˆ์•ฝ ๊ฐ€๋Šฅํ•˜๋‹ค.
    • ๋ ˆํ”Œ๋ฆฌ์นด๋ฅผ ์Šค๋ƒ…์ƒท์œผ๋กœ ์ €์žฅํ•˜๊ณ  ์Šค๋ƒ…์ƒท ์ €์žฅ์†Œ์— ์˜คํ”„๋กœ๋“œ ํ•œ๋‹ค.
    • ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅ ์Šค๋ƒ…์ƒท์„ ์ด์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ ๋ณต์›์„ฑ์„ ๊ฐ•ํ™”ํ•˜์˜€๋‹ค.
  • Frozen Data
    • Frozen Data ๋…ธ๋“œ๋Š” shared_cache ์˜ต์…˜์œผ๋กœ๋งŒ ๋งˆ์šดํŠธ ๋œ ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅํ•œ ์Šค๋ƒ…์ƒท์„ ์ €์žฅํ•œ๋‹ค.
    • ์ฆ‰ ์Šค๋ƒ…์ƒท ๋ฐ์ดํ„ฐ๋ฅผ ํ•ด๋‹น ๋…ธ๋“œ์— ์ €์žฅํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•˜๋Š” ๋…ธ๋“œ์ด๋‹ค.

๐Ÿ“Œ Ingest Node

๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ™˜ํ•˜๋Š” ๋“ฑ ์‚ฌ์ „ ์ฒ˜๋ฆฌ ํŒŒ์ดํ”„๋ผ์ธ์„ ์‹คํ–‰ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

๐Ÿ“Œ Coordination Only Node

์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ๋ฐ›๊ณ  ๋ผ์šด๋“œ ๋กœ๋นˆ ๋ฐฉ์‹์œผ๋กœ ๋ถ„์‚ฐ์„ ํ•˜๋Š” ๋…ธ๋“œ์ด๋‹ค.

ํด๋Ÿฌ์Šคํ„ฐ์— ๊ด€๋ จ๋œ ๊ฒƒ์€ ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ๋กœ ๋„˜๊ธฐ๊ณ , ๋ฐ์ดํ„ฐ์™€ ๊ด€๋ จ๋œ ๊ฒƒ์€ ๋ฐ์ดํ„ฐ ๋…ธ๋“œ๋กœ ๋„˜๊ธด๋‹ค.

๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ ์—ญํ• ์„ ํ•˜๋Š” ๋…ธ๋“œ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

์ธ๋ฑ์Šค / ์ƒค๋“œ / ๋ณต์ œ

์ธ๋ฑ์Šค (Index) RDBMS์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๋Œ€์‘ํ•˜๋Š” ๊ฐœ๋…์ด๋‹ค.

์ƒค๋“œ (shard)

์ธ๋ฑ์Šค ๋‚ด๋ถ€์—๋Š” ์ƒ‰์ธ๋œ ๋ฐ์ดํ„ฐ๋“ค์ด ์กด์žฌํ•˜๋Š”๋ฐ, ์ด ๋ฐ์ดํ„ฐ๋“ค์€ ํ•˜๋‚˜๋กœ ๋ญ‰์ณ์„œ ์กด์žฌํ•˜์ง€ ์•Š๊ณ  ๋ฌผ๋ฆฌ์  ๊ณต๊ฐ„์— ์—ฌ๋Ÿฌ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋‰˜์–ด ์กด์žฌํ•œ๋‹ค.

์ด๋Ÿฌํ•œ ๋ถ€๋ถ„์„ ์ƒค๋“œ๋ผ๊ณ  ํ•œ๋‹ค. ์ฆ‰, ์Šค์ผ€์ผ ์•„์›ƒ์„ ์œ„ํ•ด ํ•˜๋‚˜์˜ ์ธ๋ฑ์Šค๋ฅผ ์—ฌ๋Ÿฌ ์ƒค๋“œ๋กœ ์ชผ๊ฐฐ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

shard

์ƒค๋“œ๋Š” ํ”„๋ผ์ด๋จธ๋ฆฌ ์ƒค๋“œ์™€ ๋ ˆํ”Œ๋ฆฌ์นด ์ƒค๋“œ๋กœ ๋‚˜๋‰œ๋‹ค.

๋ ˆํ”Œ๋ฆฌ์นด๋Š” ์›๋ณธ shard๊ฐ€ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ๋ณต์ œ๋ณธ shard๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์–ด ์žฅ์•  ๋Œ€์‘์— ํšจ๊ณผ์ ์ด๋‹ค.

shard2

  • ํ”„๋ผ์ด๋จธ๋ฆฌ ์ƒค๋“œ
    • ๋ฐ์ดํ„ฐ์˜ ์›๋ณธ์ด๋‹ค. Elasticsearch์—์„œ ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ ์š”์ฒญ์„ ๋‚ ๋ฆฌ๋ฉด ๋ฐ˜๋“œ์‹œ ํ”„๋ผ์ด๋จธ๋ฆฌ ์ƒค๋“œ์— ์š”์ฒญํ•˜๊ฒŒ ๋˜๊ณ , ํ•ด๋‹น ๋‚ด์šฉ์€ ๋ ˆํ”Œ๋ฆฌ์นด ์ƒค๋“œ์— ๋ณต์ œ๋œ๋‹ค. ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•ด ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ƒค๋“œ ๊ฐœ์ˆ˜๋ฅผ ์กฐ์ •ํ•˜๊ธฐ๋„ ํ•œ๋‹ค.
  • ๋ ˆํ”Œ๋ฆฌ์นด ์ƒค๋“œ (๋ณต์ œ)
    • ํ”„๋ผ์ด๋จธ๋ฆฌ ์ƒค๋“œ์˜ ๋ณต์ œ๋ณธ์ด๋‹ค. ๊ธฐ์กด ์›๋ณธ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฌด๋„ˆ์กŒ์„ ๋•Œ ๊ทธ ๋Œ€์‹  ์‚ฌ์šฉํ•˜๋ฉด์„œ ์žฅ์• ๋ฅผ ๊ทน๋ณตํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์›๋ณธ์ธ ํ”„๋ผ์ด๋จธ๋ฆฌ ์ƒค๋“œ์™€ ๋™์ผํ•œ ๋…ธ๋“œ์— ๋ฐฐ์ •๋˜์ง€ ์•Š๋Š”๋‹ค.

์„ธ๊ทธ๋จผํŠธ

์„ธ๊ทธ๋จผํŠธ๋ž€ Elasticsearch์—์„œ ๋ฌธ์„œ์˜ ๋น ๋ฅธ ๊ฒ€์ƒ‰์„ ์œ„ํ•ด ์„ค๊ณ„๋œ ์ž๋ฃŒ ๊ตฌ์กฐ์ด๋ฉฐ, ์ƒค๋“œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฌผ๋ฆฌ์ ์ธ ํŒŒ์ผ์ด๋‹ค. ๊ฐ ์ƒค๋“œ๋Š” ๋‹ค์ˆ˜์˜ ์„ธ๊ทธ๋จผํŠธ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ๊ฒ€์ƒ‰ ์š”์ฒญ์„ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌํ•˜์—ฌ ํ›จ์”ฌ ํšจ์œจ์ ์ธ ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์ƒค๋“œ์—์„œ ๊ฒ€์ƒ‰ ์‹œ, ๋จผ์ € ๊ฐ ์„ธ๊ทธ๋จผํŠธ๋ฅผ ๊ฒ€์ƒ‰ํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ์กฐํ•ฉํ•œ ํ›„ ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ํ•ด๋‹น ์ƒค๋“œ์˜ ๊ฒฐ๊ณผ๋กœ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๋•Œ ์„ธ๊ทธ๋จผํŠธ๋Š” ๋‚ด๋ถ€์— ์ƒ‰์ธ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์—ญ์ƒ‰์ธ ๊ตฌ์กฐ๋กœ ์ €์žฅ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ๊ฒ€์ƒ‰ ์†๋„๊ฐ€ ๋งค์šฐ ๋น ๋ฅด๋‹ค.

๊ทธ๋Ÿฐ๋ฐ, ๋งค ์š”์ฒญ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์„ธ๊ทธ๋จผํŠธ๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ๋ฉด ์—„์ฒญ๋‚˜๊ฒŒ ๋งŽ์€ ์„ธ๊ทธ๋จผํŠธ๊ฐ€ ์ƒ์„ฑ๋  ๊ฒƒ์ด๊ณ , ์ด๋กœ ์ธํ•ด ๋‹ค๋ฅธ ์š”์ฒญ์— ์ง€์žฅ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ธ๋ฉ”๋ชจ๋ฆฌ ๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ธ๋ฉ”๋ชจ๋ฆฌ ๋ฒ„ํผ์— ์Œ“์ธ ๋‚ด์šฉ์„ ์ผ์ • ์‹œ๊ฐ„์ด ์ง€๋‚˜๊ฑฐ๋‚˜ ๋ฒ„ํผ๊ฐ€ ๊ฐ€๋“์ฐจ๋ฉด flush๋ฅผ ์ทจํ•˜๊ณ , flush ์ž‘์—…์ด ์ˆ˜ํ–‰๋˜๋ฉด ์‹œ์Šคํ…œ ์บ์‹œ์— ์„ธ๊ทธ๋จผํŠธ๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. ์ด ์‹œ์ ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๊ฐ€ ๋น„๋กœ์†Œ ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค. ํ•˜์ง€๋งŒ ์ด ์ƒํƒœ๋Š” ์„ธ๊ทธ๋จผํŠธ๊ฐ€ ์‹œ์Šคํ…œ ์บ์‹œ์— ์ €์žฅ๋œ ์ƒํƒœ์ด์ง€, ๋””์Šคํฌ์— ์ €์žฅ๋œ ์ƒํƒœ๋Š” ์•„๋‹ˆ๋‹ค.

๋””์Šคํฌ์— ์“ฐ์—ฌ์ง€๋Š” ์ž‘์—… ์—ญ์‹œ ์ผ์ • ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด commit์„ ํ†ตํ•ด์„œ ๋ฌผ๋ฆฌ์ ์ธ ๋””์Šคํฌ์— ์„ธ๊ทธ๋จผํŠธ๋ฅผ ์ €์žฅํ•ด ์ฃผ๊ณ , ์ €์žฅ๋œ ์„ธ๊ทธ๋จผํŠธ๋Š” ์‹œ๊ฐ„์ด ์ง€๋‚ ์ˆ˜๋ก ํ•˜๋‚˜๋กœ ๋ณ‘ํ•ฉํ•˜๋Š” ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ๋ณ‘ํ•ฉ์„ ํ†ตํ•ด ์„ธ๊ทธ๋จผํŠธ๋ฅผ ํ•˜๋‚˜๋กœ ์ค„์—ฌ ์ฃผ๋ฉด, ๊ฒ€์ƒ‰ํ•  ์„ธ๊ทธ๋จผํŠธ์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ค„์–ด๋“ค๊ธฐ ๋•Œ๋ฌธ์— ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋œ๋‹ค.

์„ธ๊ทธ๋จผํŠธ ๋ณ‘ํ•ฉ ์‹œ์—๋Š” ์ƒˆ๋กœ์šด ์„ธ๊ทธ๋จผํŠธ๋ฅผ ๋งŒ๋“ค ๊ณต๊ฐ„์ด ์žˆ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋””์Šคํฌ๊ฐ€ ๊ฝ‰ ์ฐฌ ์ƒํƒœ์—์„œ๋Š” ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ์„ธ๊ทธ๋จผํŠธ ๋ณ‘ํ•ฉ์€ ์‹œ์Šคํ…œ ์ž์›์„ ๋งŽ์ด ์“ฐ๋Š” ๋ถ€๋‹ด์Šค๋Ÿฌ์šด ์ž‘์—…์ด๋ฏ€๋กœ ์‹œ์Šคํ…œ ์ž์›์ด ์—ฌ์œ ๋กœ์šธ ๋•Œ ์ง„ํ–‰ํ•œ๋‹ค.

segement

ElasticSearch์˜ ์žฅ๋‹จ์ 

์žฅ์ 

  • Scale out
    • ์ƒค๋“œ๋ฅผ ํ†ตํ•ด ๊ทœ๋ชจ๊ฐ€ ์ˆ˜ํ‰์ ์œผ๋กœ ๋Š˜์–ด๋‚  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ณ ๊ฐ€์šฉ์„ฑ
    • Replica๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ์•ˆ์ „์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค.
  • Schema Free
    • Json ๋ฌธ์„œ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰์„ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ ์Šคํ‚ค๋งˆ ๊ฐœ๋…์ด ์—†๋‹ค.
  • Restful
    • ๋ฐ์ดํ„ฐ CRUD ์ž‘์—…์€ HTTP Restful API๋ฅผ ํ†ตํ•ด ์ˆ˜ํ–‰ํ•œ๋‹ค.
    • SELECT = GET
    • INSERT = PUT
    • UPDATE = POST
    • DELETE = DELETE
    • Restful API๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ์—์„œ ์‘์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.
  • Inverted Index

๋‹จ์ 

  • ์‹ค์‹œ๊ฐ„ ์ฒ˜๋ฆฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
    • elasticsearch๋Š” ์ธ๋ฉ”๋ชจ๋ฆฌ ๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์“ฐ๊ธฐ์™€ ๋™์‹œ์— ์ฝ๊ธฐ ์ž‘์—…์„ ํ•  ๊ฒฝ์šฐ, ์„ธ๊ทธ๋จผํŠธ๊ฐ€ ์ƒ์„ฑ๋˜๊ธฐ ์ „๊นŒ์ง€๋Š” ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์—†๋‹ค.
  • ํŠธ๋žœ์žญ์…˜์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • ๋ถ„์‚ฐ ์‹œ์Šคํ…œ ๊ตฌ์„ฑ์˜ ํŠน์ง• ๋•Œ๋ฌธ์— ์‹œ์Šคํ…œ์ ์œผ๋กœ ๋น„์šฉ ์†Œ๋ชจ๊ฐ€ ํฐ ํŠธ๋žœ์žญ์…˜ ๋ฐ ๋กค๋ฐฑ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ์ง„์ •ํ•œ ์˜๋ฏธ์˜ ์—…๋ฐ์ดํŠธ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • ์„ธ๊ทธ๋จผํŠธ์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋  ๊ฒฝ์šฐ Soft-Delete๋ฅผ ํ•œ๋‹ค. (์‚ญ์ œ flag = true)
    • ์„ธ๊ทธ๋จผํŠธ์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ˆ˜์ •๋  ๊ฒฝ์šฐ Soft-Delete๋ฅผ ํ•˜๊ณ , ์ˆ˜์ •๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒˆ๋กœ์šด ์„ธ๊ทธ๋จผํŠธ๋กœ ์ƒ์„ฑํ•œ๋‹ค.
    • RDBMS์˜ Index์™€ ์œ ์‚ฌํ•œ ๋™์ž‘
  • Document๊ฐ„์˜ join์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๋‹ค.
    • ๋‘ ๋ฒˆ์˜ ์ฟผ๋ฆฌ๋กœ ํ•ด๊ฒฐ์€ ๊ฐ€๋Šฅ

์ถœ์ฒ˜

elasticsearch ๊ฐ„๋‹จ๊ฐœ๋…+์žฅ๋‹จ elasticsearch๋Š” ๋ฌด์—‡์ธ๊ฐ€์š” elasticSearch elasticSearch vs RDB elasticSearch ๊ตฌ์กฐ

๋ฉด์ ‘ ์งˆ๋ฌธ

  1. ElasticSearch ๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?
  1. ElasticSearch๋Š” ์–ธ์ œ/์™œ ์‚ฌ์šฉ๋˜๋‚˜์š”?
  1. ElasticSearch์˜ ๊ตฌ์กฐ๋Š” ์–ด๋–ป๊ฒŒ ๋˜์–ด์žˆ๋‚˜์š”?
  1. ElasticSearch๋Š” ์™œ ๊ฒ€์ƒ‰ ์†๋„๊ฐ€ ๋น ๋ฅธ๊ฐ€์š”?
  1. ElasticSearch์˜ ์žฅ๋‹จ์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?