Elastic Search ์•Œ์•„๋ณด๊ธฐ ๐Ÿฃ

smallcherry's techlogยท2024๋…„ 7์›” 22์ผ
0
post-thumbnail

์กฐ์‚ฌ ๊ณ„๊ธฐ

  • ์‚ฌ๋‚ด ํ•œ ํ”„๋กœ์ ํŠธ์˜ ์š”๊ฑด ์ค‘ ํ˜•ํƒœ์†Œ ๋ถ„์„์ด ์ ์šฉ๋œ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜์—ฌ, ๊ตฌํ˜„ ๊ธฐ์ˆ ๋กœ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์กฐ์‚ฌ

Elastic Search๋ž€

  • = ๊ฒ€์ƒ‰ ๋ฐ ๋ถ„์„ ์—”์ง„ (Apache Lucene ์— ๊ธฐ๋ฐ˜ํ•จ)
    • Apache Lucene
      • = ์—ญ์ƒ‰์ธ ๊ตฌ์กฐ ๊ธฐ๋ฐ˜์˜ ๊ฒ€์ƒ‰ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ using Java (์˜ค๋Š˜๋‚  ๋ชจ๋“  ๊ฒ€์ƒ‰์—”์ง„์˜ ์‹œ์ดˆ)

ํŠน์ง•

  • ๋ถ„์‚ฐ์ฒ˜๋ฆฌ๋ฅผ ํ†ตํ•ด ์‹ค์‹œ๊ฐ„์„ฑ์œผ๋กœ ๋น ๋ฅธ ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅ
  • NoSQL์˜ ์ผ์ข…์œผ๋กœ ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ์Œ
    • ๊ฒ€์ƒ‰์—”์ง„์ด์ง€๋งŒ ๋Œ€์šฉ๋Ÿ‰ ์Šคํ† ๋ฆฌ์ง€๋กœ๋„ ํ™œ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค (like MongoDB, Hbase)

๋ผ์ด์„ผ์Šค: ELv2(Elastic License 2)๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

  • Elastic License๊ฐ€ ์ ์šฉ๋จ (ํ˜„ ์ตœ์‹  ๋ฒ„์ „์ธ 8.14.3 ๊ธฐ์ค€)
  • Elastic License
  • ์ค‘์š”ํ•œ ๋ถ€๋ถ„
  • Reference
    https://www.elastic.co/kr/pricing/faq/licensing

์žฅ๋‹จ์ 

  • ์žฅ์ 
    • ์˜คํ”ˆ์†Œ์Šค ๊ฒ€์ƒ‰์—”์ง„ (์ปค๋ฎค๋‹ˆํ‹ฐ ํ™œ๋ฐœ, ๋Š์ž„์—†๋Š” ๊ฐœ์„ )
    • ์ „๋ฌธ๊ฒ€์ƒ‰ - ๋‚ด์šฉ์ „์ฒด๋ฅผ ์ƒ‰์ธํ•ด์„œ ํŠน์ • ๋‹จ์–ด๊ฐ€ ํฌํ•จ๋œ ๋ฌธ์„œ๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Œ
      • ๊ธฐ๋Šฅ/์–ธ์–ด ๋ณ„ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ ์šฉ ๊ฐ€๋Šฅ
    • Kibana์™€ ์—ฐ๊ณ„ํ•ด ํ†ต๊ณ„๋ถ„์„์— ํ™œ์šฉ๊ฐ€๋Šฅ
    • ์ •ํ˜•ํ™”๋˜์ง€ ์•Š์€ ๋ฌธ์„œ๋„ ์ž๋™์œผ๋กœ ์ƒ‰์ธํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Œ
    • Restful API์— ๊ธฐ๋ฐ˜ํ•˜์—ฌ ๊ฐœ๋ฐœ์–ธ์–ด, ์šด์˜์ฒด์ œ, ์‹œ์Šคํ…œ์— ๋…๋ฆฝ์ ์œผ๋กœ ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ์—์„œ ํ™œ์šฉ ๊ฐ€๋Šฅ
    • ๋ถ„์‚ฐ๊ตฌ์„ฑ์ด ๊ฐ€๋Šฅํ•จ (๋ถ„์‚ฐํ™˜๊ฒฝ์—์„œ์˜ ๋ฐ์ดํ„ฐ ๋‹จ์œ„: shard)
  • ๋‹จ์ 
    • Transaction Rollback ๋ฏธ์ง€์›
    • ์ƒ‰์ธ๋˜ ๋ฐ์ดํ„ฐ๋Š” 1์ดˆ ๋’ค์—๋‚˜ ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅ (์™„์ „ํ•œ ์‹ค์‹œ๊ฐ„์„ฑ์„ ๋ณด์žฅํ•˜์ง€๋Š” ๋ชปํ•จ)
    • ๋ฐ์ดํ„ฐ์˜ ์—…๋ฐ์ดํŠธ๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์Œ (์—…๋ฐ์ดํŠธ ์‹œ ์‹ค์งˆ์ ์œผ๋กœ ์‚ญ์ œํ›„ ์žฌ์ƒ์„ฑ ๋จ)
      • ๋น„์šฉ์€ ๋งŽ์ด ๋“œ๋‚˜, ๋ถˆ๋ณ€์„ฑ์ด๋ผ๋Š” ์ด์ ์„ ์ทจํ•จ

์ž‘๋™

  • JSON document ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ๋ฅผ API๋ฅผ ์‚ฌ์šฉํ•ด Elastic Search๋กœ ์ „์†กํ•  ์ˆ˜ ์žˆ์Œ
  • ES๋Š” document๋ฅผ ์ €์žฅํ•˜๊ณ  ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ธ๋ฑ์Šค์— ๋ฌธ์„œ์— ๋Œ€ํ•œ ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅํ•œ ์ฐธ์กฐ๋ฅผ ์ถ”๊ฐ€
  • ES API(Rest API๋กœ ์ œ๊ณต)๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฌธ์„œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Œ (์ฟผ๋ฆฌ ๋Œ€์‹  api ๋ฅผ ์‚ฌ์šฉ)
  • ์‹œ๊ฐํ™” ๋„๊ตฌ์ธ Kibana๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์‹œ๊ฐํ™”ํ•˜๊ณ  ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Œ
  • ES HTTP Method vs RDBMS SQL

๊ธฐ๋ณธ ์šฉ์–ด

  • ES์™€ RDBMS
  • ์šฉ์–ด ์ •๋ฆฌ
    • Index: ๋ฐ์ดํ„ฐ ์ €์žฅ ๊ณต๊ฐ„
      • ๋…ธ๋“œ์™€ ์ธ๋ฑ์Šค๋Š” M:N
        • ํ•˜๋‚˜์˜ ๋ฌผ๋ฆฌ๋…ธ๋“œ์— ์—ฌ๋Ÿฌ๊ฐœ ๋…ผ๋ฆฌ ์ธ๋ฑ์Šค ์ƒ์„ฑ ๊ฐ€๋Šฅ
        • ์—ฌ๋Ÿฌ ๋ฌผ๋ฆฌ๋…ธ๋“œ์— ํ•˜๋‚˜์˜ ์ธ๋ฑ์Šค๊ฐ€ ๋ถ„์‚ฐ์ €์žฅ ๊ฐ€๋Šฅ
    • Shard: ์ƒ‰์ธ๋œ ๋ฌธ์„œ๋Š” ํ•˜๋‚˜์˜ ์ธ๋ฑ์Šค์— ์ €์žฅ๋˜๊ณ , ์ธ๋ฑ์Šค ๋‚ด๋ถ€์— ์ƒ‰์ธ๋œ ๋ฐ์ดํ„ฐ๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ํŒŒํ‹ฐ์…˜(=์ƒค๋“œ) ๋กœ ๋‚˜๋‰˜์–ด ์ €์žฅ๋จ
    • Type: ์ธ๋ฑ์Šค์˜ ๋…ผ๋ฆฌ์  ๊ตฌ์กฐ ๋‹จ์œ„ (like Table)
      • version 6.1๋ถ€ํ„ฐ ์ธ๋ฑ์Šค ๋‹น ํ•˜๋‚˜์˜ ํƒ€์ž…๋งŒ ์„ค์ • ๊ฐ€๋Šฅ
    • Document: ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋Š” ์ตœ์†Œ ๋‹จ์œ„ (like Row). JSON ํฌ๋งท์œผ๋กœ ์ €์žฅ
    • Field: ๋ฌธ์„œ๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์†์„ฑ (like column). ํ•˜๋‚˜์˜ ํ•„๋“œ๋Š” ๋ชฉ์ ์— ๋”ฐ๋ผ ๋‹ค์ˆ˜์˜ ๋ฐ์ดํ„ฐํƒ€์ž…์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ
    • Mapping: ๋ฌธ์„œ์˜ ํ•„๋“œ, ํ•„๋“œ ์†์„ฑ์„ ์ •์˜ํ•˜๊ณ  ๊ทธ์— ๋”ฐ๋ฅธ ์ƒ‰์ธ ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•จ (like schema)

๊ตฌ์„ฑ

Node Types

  • ๋…ธ๋“œ๋“ค์€ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์„ฑํ•จ
  • Master Node: ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ, ๋…ธ๋“œ ์ถ”๊ฐ€/์ œ๊ฑฐ ๊ด€๋ฆฌ
  • Data Node: ์‹ค์งˆ์ ์ธ ๋ฐ์ดํ„ฐ ์ €์žฅ.
    • ๋ฐ์ดํ„ฐ๊ฐ€ ์‹ค์ œ๋กœ ๋ถ„์‚ฐ์ €์žฅ๋˜๋Š” ๋ฌผ๋ฆฌ๊ณต๊ฐ„์ธ ์ƒค๋“œ๊ฐ€ ๋ฐฐ์น˜๋จ
    • ๊ฒ€์ƒ‰๊ณผ ํ†ต๊ณ„ ๋“ฑ ๋ฐ์ดํ„ฐ ๊ด€๋ จ ์ž‘์—… ์ˆ˜ํ–‰
  • Coordinating Node
    • ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ๋งŒ ๋ฐ›์•„์„œ ๋ถ„๋ฐฐ
    • ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ จ ์š”์ฒญ์€ ๋งˆ์Šคํ„ฐ๋…ธ๋“œ, ๋ฐ์ดํ„ฐ ๊ด€๋ จ ์š”์ฒญ์€ ๋ฐ์ดํ„ฐ๋…ธ๋“œ๋กœ ์ „๋‹ฌ
  • Ingest Node
    • ๋ฌธ์„œ์˜ ์ „์ฒ˜๋ฆฌ ๋‹ด๋‹น
    • ์ธ๋ฑ์Šค ์ƒ์„ฑ ์ „ ๋ฌธ์„œ์˜ ํ˜•์‹์„ ๋‹ค์–‘ํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Œ

Cluster, Node, Shard

  • ํด๋Ÿฌ์Šคํ„ฐ: 1๊ฐœ ์ด์ƒ์˜ ๋…ธ๋“œ๋กœ ์ด๋ฃจ์–ด์ง„ ES์˜ ๊ธฐ๋ณธ ๋‹จ์œ„

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

    • ์ด๋•Œ ์ƒ์„ฑ๋œ ๋ ˆํด๋ฆฌ์นด๋Š” primary์™€ ๋‹ค๋ฅธ ๋…ธ๋“œ์— ์ €์žฅ๋œ๋‹ค. (for ๊ณ ๊ฐ€์šฉ์„ฑ)

    • ๋ ˆํ”Œ๋ฆฌ์นด: ๊ฐ ์ƒค๋“œ์˜ ๋ณต์ œ๋ณธ (for ๊ณ ๊ฐ€์šฉ์„ฑ)

    • ์˜ˆ์‹œ

      • ์ธ๋ฑ์Šค ๋ณ„๋กœ ์ƒค๋“œ๊ฐ€ 2๊ฐœ๊ณ  ๋ ˆํด๋ฆฌ์นด๊ฐ€ 1๊ฐœ๋กœ ์„ค์ •

        {
            "settings" : {
                "index" : {
                    "number_of_shards" : 2,
                    "number_of_replicas" : 1
                }
            }
        }
      • ์œ„์˜ ์„ค์ •๊ฐ’์ด ์„œ๋ฒ„์— ์ ์šฉ๋˜๋ฉด ์•„๋ž˜ ํ˜•ํƒœ๊ฐ€ ๋จ

        • ์ธ๋ฑ์Šค a๋Š” ์ƒค๋“œ๊ฐ€ 2๊ฐœ(a0, a1), ๊ฐ ์ƒค๋“œ์˜ ๋ ˆํ”Œ๋ฆฌ์นด๋Š” 1๊ฐœ์”ฉ ์ƒ์„ฑ๋˜์–ด ์žˆ๋‹ค
        • ์ธ๋ฑ์Šค b๋Š” ์ƒค๋“œ๊ฐ€ 3๊ฐœ(b0, b1, b2), ๊ฐ ์ƒค๋“œ์˜ ๋ ˆํ”Œ๋ฆฌ์นด๋Š” 1๊ฐœ์”ฉ ์ƒ์„ฑ๋˜์–ด ์žˆ๋‹ค

References

https://aws.amazon.com/ko/what-is/elasticsearch/

https://jaemunbro.medium.com/elastic-search-๊ธฐ์ดˆ-์Šคํ„ฐ๋””-ff01870094f0

profile
Java Developer

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด