SK Shieldus Rookies 19๊ธฐ๐Ÿคํด๋ผ์šฐ๋“œ๊ธฐ๋ฐ˜ ์ทจ์•ฝ์  ์ง„๋‹จ ๋ฐ ๋Œ€์‘ ์‹ค๋ฌด(ELK ์Šคํƒ)

์ŸŒ์ฅฌยท2024๋…„ 5์›” 8์ผ
0
post-thumbnail

๐Ÿ“ŒELK ์Šคํƒ

https://aws.amazon.com/ko/what-is/elk-stack/

ELK ์Šคํƒ์€ Elasticsearch, Logstash, Kibana์˜ ์•ฝ์ž์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘, ์ €์žฅ, ๋ถ„์„, ์‹œ๊ฐํ™”๋ฅผ ์œ„ํ•œ ์„ธ ๊ฐ€์ง€ ๋„๊ตฌ๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ํ”Œ๋žซํผ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

Elasticsearch (E): ๋ถ„์‚ฐ ๊ฒ€์ƒ‰ ์—”์ง„

  • ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ถ„์„

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

์ด๋ฅผ ์œ„ํ•ด Elasticsearch๋Š” JSON ํ˜•์‹์˜ ๋ฌธ์„œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ด ๋ฌธ์„œ๋“ค์„ ๋น ๋ฅด๊ฒŒ ๊ฒ€์ƒ‰ํ•˜๊ณ  ๋ถ„์„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ Elasticsearch๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ‰์ธํ™”ํ•˜์—ฌ ๊ฒ€์ƒ‰์„ ๋น ๋ฅด๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” Apache Lucene ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์š”์•ฝํ•˜์ž๋ฉด, Elasticsearch๋Š” ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋กœ, ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•˜์—ฌ ์›ํ•˜๋Š” ์ •๋ณด๋ฅผ ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ค๋‹ˆ๋‹ค.

Logstash (L): ์ด๋ฒคํŠธ ์ˆ˜์ง‘๊ณผ ์ •์ œ๋ฅผ ์œ„ํ•œ ๋„๊ตฌ

  • ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ๊ฐ€๊ณต

Logstash๋Š” ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘, ๋ณ€ํ™˜ ๋ฐ ์ „์†กํ•˜๋Š” ์˜คํ”ˆ ์†Œ์Šค ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์—”์ง„์ž…๋‹ˆ๋‹ค. ์ฃผ๋กœ ๋‹ค์–‘ํ•œ ์†Œ์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ , ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ํ•„์š”์— ๋งž๊ฒŒ ๊ฐ€๊ณตํ•˜๊ณ , ๋‹ค์–‘ํ•œ ๋Œ€์ƒ์— ์ „๋‹ฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

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

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

์š”์•ฝํ•˜์ž๋ฉด, Logstash๋Š” ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ์†Œ์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ , ํ•„ํ„ฐ๋งํ•˜๊ณ , ๊ฐ€๊ณตํ•˜์—ฌ ๋‹ค์–‘ํ•œ ๋Œ€์ƒ์— ์ „๋‹ฌํ•˜๋Š” ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์—”์ง„์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

Kibana (K): ์‹œ๊ฐํ™” ๋ฐ ์—˜๋ผ์Šคํ‹ฑ ๊ด€๋ฆฌ ๋„๊ตฌ

  • ์—˜๋ผ์Šคํ‹ฑ์„œ์น˜์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์‹œ๊ฐํ™”ํ•˜๊ณ  ๋ชจ๋‹ˆํ„ฐ๋ง

Kibana๋Š” Elasticsearch์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” ๋ฐ ๊ด€๋ฆฌ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. Elasticsearch๋กœ ์ˆ˜์ง‘๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰, ์‹œ๊ฐํ™”, ๋ถ„์„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” Kibana๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ์‹œ๊ฐํ™”ํ•˜๊ณ  ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“ค์–ด ๋‹ค์–‘ํ•œ ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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


๐Ÿ“Œ ์—˜๋ผ์Šคํ‹ฑ ์„œ์น˜ ์„ค์น˜


1. ํŒจํ‚ค์ง€ ๋‹ค์šด๋กœ๋“œ

https://www.elastic.co/kr/downloads/elasticsearch


2. C:\ELK ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•œ ํ›„ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์€ ์••์ถ•ํŒŒ์ผ์„ (ํ•œ๊ธ€์ด ํฌํ•จ๋˜์ง€ ์•Š์€ ๋””๋ ‰ํ„ฐ๋ฆฌ์—) ์••์ถ•ํ•ด์ œ

  • bin โ‡’ ์„œ๋ฒ„๋ฅผ ์‹œ์ž‘ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ์Šคํฌ๋ฆฝํŠธ์™€ ๊ธฐํƒ€ ์œ ํ‹ธ๋ฆฌํ‹ฐ๊ฐ€ ๋“ค์–ด ์žˆ๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ

  • bin/elasticsearch.bat โ‡’ ์—˜๋ผ์Šคํ‹ฑ์„œ์น˜ ์„œ๋ฒ„๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๋ฐฐ์น˜ ํŒŒ์ผ

  • config โ‡’ ์„œ๋ฒ„ ๊ตฌ์„ฑ ํŒŒ์ผ์ด ๋“ค์–ด ์žˆ๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ (๋Œ€๋ถ€๋ถ„ ๊ธฐ๋ณธ ์„ค์ •์œผ๋กœ ์‹คํ–‰์ด ๊ฐ€๋Šฅ)

  • config/elasticsearch.yml โ‡’ ํด๋Ÿฌ์Šคํ„ฐ ์ •๋ณด, ๊ฐ ๋…ธ๋“œ์˜ ์ •๋ณด, ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ์ €์žฅํ•  ๊ฒฝ๋กœ ๋“ฑ ์—˜๋ผ์Šคํ‹ฑ์„œ์น˜์˜ ํ•ต์‹ฌ์ ์ธ ์„ค์ •์„ ํฌํ•จ

  • config/jvm.options โ‡’ ํž™ ์‚ฌ์ด์ฆˆ๋‚˜ GC(Garbage Collection) ์˜ต์…˜, ํž˜ ๋คํ”„ ๋“ฑ JVM ์„ค์ •์„ ํฌํ•จ

  • config/log4j2.properties โ‡’ log4j2 ๋กœ๊น…๊ณผ ๊ด€๋ จ๋œ ์„ค์ •์„ ํฌํ•จ

  • plugins โ‡’ ํ”Œ๋Ÿฌ๊ทธ์ธ ํ˜ธ์ŠคํŒ…์„ ์œ„ํ•œ ๋””๋ ‰ํ„ฐ๋ฆฌ

  • modules โ‡’ ๋ชจ๋“ˆ ํฌํ•จ

  • logs โ‡’ ์‹คํ–‰ ์ค‘์ธ ์—˜๋ผ์Šคํ‹ฑ์„œ์น˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์„œ๋ฒ„ ๋ฐ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘ ๋กœ๊ทธ๋ฅผ ํฌํ•จํ•œ ๋กœ๊น… ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ

  • data โ‡’ ํผ์‹œ์Šคํ„ดํŠธ ์ €์žฅ์†Œ ์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ธฐ๋ก๋˜๋Š” ํด๋”


3. elasticsearch.yml ํŒŒ์ผ ์„ ํƒ ํ›„, ์—˜๋ผ์Šคํ‹ฑ์„œ์น˜์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ณด์•ˆ ๊ด€๋ จ ๊ธฐ๋Šฅ์„ ๋น„ํ™œ์„ฑํ™”ํ•จ.

c:\Users\crpark> cd c:\ELK

c:\ELK> code .

โ‡’ ๋ฌธ์„œ ๋งจ ๋งˆ์ง€๋ง‰์— ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€

xpack.security.enabled: false


4. ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์œผ๋กœ ๋ช…๋ น ํ”„๋กฌํ”„ํŠธ ์‹คํ–‰ํ•œ ํ›„ elasticsearch๋ฅผ ์‹คํ–‰

์—˜๋ผ์Šคํ‹ฑ ์„œ์น˜ ์‹คํ–‰ํ•˜๊ธฐ

c:\Users\crpark> cd c:\ELK\elasticsearch-8.13.2\bin

c:\ELK\elasticsearch-8.13.2\bin> elasticsearch.bat


5. ํด๋Ÿฌ์Šคํ„ฐ ๋™์ž‘์„ ํ™•์ธ

โ‘  ๋ธŒ๋ผ์šฐ์ €๋กœ http://localhost:9200 ์œผ๋กœ ์ ‘์†

โ‘ก CURL ๋ช…๋ น์œผ๋กœ ํ™•์ธ

c:\ELK>curl -XGET http://localhost:9200

{
"name" : "DESKTOP-304U2MR", โ‡ ์ธ์Šคํ„ด์Šค ์ด๋ฆ„ (๊ธฐ๋ณธ๊ฐ’์€ ์ปดํ“จํ„ฐ ์ด๋ฆ„)
"cluster_name" : "elasticsearch", โ‡ ํ•ด๋‹น ๋…ธ๋“œ๊ฐ€ ๊ฐ€์ž…ํ•œ ํด๋Ÿฌ์Šคํ„ฐ ์ด๋ฆ„ (๊ธฐ๋ณธ๊ฐ’์€ elasticsearch)
"cluster_uuid" : "ncUNUa67SQSaoOoX5MfhuA",
"version" : {
"number" : "8.13.2",
"build_flavor" : "default",
"build_type" : "zip",
"build_hash" : "16cc90cd2d08a3147ce02b07e50894bc060a4cbf",
"build_date" : "2024-04-05T14:45:26.420424304Z",
"build_snapshot" : false,
"lucene_version" : "9.10.0",
"minimum_wire_compatibility_version" : "7.17.0",
"minimum_index_compatibility_version" : "7.0.0"
},
"tagline" : "You Know, for Search"
}

elasticsearch.bat ๋ช…๋ น์œผ๋กœ ์‹คํ–‰ํ•œ ๊ฒƒ์„ Ctrl + C ์ž…๋ ฅ์œผ๋กœ ์ข…๋ฃŒ


6. Windows ์šด์˜ ์ฒด์ œ์—์„œ Elasticsearch๋ฅผ ์„œ๋น„์Šค๋ฅผ ๋“ฑ๋ก, ์‹คํ–‰, ์ค‘์ง€

Elasticsearch๋ฅผ Windows ์‹œ์Šคํ…œ์˜ ์„œ๋น„์Šค๋กœ ์„ค์น˜ํ•˜๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ์„œ๋น„์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด Elasticsearch๋ฅผ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์‹œ์Šคํ…œ ๋ถ€ํŒ… ์‹œ ์ž๋™์œผ๋กœ ์‹œ์ž‘๋˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

โ‘  ์„œ๋น„์Šค ์ƒ์„ฑ

c:\ELK\elasticsearch-8.13.2\bin> elasticsearch-service.bat install

Installing service : elasticsearch-service-x64

โ‘ก ์„œ๋น„์Šค ์‹œ์ž‘

c:\ELK\elasticsearch-8.13.2\bin> elasticsearch-service.bat start

The service 'elasticsearch-service-x64' has been started

c:\ELK\elasticsearch-8.13.2\bin> >curl -XGET http://localhost:9200
โ‡ ์—˜๋ผ์Šคํ‹ฑ์„œ์น˜๊ฐ€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ์‹คํ–‰๋˜๋ฏ€๋กœ ๋‹ค๋ฅธ ์ž‘์—…์ด ๊ฐ€๋Šฅ
{
"name" : "DESKTOP-304U2MR",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "zBcM02mqQmmltfJvstR3kA",
"version" : {
"number" : "8.13.2",
"build_flavor" : "default",
"build_type" : "zip",
"build_hash" : "16cc90cd2d08a3147ce02b07e50894bc060a4cbf",
"build_date" : "2024-04-05T14:45:26.420424304Z",
"build_snapshot" : false,
"lucene_version" : "9.10.0",
"minimum_wire_compatibility_version" : "7.17.0",
"minimum_index_compatibility_version" : "7.0.0"
},
"tagline" : "You Know, for Search"
}

โ‘ข ์„œ๋น„์Šค ์ค‘์ง€

c:\ELK\elasticsearch-8.13.2\bin> elasticsearch-service.bat stop

โ‘ฃ ์„œ๋น„์Šค ์ฝ˜์†”์—์„œ ์„œ๋น„์Šค ์‹œ์ž‘, ์ค‘์ง€, ๋‹ค์‹œ ์‹œ์ž‘ ๋“ฑ์ด ๊ฐ€๋Šฅํ•˜๊ณ , ์œˆ๋„์šฐ ์‹คํ–‰ ์‹œ ์ž๋™์œผ๋กœ ์‹คํ–‰๋˜๋„๋ก ์„ค์ •๋„ ๊ฐ€๋Šฅ

๐Ÿ“Œ ํ‚ค๋ฐ”๋‚˜ ์„ค์น˜


1. ํŒจํ‚ค์ง€ ๋‹ค์šด๋กœ๋“œ

https://www.elastic.co/kr/downloads/kibana


2. ๋‹ค์šด๋กœ๋“œ ๋ฐ›์€ ํŒจํ‚ค์ง€๋ฅผ C:\ELK ์•„๋ž˜์— ์••์ถ• ํ•ด์ œ



3. ํ‚ค๋ฐ”๋‚˜ ์„ค์ • (config/kibana.yml)

  • server.port โ‡’ ํ‚ค๋ฐ”๋‚˜ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„ ํฌํŠธ

  • server.host โ‡’ ํ‚ค๋ฐ”๋‚˜ ์„œ๋ฒ„์˜ ํ˜ธ์ŠคํŠธ๋กœ ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋ ค๋ฉด ์„œ๋ฒ„์˜ IP ์ฃผ์†Œ๋‚˜ DNS ์ด๋ฆ„์œผ๋กœ ์ง€์ •

  • server.publicBaseUrl โ‡’ ์‚ฌ์šฉ์ž๊ฐ€ ์™ธ๋ถ€์—์„œ ์–ด๋–ค URL๋กœ ํ‚ค๋ฐ”๋‚˜์— ์ ‘๊ทผํ•˜๋Š”์ง€๋ฅผ ์ง€์ • ("/"๋กœ ๋๋‚˜๋ฉด ์•ˆ ๋จ)

  • elasticsearch.hosts โ‡’ ์—˜๋ผ์Šคํ‹ฑ์„œ์น˜ ์ฟผ๋ฆฌ๋ฅผ ์ „๋‹ฌํ•  ์—˜๋ผ์Šคํ‹ฑ์„œ์น˜์˜ ํ˜ธ์ŠคํŠธ URL ๋ชฉ๋ก์„ ์ง€์ •

4. ํ‚ค๋ฐ”๋‚˜ ์‹คํ–‰ ๋ฐ ํ™•์ธ

  • c:\Users\crpark> cd c:\ELK\kibana-8.13.2\bin

  • c:\ELK\kibana-8.13.2\bin> kibana.bat

โ‡’ ELK ๊ตฌ์ถ• ์ค‘ Kibana ์ฃผ์†Œ๋กœ ์ ‘์†์„ ํ•ด ๋ณด๋ฉด kibana server is not ready yet ๋ฉ”์„ธ์ง€๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ, ๊ตฌ์ถ•ํ•˜๋Š” ๋“œ๋ผ์ด๋ธŒ์—์„œ 85% ์ด์ƒ์˜ ์šฉ๋Ÿ‰์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์„ ๋•Œ ์œ„์™€ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ์šฉ๋Ÿ‰์„ ๋Š˜๋ ค์ค€ ๋’ค ๋‹ค์‹œ ELK๋ฅผ ๋„์›Œ๋ณด๋ฉด ์—๋Ÿฌ ์—†์ด ์ž˜ ๋™์ž‘ํ•œ๋‹ค

๋ธŒ๋ผ์šฐ์ €๋กœ http://localhost:5601 ์œผ๋กœ ์ ‘์†


๐Ÿ“Œ ๋ณด์•ˆ ๋ชจ๋“œ๋กœ ์‹คํ–‰

โ‡’ ๊ธฐ๋ณธ์ด ๋ณด์•ˆ๋ชจ๋“œ

1. ์—˜๋ผ์Šคํ‹ฑ์„œ์น˜์™€ ํ‚ค๋ฐ”๋‚˜ ํŒจํ‚ค์ง€๋ฅผ ๋‹ค๋ฅธ ํด๋”(C:\Temp)์— ์••์ถ•ํ•ด์ œ (ํด๋” ์ด๋ฆ„์— ํ•œ๊ธ€์ด ํฌํ•จ๋˜์ง€ ์•Š๋„๋ก ์œ ์˜)


2. VSCode ์‹คํ–‰

c:\ELK\elasticsearch-8.13.2\bin> cd c:\temp\

c:\Temp> code .

3. ์—˜๋ผ์Šคํ‹ฑ์„œ์น˜ ์„ค์ • ํŒŒ์ผ ํ™•์ธ (C:\Temp\elasticsearch-8.13.2\config\elasticsearch.yml) โ‡’ ๋ชจ๋‘ ์ฃผ์„์ฒ˜๋ฆฌ๋˜์–ด ์žˆ์Œ


4. ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๋กœ ๋ช…๋ น ํ”„๋กฌํ”„ํŠธ๋ฅผ ์‹คํ–‰ํ•ด์„œ ์—˜๋ผ์Šคํ‹ฑ์„œ์น˜ ์‹คํ–‰

c:\Temp> cd elasticsearch-8.13.2\bin

c:\Temp\elasticsearch-8.13.2\bin> chcp
ํ™œ์„ฑ ์ฝ”๋“œ ํŽ˜์ด์ง€: 949

c:\Temp\elasticsearch-8.13.2\bin> chcp 65001
โ‡ UTF-8๋กœ ๋ณ€๊ฒฝ (ํ•œ๊ธ€์ด ๊นจ์ ธ์„œ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€)
Acive code page:65001

c:\Temp\elasticsearch-8.13.2\bin> elasticsearch.bat
:

โœ… Elasticsearch security features have been automatically configured!
โ‡’ ๋ณด์•ˆ ์„ค์ •์„ ๋น„ํ™œ์„ฑํ™”ํ•˜์ง€ ์•Š๊ณ , ์—˜๋ผ์Šคํ‹ฑ์„œ์น˜๋ฅผ ์‹œ์ž‘ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ณด์•ˆ ๊ตฌ์„ฑ์„ ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰

(1) TLS์šฉ ์ธ์ฆ์„œ์™€ ํ‚ค ์ƒ์„ฑ

2) elasticsearch.yml ํŒŒ์ผ์— TLS ๊ตฌ์„ฑ์„ ์„ค์ •(

(3) elastic ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ƒ์„ฑ

(4) Kibana ๋“ฑ๋ก ํ† ํฐ์„ ์ƒ์„ฑ

โœ… Authentication is enabled and cluster connections are encrypted.

๐Ÿ”น Password for the elastic user (reset with bin/elasticsearch-reset-password -u elastic):
oebiVw2bcAVCdCXzEj08 โ‡ (3) elastic ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ƒ์„ฑ

๐Ÿ”น HTTP CA certificate SHA-256 fingerprint:
26a419c2705c244af88e4efc4e319218772feb7283100f61523aff6e34d633aa

๐Ÿ”น Configure Kibana to use this cluster:
โ€ข Run Kibana and click the configuration link in the terminal when Kibana starts.
โ€ข Copy the following enrollment token and paste it into Kibana in your browser (valid for the next 30 minutes):
eyJ2ZXIiOiI4LjEzLjIiLCJhZHIiOlsiMTkyLjE2OC4wLjE0Mzo5MjAwIl0sImZnciI6IjI2YTQxOWMyNzA1YzI0NGFmODhlNGVmYzRlMzE5MjE4NzcyZmViNzI4MzEwMGY2MTUyM2FmZjZlMzRkNjMzYWEiLCJrZXkiOiJpWDdzTzQ4QkJYQ041aG94ME9vdjpaWVN5V0k5bVNSYXEySkZ5VEQ0a2p3In0= โ‡ (4) Kibana ๋“ฑ๋ก ํ† ํฐ

๐Ÿ”น Configure other nodes to join this cluster:
โ€ข On this node:
โƒ Create an enrollment token with bin/elasticsearch-create-enrollment-token -s node.
โƒ Uncomment the transport.host setting at the end of config/elasticsearch.yml.
โƒ Restart Elasticsearch.
โ€ข On other nodes:
โƒ Start Elasticsearch with bin/elasticsearch --enrollment-token <token>, using the enrollment token that you generated.


5. ์—˜๋ผ์Šคํ‹ฑ์„œ์น˜ ๋™์ž‘ ํ™•์ธ


6. ๊ด€๋ฆฌ์ž ๋ชจ๋“œ๋กœ ๋ช…๋ น ํ”„๋กฌํ”„ํŠธ๋ฅผ ์‹คํ–‰ํ•ด์„œ ํ‚ค๋ฐ”๋‚˜๋ฅผ ์‹คํ–‰

C:\ELK\kibana-8.13.2\bin> cd c:\temp\kibana-8.13.2\bin

c:\Temp\kibana-8.13.2\bin> kibana.bat

7. ํ‚ค๋ฐ”๋‚˜ ์›น ์ฝ˜์†”์— ์ ‘์†


8. ํ‚ค๋ฐ”๋‚˜ ์„ค์ • ํŒŒ์ผ(C:\Temp\kibana-8.13.2\config\kibana.yml)์— ์„ค์ •์ด ์ž๋™์œผ๋กœ ์ถ”๊ฐ€๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ


9. ์—˜๋ผ์Šคํ‹ฑ์„œ์น˜ ๋™์ž‘์„ CURL ๋ช…๋ น์œผ๋กœ ํ™•์ธ

c:\Users\crpark> curl -XGET http://localhost:9200
โ‡ HTTP๋กœ ์ ‘๊ทผ ๋ถˆ๊ฐ€
curl: (52) Empty reply from server

c:\Users\crpark> curl -XGET https://localhost:9200
curl: (60) schannel: SEC_E_UNTRUSTED_ROOT (0x80090325) - ์‹ ๋ขฐ๋˜์ง€ ์•Š์€ ๊ธฐ๊ด€์—์„œ ์ธ์ฆ์„œ ์ฒด์ธ์„ ๋ฐœ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

c:\Users\crpark> curl -XGET https://localhost:9200 -k
โ‡ Allow insecure server connections

"-k" ์˜ต์…˜์€ curl์ด ๋ณด์•ˆ ์ธ์ฆ์„œ๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š๊ณ ๋„ HTTPS ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ธ์ฆ์„œ๊ฐ€ ์œ ํšจํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์ž์ฒด ์„œ๋ช…๋œ ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ curl์ด HTTPS ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Š” ๋ณด์•ˆ์ƒ ์ทจ์•ฝ์ ์„ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

c:\Users\crpark> curl -XGET https://localhost:9200?pretty -k

"?pretty"๋Š” Elasticsearch์˜ ์‘๋‹ต์„ ๊ฐ€๋…์„ฑ ์žˆ๊ฒŒ ์ถœ๋ ฅํ•˜๋„๋ก ์š”์ฒญํ•œ๋‹ค.

c:\Users\crpark> curl -XGET https://localhost:9200 -k -u elastic
Enter host password for user 'elastic': oebiVw2bcAVCdCXzEj08

  • ์œ„ ๋ช…๋ น์–ด๋Š” curl์„ ์‚ฌ์šฉํ•˜์—ฌ Elasticsearch์— ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž "elastic"์œผ๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด๋‹ค.
  • "-u elastic"์€ ์‚ฌ์šฉ์ž ์ด๋ฆ„ "elastic"์œผ๋กœ ์ธ์ฆ๋จ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ด๊ฒƒ์€ Elasticsearch์— ๋Œ€ํ•œ ์ธ์ฆ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์‚ฌ์šฉ๋œ๋‹ค.
  • "Enter host password for user 'elastic'"๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ๋‚˜ํƒ€๋‚˜๋ฉด, curl์ด ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์š”์ฒญํ•˜๊ณ  ์žˆ์Œ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • ์ž…๋ ฅ๋ž€์— ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•œ ํ›„ ์—”ํ„ฐ๋ฅผ ๋ˆ„๋ฅด๋ฉด curl์ด Elasticsearch๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ , ์ธ์ฆ์ด ์„ฑ๊ณตํ•˜๋ฉด ํ•ด๋‹น ์„œ๋ฒ„์˜ ์ •๋ณด๊ฐ€ ๋ฐ˜ํ™˜๋œ๋‹ค.

์‹ค์Šต์€ ๋น„๋ณด์•ˆ ํ™˜๊ฒฝ์—์„œ ์ง„ํ–‰

(์ผ๋ฐ˜ ๋ชจ๋“œ๋กœ ๋ช…๋ น ํ”„๋กฌํ”„ํŠธ๋ฅผ ์‹คํ–‰) ์—˜๋ผ์Šคํ‹ฑ์„œ์น˜ ์‹คํ–‰

c:\Temp\elasticsearch-8.13.2\bin> cd c:\elk\elasticsearch-8.13.2\bin

c:\ELK\elasticsearch-8.13.2\bin> elasticsearch.bat

(๊ด€๋ฆฌ์ž ๋ชจ๋“œ๋กœ ๋ช…๋ น ํ”„๋กฌํ”„ํŠธ๋ฅผ ์‹คํ–‰) ํ‚ค๋ฐ”๋‚˜ ์‹คํ–‰

c:\Temp\kibana-8.13.2\bin> cd c:\ELK\kibana-8.13.2\bin

c:\ELK\kibana-8.13.2\bin> kibana.bat

ELK ์Šคํƒ ๊ตฌ์กฐ

๋„์„œ ๋ฐ์ดํ„ฐ๋ฅผ ELK(Elasticsearch, Logstash, Kibana) ์Šคํƒ์œผ๋กœ ์ €์žฅํ•˜๊ณ  ์‹œ๊ฐํ™”ํ•˜๊ธฐ ์œ„ํ•ด JSON ๋ฌธ์„œ์˜ ํ˜•ํƒœ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, "Effective Java"๋ผ๋Š” ์ฑ…์˜ ์ •๋ณด๋ฅผ JSON ๋ฌธ์„œ๋กœ ํ‘œํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค:

โ‘  ๋„์„œ ๋ฐ์ดํ„ฐ์— ํฌํ•จ๋  ๋‚ด์šฉ

title : ๋„์„œ๋ช…
author : ์ž‘๊ฐ€๋ช…
release_date : ์ถœ๋ฐœ์ผ
amazon_rating : ์•„๋งˆ์กด ํ‰์ 
best_seller : ๋ฒ ์ŠคํŠธ ์…€๋Ÿฌ ์—ฌ๋ถ€
prices : ๋‹ฌ๋Ÿฌ, ํŒŒ์šด๋“œ, ์œ ๋กœ ํ™”ํ ๋‹จ์œ„์˜ ๊ฐ€๊ฒฉ

โ‘ก JSON ๋ฌธ์„œ ํ˜•ํƒœ๋กœ ์ฑ…์„ ํ‘œํ˜„

{
	"title": "Effective Java", 		โ‡ ํ‚ค : ๊ฐ’ ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œํ˜„
	"author": "Josuha Bloch", 		โ‡ ํ‚ค๋Š” ๋ฌธ์ž์—ด ํ˜•ํƒœ 
	"release_date": "2001-06-01", 	โ‡ ๊ฐ’์€ ๋ฌธ์ž์—ด, ์ˆซ์ž, ์ฐธ(true), ๊ฑฐ์ง“(false), ๋˜ ๋‹ค๋ฅธ ๊ฐ์ฒด, ๋ฐฐ์—ด ๋“ฑ 
	"amazon_rating": 4.7, 		   ๋‹ค์–‘ํ•œ ํ˜•ํƒœ๊ฐ€ ์˜ฌ ์ˆ˜ ์žˆ์Œ
	"best_seller": true, 
	"prices": {
		"usd": 9.95, 
		"gbp": 7.95, 
		"eur": 8.95
	}
}



1. ๋ฌธ์„œ API

  • ๋ฌธ์„œ(document)๋ฅผ ์ƒ์„ฑ, ์‚ญ์ œ, ์ˆ˜์ •, ๊ฒ€์ƒ‰์„ ๋„์™€์ฃผ๋Š” API
  • API๋Š” RESTful ํ˜•์‹์œผ๋กœ HTTP ์ „์†ก์„ ํ†ตํ•ด์„œ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Œ

https://velog.io/@younge/REST-API-%EC%84%B1%EC%88%99%EB%8F%84-%EB%AA%A8%EB%8D%B8-Maturity-Model-eqqyjqff

<HTTP_METHOD> <SERVER:PORT>/<INDEX_NAME>/_doc/<DOC_ID>
{
   ์š”์ฒญ ๋ณธ๋ฌธ
}
  • HTTP_METHOD - GET, POST, PUT, DELETE ๋“ฑ

  • SERVER:PORT - localhost:9200

  • INDEX_NAME - ์ธ๋ฑ์Šค ์ด๋ฆ„ = ์ƒ‰์ธ ๋ช…

  • _doc - ๋ฌธ์„œ API์˜ ์—”๋“œํฌ์ธํŠธ ๊ธฐ๋ณธ๊ฐ’


_id๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ  ์ƒ‰์ธ

POST <index_name>/_doc

{
	<document>
}

๋ฌธ์„œ ์กฐํšŒ

GET <index_name>/_doc/<_id>
  

๋ฌธ์„œ ์—…๋ฐ์ดํŠธ

POST <index-name>/_doc/<_id>
{
	<๋ณ€๊ฒฝํ•  ๋‚ด์šฉ>
}

๋ฌธ์„œ ๊ฒ€์ƒ‰

GET/POST  <index-name>/_search
{
	"query": {
		...
	}
}

๋ฌธ์„œ ์‚ญ์ œ

DELETE <index_name>/_id/<_id>

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



1) CURL์„ ์ด์šฉํ•ด์„œ ๋ฌธ์„œ๋ฅผ ์ธ๋ฑ์‹ฑ

c:\Users\crpark> curl -XPUT "localhost:9200/books/_doc/1" -H "Content-Type: application/json" -d "{ ... }"

์œ„ ๋ช…๋ น์–ด๋Š” Curl์„ ์‚ฌ์šฉํ•˜์—ฌ Elasticsearch ์„œ๋ฒ„์— HTTP PUT ์š”์ฒญ์„ ๋ณด๋‚ด์–ด "books" ์ธ๋ฑ์Šค์˜ "_doc" ์—”๋“œํฌ์ธํŠธ์— ID๊ฐ€ 1์ธ ๋ฌธ์„œ๋ฅผ ์ƒ์„ฑ ๋˜๋Š” ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. ์š”์ฒญ ๋ณธ๋ฌธ์—๋Š” ์ฑ… ์ •๋ณด๊ฐ€ JSON ํ˜•์‹์œผ๋กœ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

โ‘  -XPUT :
์š”์ฒญ ๋ฐฉ์‹์„ ์ง€์ •. HTTP ์š”์ฒญ ๋ฉ”์„œ๋“œ๋ฅผ PUT์œผ๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ฑฐ๋‚˜ ์ƒˆ๋กœ ์ƒ์„ฑํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

โ‘ก "localhost:9200/books/_doc/1" :
์„œ๋ฒ„ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„๊ณผ ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, "books"๋Š” ์ธ๋ฑ์Šค ์ด๋ฆ„, "_doc"์€ ๋ฌธ์„œ API์˜ ์—”๋“œํฌ์ธํŠธ, "1"์€ book ID์ž…๋‹ˆ๋‹ค.

โ‘ข -H "Content-Type: application/json" :
Content-Type ์š”์ฒญ ํ—ค๋”๋ฅผ ์„ค์ • โ‡’ ๋ณธ๋ฌธ ๋‚ด์šฉ์ด JSON ํƒ€์ž…. ์š”์ฒญ ํ—ค๋”๋ฅผ ์„ค์ •ํ•˜์—ฌ ์š”์ฒญ ๋ณธ๋ฌธ์ด JSON ํ˜•์‹์ž„์„ ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค.

โ‘ฃ -d "{ ... }" :
์š”์ฒญ ๋ณธ๋ฌธ = ๋ฐ์ดํ„ฐ. ์š”์ฒญ ๋ณธ๋ฌธ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” JSON ํ˜•์‹์œผ๋กœ ์ฑ… ์ •๋ณด๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ์š”์ฒญ ๋ณธ๋ฌธ์˜ ๋‚ด์šฉ์„ ์ด์Šค์ผ€์ดํ”„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์Œ๋”ฐ์˜ดํ‘œ๋ฅผ ์ด์Šค์ผ€์ดํ”„ํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

*) ์š”์ฒญ ๋ณธ๋ฌธ์„ ๊ธฐ์ˆ ํ•  ๋•Œ ์Œ๋”ฐ์›€ํ‘œ๋ฅผ ์ด์Šค์ผ€์ดํ”„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•จ โ‡’ ์Œ๋”ฐ์›€ํ‘œ๋ฅผ ๋‘๋ฒˆ ์—ฐ์† ํ‘œ๊ธฐ ๋˜๋Š” \" ํ˜•์‹์œผ๋กœ ์ด์Šค์ผ€์ดํ”„

โ‘  ์š”์ฒญ ๋ณธ๋ฌธ:
"title": "Effective Java", "author": "Josuha Bloch", "release_date": "2001-06-01", "amazon_rating": 4.7, "best_seller": true, "prices": { "usd": 9.95, "gbp": 7.95, "eur": 8.95 }

โ‘ก ๋‘ ๋ฒˆ ์—ฐ์†์œผ๋กœ ์Œ๋”ฐ์˜ดํ‘œ ํ‘œ๊ธฐ:

""title"": ""Effective Java"", ""author"": ""Josuha Bloch"", ""release_date"": ""2001-06-01"", ""amazon_rating"": 4.7, ""best_seller"": true, ""prices"": { ""usd"": 9.95, ""gbp"": 7.95, ""eur"": 8.95 }

โ‘ข ๋ฐฑ์Šฌ๋ž˜์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด์Šค์ผ€์ดํ”„:
\"title\": \"Effective Java\", \"author\": \"Josuha Bloch\", \"release_date\": \"2001-06-01\", \"amazon_rating\": 4.7, \"best_seller\": true, \"prices\": { \"usd\": 9.95, \"gbp\": 7.95, \"eur\": 8.95 }


2) ์นด๋ฐ”๋‚˜ Dev Tools ์ฝ˜์†”์„ ์ด์šฉํ•ด์„œ ๋ฌธ์„œ๋ฅผ ์ธ๋ฑ์‹ฑ


3) ์—ฌ๋Ÿฌ ๋ฌธ์„œ๋ฅผ ์ธ๋ฑ์‹ฑ(์ƒ‰์ธ)

PUT books/_doc/2
{
  "title":"Core Java Volume I - Fundamentals",
  "author":"Cay S. Horstmann",
  "release_date":"2018-08-27",
  "amazon_rating":4.8,
  "best_seller":true,
  "prices": {
    "usd":19.95,
    "gbp":17.95,
    "eur":18.95
  }
}
PUT books/_doc/4
{
  "title":"Java: A Beginnerโ€™s Guide",
  "author":"Herbert Schildt",
  "release_date":"2018-11-20",
  "amazon_rating":4.2,
  "best_seller":true,
  "prices": {
    "usd":19.99,
    "gbp":19.99,
    "eur":19.99
  }
}


4) ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰

_count API : ํ•ด๋‹น ์ธ๋ฑ์Šค์— ์†ํ•˜๋Š” ๋ฌธ์„œ์˜ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜

์ด ๋ช…๋ น์–ด๋Š” Curl์„ ์‚ฌ์šฉํ•˜์—ฌ Elasticsearch์— HTTP GET ์š”์ฒญ์„ ๋ณด๋‚ด์–ด "books" ์ธ๋ฑ์Šค์— ์žˆ๋Š” ๋ฌธ์„œ์˜ ์ˆ˜๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ด๋‹ค.

c:\Users\crpark> curl -XGET "localhost:9200/books/_count"
{"count":4,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0}}

c:\Users\crpark> curl -XGET "localhost:9200/books/_count"?pretty
{
"count" : 4,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
}
}

โ‘  ์—ฌ๋Ÿฌ ์ธ๋ฑ์Šค์˜ ๋ฌธ์„œ ๊ฐœ์ˆ˜๋ฅผ ๋™์‹œ์— ์กฐํšŒ

c:\Users\crpark> curl -XGET "localhost:9200/books,books2/_count"?pretty

โ†’ ๋™์ผํ•œ API๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์—ฌ๋Ÿฌ ์ธ๋ฑ์Šค์—์„œ ๋™์‹œ์— ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅ

{
"error" : {
"rootcause" : [
{
"type" : "index_not_found_exception", โ‡ books2 ์ธ๋ฑ์Šค๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜
"resource.type" : "index_or_alias",
"resource.id" : "books2",
"index_uuid" : "_na
",
"index" : "books2"
}
],
"type" : "indexnot_found_exception",
"reason" : "no such index [books2]",
"resource.type" : "index_or_alias",
"resource.id" : "books2",
"index_uuid" : "_na
",
"index" : "books2"
},
"status" : 404
}


โ‘ก ๋ชจ๋“  ์ธ๋ฑ์Šค์˜ ๋ฌธ์„œ ์ˆ˜๋ฅผ ๊ฐ€์ ธ์˜ฌ ๊ฒฝ์šฐ

c:\Users\crpark> curl -XGET "localhost:9200/_count"?pretty
{
"count" : 4, โ‡ ์‹œ์Šคํ…œ ๋ฐ ์ˆจ๊ฒจ์ง„ ์ธ๋ฑ์Šค๋ฅผ ํฌํ•จํ•˜์—ฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋ฌธ์„œ๊ฐ€ ๋ฐ˜ํ™˜
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
}
}


5) ๋ฌธ์„œ ๊ฒ€์ƒ‰


โ‘  ๋‹จ์ผ ๋ฌธ์„œ ๊ฒ€์ƒ‰ โ‡’ ID๊ฐ€ ๋ถ€์—ฐ๋œ ๋ฌธ์„œ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ โ‡’ GET /_doc/

c:\Users\crpark> curl -XGET http://localhost:9200/books/_doc/1
{"_index":"books","_id":"1","_version":1,"_seq_no":0,"_primary_term":1,"found":true,"_source":{ "title": "Effective Java", "author": "Josuha Bloch", "release_date": "2001-06-01", "amazon_rating": 4.7, "best_seller": true, "prices": { "usd": 9.95, "gbp": 7.95, "eur": 8.95 } }}

c:\Users\crpark> curl -XGET http://localhost:9200/books/_doc/1?pretty

{
  "_index" : "books",		  --+ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ
  "_id" : "1",				  |
  "_version" : 1,			  |
  "_seq_no" : 0,			  |
  "_primary_term" : 1,		  --+
  "found" : true,
  "_source" : {			          --+ ์›๋ณธ ๋ฌธ์„œ (์†Œ์Šค ๋ฐ์ดํ„ฐ)
    "title" : "Effective Java",	  | 
    "author" : "Josuha Bloch",	  |
    "release_date" : "2001-06-01",|
    "amazon_rating" : 4.7,	  	  |
    "best_seller" : true,		  |	
    "prices" : {			      |
      "usd" : 9.95,			      |
      "gbp" : 7.95,			      |
      "eur" : 8.95			      |
    }					          --+
  }
}




No request selected ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ



โ‘ก ์ผ๋ จ์˜ ID๋ฅผ ๋ถ€์—ฌํ•ด์„œ ์—ฌ๋Ÿฌ ๋ฌธ์„œ ๊ฐ€์ ธ์˜ค๊ธฐ โ‡’ _search API

{
"took": 20,
"timed_out": false,
"_shards": {
  "total": 1,
  "successful": 1,
  "skipped": 0,
  "failed": 0
},
"hits": {
  "total": {
    "value": 3,
    "relation": "eq"
  },
  "max_score": 1,
  "hits": [
    {
      "_index": "books",
      "_id": "1",
      "_score": 1,
      "_source": {
        "title": "Effective Java",
        "author": "Josuha Bloch",
        "release_date": "2001-06-01",
        "amazon_rating": 4.7,
        "best_seller": true,
        "prices": {
          "usd": 9.95,
          "gbp": 7.95,
          "eur": 8.95
        }
      }
    },
    {
      "_index": "books",
      "_id": "3",
      "_score": 1,
      "_source": {
        "title": "Effective Java",
        "author": "Josuha Bloch",
        "release_date": "2001-06-01",
        "amazon_rating": 4.7,
        "best_seller": true,
        "prices": {
          "usd": 9.95,
          "gbp": 7.95,
          "eur": 8.95
        }
      }
    },
    {
      "_index": "books",
      "_id": "2",
      "_score": 1,
      "_source": {
        "title": "Core Java Volume I - Fundamentals",
        "author": "Cay S. Horstmann",
        "release_date": "2018-08-27",
        "amazon_rating": 4.8,
        "best_seller": true,
        "prices": {
          "usd": 19.95,
          "gbp": 17.95,
          "eur": 18.95
        }
      }
    }
  ]
}
}
  • "took": 20: Elasticsearch๊ฐ€ ํ•ด๋‹น ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฐ ์‹œ๊ฐ„์„ ๋ฐ€๋ฆฌ์ดˆ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” 20๋ฐ€๋ฆฌ์ดˆ๊ฐ€ ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค.

  • "timed_out": false: ์š”์ฒญ์ด ์‹œ๊ฐ„ ์ดˆ๊ณผ๋˜์ง€ ์•Š์•˜์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

  • "_shards": ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์˜ ์ƒค๋“œ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์ด 1๊ฐœ์˜ ์ƒค๋“œ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

    ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์˜ ์ƒค๋“œ๋Š” Elasticsearch์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ณธ์ ์ธ ๋‹จ์œ„์ž…๋‹ˆ๋‹ค.
    ์ƒค๋“œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” ๋…ผ๋ฆฌ์  ๋‹จ์œ„์ด๋ฉฐ, Elasticsearch๋Š” ์ด๋Ÿฌํ•œ ์ƒค๋“œ๋ฅผ ํ†ตํ•ด ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • "hits": ์‹ค์ œ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.

    • "total": ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์— ํฌํ•จ๋œ ์ด ๋ฌธ์„œ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” 3๊ฐœ์˜ ๋ฌธ์„œ๊ฐ€ ๊ฒ€์ƒ‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

    • "max_score": ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ์ค‘ ๊ฐ€์žฅ ๋†’์€ ์ ์ˆ˜๋ฅผ ๊ฐ€์ง„ ๋ฌธ์„œ์˜ ์ ์ˆ˜์ž…๋‹ˆ๋‹ค.

    • "hits": ๊ฒ€์ƒ‰๋œ ๊ฐ ๋ฌธ์„œ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค. ๊ฐ ๋ฌธ์„œ๋Š” "_index", "_id", "_score", "_source" ๋“ฑ์˜ ํ•„๋“œ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ๊ฐ ๋ฌธ์„œ์˜ "_index"๋Š” "books"์ด๋ฉฐ, "_id"๋Š” ๊ฐ ๋ฌธ์„œ์˜ ๊ณ ์œ  ์‹๋ณ„์ž์ž…๋‹ˆ๋‹ค. "_source"๋Š” ๊ฒ€์ƒ‰๋œ ๋ฌธ์„œ์˜ ์‹ค์ œ ๋‚ด์šฉ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

c:\Users\crpark> curl -XGET http://localhost:9200/books/_search -H "Content-Type: application/json" -d "{ ""query"": { ""ids"" : { ""values"": [1, 2, 3] } } }"

c:\Users\crpark> curl -XGET http://localhost:9200/books/_search ? pretty -H"Content-Type: application/json" -d "{ ""query"": { ""ids"" : { ""values"": [1, 2, 3] } } }"


โ‘ฃ ์กฐํšŒ ๊ฒฐ๊ณผ์—์„œ ์†Œ์Šค ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ๋žต



โ‘ค ๋ฌธ์„œ์˜ ๋‚ด์šฉ ์ค‘ "title"๋งŒ ์ถœ๋ ฅ๋˜๋„๋ก ์ œํ•œ



โ‘ฅ ๋ชจ๋“  ๋ฌธ์„œ ๊ฐ€์ ธ์˜ค๊ธฐ



์ „์ฒด ํ…์ŠคํŠธ ๊ฒ€์ƒ‰

match ์ฟผ๋ฆฌ โ†’ ํŠน์ • ํ•„๋“œ์—์„œ ์ฃผ์–ด์ง„ ๊ฒ€์ƒ‰์–ด์™€ ์ผ์น˜ํ•˜๋Š” ๋ฌธ์„œ๋ฅผ ๊ฒ€์ƒ‰

โ‘  Josuha ์ €์ž์ด๋ฆ„์œผ๋กœ ๊ฒ€์ƒ‰

  • match ์ฟผ๋ฆฌ๋Š” ๋‹จ์–ด์˜ ์œ„์น˜ ๋ฐ ๋Œ€์†Œ๋ฌธ์ž ๊ด€๊ณ„ ์—†์ด ์ผ์น˜ํ•˜๋Š” ๋‹จ์–ด๋ฅผ ํฌํ•จํ•˜๋ฉด ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜

    "author": "Josuha"
    "author": "josuha"
    "author": "JOSUHA"
    "author": "Bloch"

  • ์™„๋ฒฝํ•œ ๋‹จ์–ด ์ค‘์—์„œ ์ผ์น˜ํ•˜๋Š” ๋‹จ์–ด๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๊ฒ€์ƒ‰๋˜์ง€ ์•Š์Œ

    "author": "jos"


โ‘ก ๋‹จ์–ด์˜ ์‹œ์ž‘ ๋ฌธ์ž ์ผ๋ถ€๋กœ ์กฐํšŒํ•˜๋ ค๊ณ  ํ•˜๋Š” ๊ฒฝ์šฐ = ํ•ด๋‹น ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋‹จ์–ด๋ฅผ ๊ฒ€์ƒ‰

  GET /books/_search
{
   "query": {
      "prefix": {
       "author": "jos"			โ‡ ๋‹จ์–ด๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๋ฌธ์ž๋ฅผ ์†Œ๋ฌธ์ž๋กœ ํ‘œ๊ธฐ
    }
  }
}



โ‘ข ์ €์ž ์ด๋ฆ„์ด "Josuha Schildt"์ธ ๋„์„œ๋ฅผ ์กฐํšŒ โ‡’ ์ผ์น˜ํ•˜๋Š” ๋„์„œ๊ฐ€ ์—†์„ ๊ฒƒ์„ ์˜ˆ์ƒ

๊ธฐ๋ณธ์ ์œผ๋กœ OR ์—ฐ์‚ฐ์„ ํ•˜๋ฏ€๋กœ, ์ €์ž ์ด๋ฆ„์— Josuha๊ฐ€ ๋“ค์–ด๊ฐ„ ๊ฒƒ๊ณผ Schildt๊ฐ€ ๋“ค๊ฐ„ ๊ฒƒ์„ ๋ชจ๋‘ ์กฐํšŒ



โ‘ฃ operator ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ๋ช…์‹œ์ ์œผ๋กœ AND๋กœ ์„ค์ •



โ‘ค ์ฑ… ์ œ๋ชฉ์ด Effective Java ๊ธ€์ž๊ฐ€ ๋ชจ๋‘ ๋“ค์–ด ์žˆ๋Š” ๋ฌธ์„œ๋ฅผ ์กฐํšŒ



2. bulk API๋ฅผ ์ด์šฉํ•œ ๋Œ€๋Ÿ‰ ๋ฌธ์„œ ์ƒ‰์ธ

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

https://github.com/madhusudhankonda/elasticsearch-in-action/blob/main/datasets/books-kibana-dataset.txt

1) ์ƒ‰์ธ๋œ ๋ฌธ์„œ ๊ฐฏ์ˆ˜ ํ™•์ธ โ‡’ 10๊ฐœ



2) id๊ฐ€ 1์ธ ๋ฌธ์„œ๋ฅผ ์กฐํšŒ โ‡’ ๊ฐ™์€ ID๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฌธ์„œ๋Š” ์—…๋ฐ์ดํŠธ๋œ ๊ฒƒ์„ ํ™•์ธ โ‡’ 1~4๋ฒˆ ๋ฌธ์„œ๋Š” ์—…๋ฐ์ดํŠธ๋จ

โœ… ๋ฌธ์„œ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ๋งˆ๋‹ค ํ•ด๋‹น ๋ฌธ์„œ์˜ _version ํ•„๋“œ๋ฅผ ํ™•์ธํ•˜์—ฌ ์ตœ์‹  ๋ฒ„์ „์ธ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ… ์—…๋ฐ์ดํŠธ๋œ ๋‚ด์šฉ์ด title ํ•„๋“œ์— ๋ฐ˜์˜๋˜์—ˆ๋‹ค๋ฉด, ํ•ด๋‹น ๋‚ด์šฉ์€ _source ํ•„๋“œ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.


3) ๋ฌธ์„œ ๊ตฌ์กฐ๋ฅผ ํ™•์ธ

{
"title": "Head First Java",
"author": "Kathy Sierra and Bert Bates",
"edition": 2,
"synopsis": "The most important selling points of Head First Java is its 
simplicity and super-effective real-life analogies that pertain to the Java
programming concepts.",
"amazon_rating": 4.3,
"release_date": "2005-02-18",
"tags": [
  "IT Certification Exams",
  "Object-Oriented Software Design",
  "Design Pattern Programming"
]
}
  • title: ์ฑ…์˜ ์ œ๋ชฉ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด

  • author: ์ฑ…์˜ ์ €์ž๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด

  • edition: ์ฑ…์˜ ํŒ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆซ์ž

  • synopsis: ์ฑ…์˜ ๊ฐ„๋žตํ•œ ๊ฐœ์š” ๋˜๋Š” ์š”์•ฝ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด

  • amazon_rating: ์•„๋งˆ์กด์—์„œ์˜ ํ‰์ ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆซ์ž

  • release_date: ์ฑ…์ด ์ถœ์‹œ๋œ ๋‚ ์งœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด

  • tags: ์ฑ…์— ๊ด€๋ จ๋œ ํƒœ๊ทธ ๋ชฉ๋ก์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐฐ์—ด. ํƒœ๊ทธ๋Š” ์ฑ…์˜ ์ฃผ์ œ๋‚˜ ํŠน์„ฑ์„ ์„ค๋ช…ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ


4) ์—ฌ๋Ÿฌ ํ•„๋“œ์—์„œ ๊ฒ€์ƒ‰ โ‡’ multi_match ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉ

โ‘  title ๋˜๋Š” synopsis ํ•ญ๋ชฉ์— Java ๋‹จ์–ด๊ฐ€ ํฌํ•จ๋œ ๋ฌธ์„œ๋ฅผ ์กฐํšŒ

  • multi_match ์ฟผ๋ฆฌ๋Š” Elasticsearch์—์„œ ์—ฌ๋Ÿฌ ํ•„๋“œ์—์„œ ํ•œ ๋ฒˆ์— ๊ฒ€์ƒ‰์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ ํ•„๋“œ์— ๋Œ€ํ•ด ๋™์‹œ์— ๊ฒ€์ƒ‰์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ฒ€์ƒ‰์–ด๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ์˜ ํ•„๋“œ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ชจ๋“  ๋ฌธ์„œ๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • "query"๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒ€์ƒ‰์–ด๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. "fields"๋Š” ๊ฒ€์ƒ‰์„ ์ˆ˜ํ–‰ํ•  ํ•„๋“œ์˜ ๋ชฉ๋ก์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

{
  "took": 30,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 10,
      "relation": "eq"
    },
    "max_score": 0.33537668,
    "hits": [
      {
        "_index": "books",
        "_id": "2",
        "_score": 0.33537668,
        "_source": {
          "title": "Effective Java",
          "author": "Joshua Bloch",
          "edition": 3,
          "synopsis": "A must-have book for every Java programmer and Java aspirant, Effective Java makes up for an excellent complementary read with other Java books or learning material. The book offers 78 best practices to follow for making the code better.",
          "amazon_rating": 4.7,
          "release_date": "2017-12-27",
          "tags": [
            "Object Oriented Software Design"
          ]
        }
      },
      {
  
  โˆ™
  โˆ™
  โˆ™



โ‘ก ์ œ๋ชฉ์— ๋” ๋†’์€ ์šฐ์„ ์ˆœ์œ„(๊ด€๋ จ์„ฑ)๋ฅผ ๋ถ€์—ฌ = ๊ฒฐ๊ณผ ๋ถ€์ŠคํŒ…

  • "title^3"๋Š” ์ œ๋ชฉ ํ•„๋“œ์— ๋Œ€ํ•ด ๋ถ€์ŠคํŒ…์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

  • ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์—์„œ ์ œ๋ชฉ์— ํฌํ•จ๋œ ๊ฒ€์ƒ‰์–ด์™€ ๊ด€๋ จ๋œ ๋ฌธ์„œ๊ฐ€ ๋” ๋†’์€ ์ˆœ์œ„๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

{
  "took": 2,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 10,
      "relation": "eq"
    },
    "max_score": 1.0061301,
    "hits": [
      {
        "_index": "books",
        "_id": "2",
        "_score": 1.0061301,
        "_source": {
          "title": "Effective Java",
          "author": "Joshua Bloch",
          "edition": 3,
          "synopsis": "A must-have book for every Java programmer and Java aspirant, Effective Java makes up for an excellent complementary read with other Java books or learning material. The book offers 78 best practices to follow for making the code better.",
          "amazon_rating": 4.7,
          "release_date": "2017-12-27",
          "tags": [
            "Object Oriented Software Design"
          ]
        }
      },
      {
        "_index": "books",
        "_id": "5",
        "_score": 0.90180784,
        "_source": {
          "title": "Head First Java",
          "author": "Kathy Sierra and Bert Bates",
          "edition": 2,
          "synopsis": "The most important selling points of Head First Java is its simplicity and super-effective real-life analogies that pertain to the Java programming concepts.",
          "amazon_rating": 4.3,
          "release_date": "2005-02-18",
          "tags": [
            "IT Certification Exams",
            "Object-Oriented Software Design",
            "Design Pattern Programming"
          ]
        }
      },



5) ๋ฌธ์žฅ ๊ฒ€์ƒ‰

์‹œ๋†‰์‹œ์Šค์— "must-have book for every Java programmer" ๋ฌธ์žฅ์ด ๋“ค์–ด๊ฐ„ ๋ฌธ์„œ๋ฅผ ๊ฒ€์ƒ‰"

โ‘  match ์ฟผ๋ฆฌ์— operator๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฒ€์ƒ‰

โ‘ก match_phrase๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฒ€์ƒ‰



6) ์ผ์น˜ํ•˜๋Š” ๋ถ€๋ถ„์„ ํ•˜์ด๋ผ์ดํŒ… ์ฒ˜๋ฆฌ

  • ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์—์„œ ๊ฐ ๋ฌธ์„œ์˜ ํ•˜์ด๋ผ์ดํŒ…๋œ ๋ถ€๋ถ„์€ _source ํ•„๋“œ ์•„๋ž˜์— highlight ํ•„๋“œ๋กœ ์ œ๊ณต๋œ๋‹ค.
  "highlight": {
          "synopsis": [
            "A <em>must-have book for every Java programmer</em> and Java aspirant, Effective Java makes up for an excellent"
          ]



7) ๋ˆ„๋ฝ๋œ ๋‹จ์–ด๊ฐ€ ์žˆ๋Š” ๋ฌธ์žฅ์„ ๊ฒ€์ƒ‰

์‹œ๋†‰์‹œ์Šค์— for every๊ฐ€ ๋ˆ„๋ฝ๋œ "must-have book Java programmer" ๋ฌธ์žฅ์œผ๋กœ ๊ฒ€์ƒ‰

โ‘  slop ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ โ‡’ ๊ฒ€์ƒ‰ํ•  ๋•Œ ๊ตฌ๋ฌธ์— ๋ˆ„๋ฝ ๋˜๋Š” ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋‹จ์–ด ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜

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

  • ์œ„ ์˜ˆ์‹œ์—์„œ slop ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” 2๋กœ ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉฐ, ๋‹จ์–ด ์‚ฌ์ด์— ์ตœ๋Œ€ 2๊ฐœ์˜ ๋‹จ์–ด๊ฐ€ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค

โ‘ก match ์ฟผ๋ฆฌ์— operator๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•



8) match ์ฟผ๋ฆฌ ์‹คํ–‰ ์‹œ ๋งž์ถค๋ฒ• ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ

โ‘  tags ํ•ญ๋ชฉ์— Computer ๋‹จ์–ด๊ฐ€ ๋“ค์–ด๊ฐ„ ๋ฌธ์„œ๋ฅผ ์กฐํšŒ

โ‘ก ์‚ฌ์šฉ์ž ์‹ค์ˆ˜๋กœ Computer ๋‹จ์–ด๋ฅผ Kumputer๋กœ ์ž…๋ ฅํ•œ ๊ฒฝ์šฐ โ‡’ ์ผ์น˜ํ•˜๋Š” ๊ฒฐ๊ณผ๊ฐ€ ์—†์Œ

โ‘ข fuzziness ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ๊ธ€์ž๊ฐ€ ์ž˜๋ชป ์ž…๋ ฅ๋œ ๊ฒฝ์šฐ(ํ‹€๋ฆฌ๊ฑฐ๋‚˜, ์ƒ๋žต๋˜๊ฑฐ๋‚˜, ์ถ”๊ฐ€๋œ ๊ฒฝ์šฐ)์—๋„ ๊ฒ€์ƒ‰์„ ํ—ˆ์šฉ

  • fuzziness ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” Elasticsearch์˜ ๊ฒ€์ƒ‰์—์„œ ์‚ฌ์šฉ๋˜๋ฉฐ, ์ฃผ์–ด์ง„ ๊ฒ€์ƒ‰์–ด์™€ ์ผ์น˜ํ•˜๋Š” ๋„ํ๋จผํŠธ๋ฅผ ์ฐพ์„ ๋•Œ ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์˜คํƒ€์˜ ์ˆ˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค

  • ์ •์ˆ˜ ๊ฐ’: ํ—ˆ์šฉํ•  ์ตœ๋Œ€ ํŽธ์ง‘ ๊ฑฐ๋ฆฌ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 2๋กœ ์„ค์ •ํ•˜๋ฉด ์ตœ๋Œ€ 2๊ฐœ์˜ ๋ฌธ์ž๊ฐ€ ์˜คํƒ€์ผ ๊ฒฝ์šฐ์—๋„ ์ผ์น˜ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค.

  • "AUTO": Elasticsearch์—๊ฒŒ ์ž๋™์œผ๋กœ ์ ์ ˆํ•œ ํŽธ์ง‘ ๊ฑฐ๋ฆฌ๋ฅผ ์„ ํƒํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๊ฒ€์ƒ‰์–ด์˜ ๊ธธ์ด์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ๊ฐ’์„ ์ž๋™์œผ๋กœ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.



3. ์šฉ์–ด ์ˆ˜์ค€ ์ฟผ๋ฆฌ(term-level query)

  • ์šฉ์–ด ์ˆ˜์ค€ ์ฟผ๋ฆฌ(term-level query)๋Š” Elasticsearch์—์„œ ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ฟผ๋ฆฌ ์œ ํ˜•์ž…๋‹ˆ๋‹ค. ์ด ์ฟผ๋ฆฌ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ •ํ™•ํ•œ ์ผ์น˜ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐ ์ง‘์ค‘ํ•˜๋ฉฐ, ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์— ๊ด€๋ จ์„ฑ ์ ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

  • ์˜ˆ๋ฅผ ๋“ค์–ด, ์šฉ์–ด ์ˆ˜์ค€ ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆซ์ž ํ•„๋“œ์—์„œ ํŠน์ • ๊ฐ’๊ณผ ์ •ํ™•ํ•˜๊ฒŒ ์ผ์น˜ํ•˜๋Š” ๋„ํ๋จผํŠธ๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋‚ ์งœ ๋ฒ”์œ„๋‚˜ IP ์ฃผ์†Œ์™€ ๊ฐ™์€ ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ์—์„œ๋„ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

  • ๊ตฌ์กฐํ™”๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ(์˜ˆ: ๋ฌธ์ž์—ด)๋Š” Elasticsearch์—์„œ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์ „์— ๋ถ„์„๋˜์–ด ์ €์žฅ๋˜๋Š” ๋ฐ˜๋ฉด, ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ๋Š” ์ด๋ฏธ ๋ถ„์„๋˜์ง€ ์•Š๊ณ  ๊ทธ๋Œ€๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

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


1) ๋ฌธ์„œ ๊ตฌ์กฐ ํ™•์ธ

{
"title": "Head First Java",
"author": "Kathy Sierra and Bert Bates",
"edition": 2,
"synopsis": "The most important selling points of Head First Java is its simplicity and super-effective real-life analogies that pertain to the Java programming concepts.",
"amazon_rating": 4.3,
"release_date": "2005-02-18",
"tags": [
  "IT Certification Exams",
  "Object-Oriented Software Design",
  "Design Pattern Programming"
]
}
  • title: ์ฑ…์˜ ์ œ๋ชฉ. ์—ฌ๊ธฐ์„œ๋Š” "Head First Java"์ž…๋‹ˆ๋‹ค.

  • author: ์ฑ…์˜ ์ €์ž ๋˜๋Š” ์ €์ž๋“ค. ์—ฌ๊ธฐ์„œ๋Š” "Kathy Sierra and Bert Bates"์ž…๋‹ˆ๋‹ค.

  • edition: ์ฑ…์˜ ํŒ๋งค ๋ฒ„์ „. ์—ฌ๊ธฐ์„œ๋Š” 2ํŒ(2)์ž…๋‹ˆ๋‹ค.

  • synopsis: ์ฑ…์˜ ๊ฐ„๋žตํ•œ ๊ฐœ์š” ๋˜๋Š” ๋‚ด์šฉ ์š”์•ฝ. ์—ฌ๊ธฐ์„œ๋Š” "The most important selling points of Head First Java is its simplicity and super-effective real-life analogies that pertain to the Java programming concepts."์ž…๋‹ˆ๋‹ค.

  • amazon_rating: ์•„๋งˆ์กด์—์„œ์˜ ํ‰์ . ์—ฌ๊ธฐ์„œ๋Š” 4.3์ž…๋‹ˆ๋‹ค.

  • release_date: ์ฑ…์˜ ์ถœ์‹œ์ผ. ์—ฌ๊ธฐ์„œ๋Š” "2005-02-18"์ž…๋‹ˆ๋‹ค.

  • tags: ์ฑ…๊ณผ ๊ด€๋ จ๋œ ํƒœ๊ทธ ๋ชฉ๋ก. ์—ฌ๊ธฐ์„œ๋Š” "IT Certification Exams", "Object-Oriented Software Design", "Design Pattern Programming"์ž…๋‹ˆ๋‹ค.



2) edition์— 3์ด ํฌํ•จ๋œ ๋ฌธ์„œ๋ฅผ ๊ฒ€์ƒ‰ โ‡’ match ์ฟผ๋ฆฌ๋ฅผ ์ด์šฉ



3) ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์˜ _source ๋ถ€๋ถ„์„ title๊ณผ edition ์ •๋ณด๋งŒ ์ถœ๋ ฅ๋˜๋„๋ก ์ˆ˜์ •



4) term ์ฟผ๋ฆฌ๋ฅผ ์ด์šฉ

  • term ์ฟผ๋ฆฌ๋Š” ํ…์ŠคํŠธ ๋ถ„์„์„ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ํ•„๋“œ์˜ ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ๊ฒ€์ƒ‰ํ•˜๋ฏ€๋กœ, ์ •ํ™•ํ•œ ์šฉ์–ด๋‚˜ ๊ฐ’์„ ์ฐพ์„ ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  • ์ด๊ฒƒ์€ ํ…์ŠคํŠธ๋‚˜ ๋ฌธ์ž์—ด๊ณผ ๊ฐ™์€ ๊ตฌ์กฐํ™”๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ณด๋‹ค๋Š” ์ˆซ์ž, ๋‚ ์งœ, ํ‚ค์›Œ๋“œ์™€ ๊ฐ™์€ ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ์— ๋” ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.



5) range ์ฟผ๋ฆฌ

  • ์ด ์ฟผ๋ฆฌ๋Š” ํŠน์ • ๋ฒ”์œ„ ๋‚ด์— ์žˆ๋Š” ๊ฐ’์„ ๊ฐ€์ง„ ๋„ํ๋จผํŠธ๋ฅผ ๊ฒ€์ƒ‰ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. range ์ฟผ๋ฆฌ๋Š” ์ˆซ์ž, ๋‚ ์งœ ๋ฐ ๊ธฐํƒ€ ์œ ํ˜•์˜ ํ•„๋“œ์— ๋Œ€ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ง€์ •๋œ ๋ฒ”์œ„ ๋‚ด์— ์žˆ๋Š” ๊ฐ’์œผ๋กœ ํ•„๋“œ๋ฅผ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.

  • ์ฆ‰, range ์ฟผ๋ฆฌ๋Š” ํŠน์ • ๋ฒ”์œ„ ๋‚ด์— ์žˆ๋Š” ๊ฐ’์„ ํ•„ํ„ฐ๋งํ•˜๋Š” ๋ฐ ์œ ์šฉํ•˜๋ฉฐ, ์ˆซ์ž๋‚˜ ๋‚ ์งœ์™€ ๊ฐ™์€ ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  • range ์ฟผ๋ฆฌ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์š” ์˜ต์…˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

    • gte: Greater than or equal to (์ด์ƒ). ์ง€์ •๋œ ๊ฐ’๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ๊ฐ’์„ ๊ฐ€์ง„ ๋„ํ๋จผํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

    • gt: Greater than (์ดˆ๊ณผ). ์ง€์ •๋œ ๊ฐ’๋ณด๋‹ค ํฐ ๊ฐ’์„ ๊ฐ€์ง„ ๋„ํ๋จผํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

    • lte: Less than or equal to (์ดํ•˜). ์ง€์ •๋œ ๊ฐ’๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ๊ฐ’์„ ๊ฐ€์ง„ ๋„ํ๋จผํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

    • lt: Less than (๋ฏธ๋งŒ). ์ง€์ •๋œ ๊ฐ’๋ณด๋‹ค ์ž‘์€ ๊ฐ’์„ ๊ฐ€์ง„ ๋„ํ๋จผํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.


amazon_rating์ด 4.5 ์ด์ƒ, 5.0 ์ดํ•˜์ธ ๋„์„œ ๋ฌธ์„œ๋ฅผ ์กฐํšŒ



4. ๋ณตํ•ฉ ์ฟผ๋ฆฌ

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

*) ๋ณตํ•ฉ ์ฟผ๋ฆฌ ์ข…๋ฅ˜

  • ๋ถ€์šธ(bool) ์ฟผ๋ฆฌ:
    ๋ถ€์šธ ์ฟผ๋ฆฌ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋‹จ์ผ ์ฟผ๋ฆฌ๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ๋ณต์žกํ•œ ๋…ผ๋ฆฌ์  ์กฐ๊ฑด์„ ๋งŒ์กฑ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํ•„ํ„ฐ๋ง, ๋ฐ˜๋“œ์‹œ ์ผ์น˜ํ•ด์•ผ ํ•˜๋Š” ์กฐ๊ฑด, ๋˜๋Š” ๋ฐ˜๋“œ์‹œ ์ผ์น˜ํ•˜์ง€ ์•Š์•„์•ผ ํ•˜๋Š” ์กฐ๊ฑด ๋“ฑ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ƒ์ˆ˜ ์ ์ˆ˜(constant_score) ์ฟผ๋ฆฌ:
    ์ƒ์ˆ˜ ์ ์ˆ˜ ์ฟผ๋ฆฌ๋Š” ๋‹จ์ผ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๋ชจ๋“  ๊ฒฐ๊ณผ์— ๋Œ€ํ•ด ๋™์ผํ•œ ์ ์ˆ˜๋ฅผ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ฒฐ๊ณผ๋ฅผ ํ•„ํ„ฐ๋งํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ, ๋ชจ๋“  ๊ฒฐ๊ณผ์— ๋Œ€ํ•ด ๋™์ผํ•œ ์ค‘์š”๋„๋ฅผ ๋ถ€์—ฌํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ๊ธฐ๋Šฅ ์ ์ˆ˜(function_score) ์ฟผ๋ฆฌ:
    ๊ธฐ๋Šฅ ์ ์ˆ˜ ์ฟผ๋ฆฌ๋Š” ๋‹จ์ผ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์˜ ์ ์ˆ˜๋ฅผ ์กฐ์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์˜ ์ˆœ์œ„๋ฅผ ๊ฐœ์„ ํ•˜๊ฑฐ๋‚˜ ํŠน์ • ์กฐ๊ฑด์— ๋”ฐ๋ผ ๊ฒฐ๊ณผ๋ฅผ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ถ€์ŠคํŒ…(boosting) ์ฟผ๋ฆฌ:
    ๋ถ€์ŠคํŒ… ์ฟผ๋ฆฌ๋Š” ์ผ์น˜ํ•˜๋Š” ๋ฌธ์„œ์— ๊ฐ€์ค‘์น˜๋ฅผ ๋ถ€์—ฌํ•˜์—ฌ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์˜ ์ˆœ์œ„๋ฅผ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํŠน์ • ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ผ์น˜ํ•˜๋Š” ๋ฌธ์„œ์˜ ์ค‘์š”๋„๋ฅผ ๋†’์ด๊ฑฐ๋‚˜ ๋‚ฎ์ถœ ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ๋ถ„๋ฆฌ ์ตœ๋Œ€(dis_max) ์ฟผ๋ฆฌ:
    ๋ถ„๋ฆฌ ์ตœ๋Œ€ ์ฟผ๋ฆฌ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๊ทธ ์ค‘ ๊ฐ€์žฅ ๋†’์€ ์ ์ˆ˜๋ฅผ ๊ฐ€์ง„ ๋ฌธ์„œ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋‹ค์–‘ํ•œ ์ฟผ๋ฆฌ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๊ฐ€์žฅ ๊ด€๋ จ์„ฑ ๋†’์€ ๊ฒฐ๊ณผ๋ฅผ ์ฐพ์„ ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋ถ€์šธ(bool) ์ฟผ๋ฆฌ

GET books/_search
{
  "query": {
    "bool": {
      "must": [ {    } ], 		
      "must_not": [ {    } ], 	
      "should": [ {    } ], 		
      "filter": [ {    } ]		
    }
  }
}
  • must: ๋ฌธ์„œ์™€ ์ผ์น˜ํ•ด์•ผ ํ•˜๋Š” ์กฐ๊ฑด์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ฆ‰, ์ด ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ฌธ์„œ๋งŒ ๊ฒฐ๊ณผ์— ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

  • must_not: ๋ฌธ์„œ์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์•„์•ผ ํ•˜๋Š” ์กฐ๊ฑด์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ด ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ฌธ์„œ๋Š” ๊ฒฐ๊ณผ์—์„œ ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค.

  • should: ๋ฐ˜๋“œ์‹œ ์ผ์น˜ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ, ์ผ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ ๋†’์€ ๊ด€๋ จ์„ฑ ์ ์ˆ˜๊ฐ€ ๋ถ€์—ฌ๋˜๋Š” ์กฐ๊ฑด์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ด ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ฌธ์„œ๋Š” ๊ฒฐ๊ณผ์— ํฌํ•จ๋  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ฐ˜๋“œ์‹œ ํฌํ•จ๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

  • filter: must์™€ ๊ฐ™์ด ๋ฌธ์„œ์™€ ์ผ์น˜ํ•˜์ง€๋งŒ, ๊ด€๋ จ์„ฑ ์ ์ˆ˜์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š” ์กฐ๊ฑด์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ผ์น˜ํ•˜๋Š” ๋ฌธ์„œ๋Š” ๊ฒฐ๊ณผ์— ํฌํ•จ๋˜์ง€๋งŒ, ๊ด€๋ จ์„ฑ ์ ์ˆ˜๊ฐ€ ๋ถ€์—ฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ  *) Elasticsearch์˜ ๋ฐ์ดํ„ฐ ๊ด€๋ จ ๊ธฐ๋Šฅ๊ณผ REST API์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์„ ์ œ๊ณต.
https://esbook.kimjmin.net/04-data/4.1-rest-api
https://esbook.kimjmin.net/04-data/4.2-crud
https://esbook.kimjmin.net/04-data/4.3-_bulk
https://esbook.kimjmin.net/04-data/4.4-_search
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html

1) must ์ ˆ

  • ๋ฌธ์„œ์™€ ์ผ์น˜ํ•ด์•ผ ํ•˜๋Š” ์กฐ๊ฑด์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ฆ‰, ์ด ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ฌธ์„œ๋งŒ ๊ฒฐ๊ณผ์— ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

books ์ธ๋ฑ์Šค์—์„œ ์ €์ž๊ฐ€ Joshua Bloch์ธ ๋„์„œ(๋ฌธ์„œ)๋ฅผ ๊ฒ€์ƒ‰

GET books/_search
{
"query": {
  "bool": {					โ‡ ๋ถ€์šธ ์ฟผ๋ฆฌ
    "must": {				โ‡ must ์ ˆ โ†’ ๋ฌธ์„œ๊ฐ€ ๊ธฐ์ค€๊ณผ ์ผ์น˜ํ•ด์•ผ ํ•จ
      "match": {				โ‡ match ์ฟผ๋ฆฌ โ†’ Joshua Bloch๊ฐ€ ์“ด ์ฑ…๊ณผ ์ผ์น˜ํ•˜๋Š” ๊ถˆ๋ฆฌ 
        "author": "Joshua Bloch"
      }
    }
  }
}, 
"_source": ["title", "author"]
}
  • "books" ์ธ๋ฑ์Šค์—์„œ "author" ํ•„๋“œ๊ฐ€ "Joshua Bloch"์ธ ๋ฌธ์„œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ถ€์šธ ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • ๋ถ€์šธ ์ฟผ๋ฆฌ(bool query): ๋ถ€์šธ ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ ๊ฒ€์ƒ‰ ์กฐ๊ฑด์„ ์กฐํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ "must" ์ ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์„œ๊ฐ€ ํŠน์ • ์กฐ๊ฑด๊ณผ ์ผ์น˜ํ•ด์•ผ ํ•œ๋‹ค๋Š” ์กฐ๊ฑด์„ ์ง€์ •ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  • must ์ ˆ(must clause): must ์ ˆ์€ ๋ฌธ์„œ๊ฐ€ ์ง€์ •๋œ ์กฐ๊ฑด๊ณผ ๋ฐ˜๋“œ์‹œ ์ผ์น˜ํ•ด์•ผ ํ•จ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” "author" ํ•„๋“œ๊ฐ€ "Joshua Bloch"์ธ ๋ฌธ์„œ๋ฅผ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  • match ์ฟผ๋ฆฌ(match query): match ์ฟผ๋ฆฌ๋Š” ์ง€์ •๋œ ํ•„๋“œ์—์„œ ํŠน์ • ๊ฐ’๊ณผ ์ผ์น˜ํ•˜๋Š” ๋ฌธ์„œ๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ "author" ํ•„๋“œ์—์„œ "Joshua Bloch"์™€ ์ผ์น˜ํ•˜๋Š” ๋ฌธ์„œ๋ฅผ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์—๋Š” "_source" ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์— ํฌํ•จ๋  ํ•„๋“œ๋ฅผ ์ง€์ •ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” "title"๊ณผ "author" ํ•„๋“œ๋งŒ ๊ฒฐ๊ณผ์— ํฌํ•จ์‹œํ‚ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ด ์š”์ฒญ์€ "author" ํ•„๋“œ๊ฐ€ "Joshua Bloch"์ธ ์ฑ…์˜ ์ œ๋ชฉ๊ณผ ์ €์ž ์ •๋ณด๋ฅผ ๊ฒ€์ƒ‰ํ•˜์—ฌ ๋ฐ˜ํ™˜

โ‘  ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ match ์ฟผ๋ฆฌ๋กœ ๋ณ€๊ฒฝ

โ‘ก ๊ฒ€์ƒ‰์–ด(์ €์ž ์ด๋ฆ„)์˜ ์ˆœ์„œ๊ฐ€ ๋‹ฌ๋ผ๋„ ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅ

โ‘ข match_phase ์ฟผ๋ฆฌ๋กœ ๋ณ€๊ฒฝ โ‡’ ๋‹จ์–ด์˜ ์ˆœ์„œ๊ฐ€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ ๊ฒ€์ƒ‰๋˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ํ™•์ธ

  • "match_phrase" ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŠน์ •ํ•œ ๋‹จ์–ด๋‚˜ ๊ตฌ๋ฌธ์ด ๋ฌธ์„œ ๋‚ด์—์„œ ์ •ํ™•ํ•œ ์ˆœ์„œ๋กœ ์ผ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ๋ฌธ์„œ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

โ‘ฃ ์ €์ž๊ฐ€ "Joshua Bloch"์ด๊ณ , synopsis์— "best Java programming books" ๋‚ด์šฉ์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ๋ฌธ์„œ๋ฅผ ์กฐํšŒ

2) must_not ์ ˆ

  • ๋ฌธ์„œ์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์•„์•ผ ํ•˜๋Š” ์กฐ๊ฑด์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ด ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ฌธ์„œ๋Š” ๊ฒฐ๊ณผ์—์„œ ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค.

Joshua Block ์ฑ… ์ค‘์—์„œ ์•„๋งˆ์กด ํ‰์ ์ด 4.7 ๋ฏธ๋งŒ์ด ์•„๋‹Œ ์ฑ…์„ ๊ฒ€์ƒ‰

  • "author" ํ•„๋“œ๊ฐ€ "Joshua Block"์ธ ๋ฌธ์„œ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.

  • "amazon_rating" ํ•„๋“œ์˜ ๊ฐ’์ด 4.7 ๋ฏธ๋งŒ์ธ ๋ฌธ์„œ๋Š” ์ œ์™ธํ•ฉ๋‹ˆ๋‹ค.

3) should ์ ˆ

- ๋ฐ˜๋“œ์‹œ ์ผ์น˜ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ, ์ผ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ ๋†’์€ ๊ด€๋ จ์„ฑ ์ ์ˆ˜๊ฐ€ ๋ถ€์—ฌ๋˜๋Š” ์กฐ๊ฑด์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ด ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ฌธ์„œ๋Š” ๊ฒฐ๊ณผ์— ํฌํ•จ๋  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ฐ˜๋“œ์‹œ ํฌํ•จ๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

*) _score๋Š” ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์˜ ๊ด€๋ จ์„ฑ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ’์œผ๋กœ, ๋†’์€ _score๋ฅผ ๊ฐ€์ง„ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๊ฐ€ ์ฟผ๋ฆฌ์™€ ๋” ๊ด€๋ จ์„ฑ์ด ๋†’์€ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋˜๋ฉฐ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์˜ ์ˆœ์œ„๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

โ‘  should ์ ˆ์„ ํฌํ•จํ•˜์ง€ ์•Š๊ณ  ๊ฒ€์ƒ‰ํ–ˆ์„ ๋•Œ

โ‘ก should ์ ˆ์„ ํฌํ•จํ•ด์„œ ๊ฒ€์ƒ‰ โ‡’ _score๊ฐ€ ์ฆ๊ฐ€ํ•œ ๊ฒƒ์„ ํ™•์ธ

โ‘ข should ์ ˆ์— ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ์กฐ๊ฑด์„ ์ถ”๊ฐ€ โ‡’ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋Š” ๋ณ€ํ•จ์ด ์—†๋Š”๋ฐ, _score๊ฐ€ ๊ฐ์†Œ(should ์ ˆ์ด ์—†๋Š” ๊ฒƒ๊ณผ ๋™์ผ)ํ•˜๋Š” ๊ฒƒ์œผ๋ฅด ํ™•์ธ

โ‡’ should ์ ˆ์˜ ์กฐ๊ฑด์€ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์œผ๋‚˜, ๋งŒ์•ฝ ์ผ์น˜ํ•œ๋‹ค๋ฉด ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์˜ ์œ ์‚ฌ๋„ ์ ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธ

4) filter ์ ˆ

  • must์™€ ๊ฐ™์ด ๋ฌธ์„œ์™€ ์ผ์น˜ํ•˜์ง€๋งŒ, ๊ด€๋ จ์„ฑ ์ ์ˆ˜์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š” ์กฐ๊ฑด์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ผ์น˜ํ•˜๋Š” ๋ฌธ์„œ๋Š” ๊ฒฐ๊ณผ์— ํฌํ•จ๋˜์ง€๋งŒ, ๊ด€๋ จ์„ฑ ์ ์ˆ˜๊ฐ€ ๋ถ€์—ฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Joshua Block ์ฑ… ์ค‘์—์„œ ์•„๋งˆ์กด ํ‰์ ์ด 4.7 ๋ฏธ๋งŒ์ด ์•„๋‹Œ ์ฑ… ์ค‘ ํƒœ๊ทธ์— Software๊ฐ€ ํฌํ•จ๋œ ์ฑ…์„ ๊ฒ€์ƒ‰ํ•˜๋Š”๋ฐ, ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์—์„œ 2015๋…„ ์ด์ „์— ์ถœํŒ๋œ ์ฑ…์€ ํ•„ํ„ฐ๋ง(2015๋…„ ์ด์ „์— ์ถœํŒ๋œ ์ฑ…์€ ๊ฒฐ๊ณผ์—์„œ ์ œ์™ธ)

โ‘  filter ์ ˆ์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ณ  ๊ฒ€์ƒ‰ โ‡’ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๊ฐ€ ๋™์ผํ•˜๊ณ  _score๋„ ๋™์ผ โ‡’ ์—ฐ๊ด€์„ฑ ์ ์ˆ˜์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Œ

โ‘ก filter ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ์•Š์œผ๋ฉด ๊ฒ€์ƒ‰ ๋Œ€์ƒ์ด ๋  ์ˆ˜ ์—†์Œ

โ‘ข Joshua Block ์ฑ… ์ค‘์—์„œ ์•„๋งˆ์กด ํ‰์ ์ด 4.7 ๋ฏธ๋งŒ์ด ์•„๋‹Œ ์ฑ… ์ค‘ ํƒœ๊ทธ์— Software๊ฐ€ ํฌํ•จ๋œ ์ฑ…์„ ๊ฒ€์ƒ‰ํ•˜๋Š”๋ฐ, ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์—์„œ 2015๋…„ ์ด์ „์— ์ถœํŒ๋˜๊ณ  3ํŒ์ธ ์ฑ…์„ ๊ฒ€์ƒ‰



๐Ÿ“Œ ์ง‘๊ณ„(aggregations)

  • ์ง‘๊ณ„ ์œ ํ˜•

    • ๋ฉ”ํŠธ๋ฆญ ์ง‘๊ณ„ - ํ•ฉ๊ณ„, ์ตœ์†Œ, ์ตœ๋Œ€, ํ‰๊ท  โ‡ ๋ฌธ์„œ ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ ์ „์ฒด์— ๊ฑธ์ณ ์ง‘๊ณ„๋œ ๊ฐ’

    • ๋ฒ„ํ‚ท ์ง‘๊ณ„ - ๋‚ ์งœ, ์—ฐ๋ น ๊ทธ๋ฃน ๋“ฑ๊ณผ ๊ฐ™์€ ๊ฐ„๊ฒฉ์œผ๋กœ ๋ถ„๋ฆฌ๋œ ๋ฒ„ํ‚ท์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๋Š” ์ง‘๊ณ„ โ†’ ํžˆ์Šคํ† ๊ทธ๋žจ, ์›ํ˜• ์ฐจํŠธ, ๊ธฐํƒ€ ์‹œ๊ฐํ™” ๊ตฌ์ถ•์— ์‚ฌ์šฉ

    • ํŒŒ์ดํ”„๋ผ์ธ ์ง‘๊ณ„ - ๋‹ค๋ฅธ ์ง‘๊ณ„์˜ ์ถœ๋ ฅ์— ๋Œ€ํ•ด ์ž‘๋™ํ•˜๋Š” ์ง‘๊ณ„

  • ๊ฒ€์ƒ‰๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ _search ์—”๋“œํฌ์ธํŠธ๋ฅผ ์‚ฌ์šฉ

  • query ๊ฐœ์ฒด ๋Œ€์‹  aggs ๊ฐœ์ฒด๋ฅผ ์‚ฌ์šฉ



1. 10๊ฐœ๊ตญ์˜ ์ฝ”๋กœ๋‚˜ ๊ด€๋ จ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ‰์ธํ™”

https://github.com/madhusudhankonda/elasticsearch-in-action/blob/main/datasets/covid-26march2021.txt



2. covid ์ธ๋ฑ์Šค์— ๋ฌธ์„œ ๊ฐœ์ˆ˜๋ฅผ ์กฐํšŒ



3. covid ์ธ๋ฑ์Šค์— ๋ชจ๋“  ๋ฌธ์„œ๋ฅผ ์กฐํšŒ



4. ๋ฉ”ํŠธ๋ฆญ(metric) ์ง‘๊ณ„

GET books/_search						   โ‡ ์กฐํšŒ์™€ ๋™์ผํ•œ ์—”๋“œํฌ์ธํŠธ๋ฅผ ์‚ฌ์šฉ(_search API๋ฅผ ์ด์šฉ)
{
	"aggs": {						       โ‡ ์ง‘๊ณ„๋ฅผ ์˜๋ฏธ
		"avg_rating": {				       โ‡ ์ง‘๊ณ„ ๊ฒฐ๊ณผ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ์ด๋ฆ„ 
			"avg": {				       โ‡ ์ง‘๊ณ„ ์œ ํ˜• (avg = ํ‰๊ท )
				"field": "amazon_rating"   โ‡ ์ง‘๊ณ„ ๋Œ€์ƒ 
			}
		}
	}
}



5. covid ์ธ๋ฑ์Šค์—์„œ ์ „์ฒด ์ค‘์ฆํ™˜์ž ์ˆ˜๋ฅผ ์ง‘๊ณ„ํ•ด์„œ critial_patients๋กœ ์ถœ๋ ฅ

1) ๋ฌธ์„œ ๊ตฌ์กฐ

๋ฌธ์„œ ๊ตฌ์กฐ
      {
        "country": "United States of America",
        "date": "2021-03-26",
        "cases": 30853032,			โ‡ ํ™•์ง„์ž
        "deaths": 561142,			 โ‡ ์‚ฌ๋ง์ž
        "recovered": 23275268,		โ‡ ์™„์น˜์ž
        "critical": 8610			โ‡ ์ค‘์ฆํ™˜์ž
      }

  • ์ง‘๊ณ„(aggregation): "critial_patients"
    "critical" ํ•„๋“œ์˜ ๊ฐ’์˜ ํ•ฉ๊ณ„๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

  • ์ด ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด "critical" ํ•„๋“œ์˜ ๊ฐ’์ด ๋ชจ๋‘ ํ•ฉ์‚ฐ๋˜์–ด ์ค‘์š”ํ•œ ํ™˜์ž๋“ค์˜ ์ด ์ˆ˜๊ฐ€ ๋ฐ˜ํ™˜๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

2) ์›๋ณธ ์†Œ์Šค ๋ฌธ์„œ๊ฐ€ ์ง‘๊ณ„ ๊ฒฐ๊ณผ์— ํฌํ•จ๋˜์ง€ ์•Š๋„๋ก ์„ค์ •

  • "size 0" : ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋กœ ๋ฌธ์„œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๊ณ , ์ง‘๊ณ„ ๊ฒฐ๊ณผ๋งŒ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  • "aggs": ์ง‘๊ณ„ ์ฟผ๋ฆฌ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

  • "critical_patients": ์ง‘๊ณ„์˜ ์ด๋ฆ„์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

  • "sum": ์ง€์ •๋œ ํ•„๋“œ์˜ ๊ฐ’์„ ํ•ฉ์‚ฐํ•ฉ๋‹ˆ๋‹ค.

  • "field": "critical": critical ํ•„๋“œ์˜ ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ฉ์‚ฐํ•ฉ๋‹ˆ๋‹ค. ์ด ํ•„๋“œ๋Š” ํ™˜์ž์˜ ์‹ฌ๊ฐํ•œ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์œผ๋กœ ์ถ”์ •๋ฉ๋‹ˆ๋‹ค.

3) covid ์ธ๋ฑ์Šค์—์„œ ์ „์ฒด ์‚ฌ๋ง์ž์ˆ˜ ์ค‘ ๊ฐ€์žฅ ํฐ ๊ฐ’, ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’, ํ‰๊ท  ๊ฐ’

  • "size": 0: ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋กœ ๋ฌธ์„œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๊ณ , ์ง‘๊ณ„ ๊ฒฐ๊ณผ๋งŒ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  • "aggs": ์ง‘๊ณ„ ์ฟผ๋ฆฌ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

  • "max_deaths": ์ตœ๋Œ€ ์‚ฌ๋ง์ž ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ์ง‘๊ณ„์ž…๋‹ˆ๋‹ค.

    • "max": ์ตœ๋Œ€ ๊ฐ’์„ ์ฐพ๊ธฐ ์œ„ํ•œ ์ง‘๊ณ„ ์œ ํ˜•์ž…๋‹ˆ๋‹ค.
    • "field": "deaths": deaths ํ•„๋“œ์˜ ๊ฐ’์—์„œ ์ตœ๋Œ€ ๊ฐ’์„ ์ฐพ์Šต๋‹ˆ๋‹ค.
  • "min_deaths": ์ตœ์†Œ ์‚ฌ๋ง์ž ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ์ง‘๊ณ„์ž…๋‹ˆ๋‹ค.

    • "min": ์ตœ์†Œ ๊ฐ’์„ ์ฐพ๊ธฐ ์œ„ํ•œ ์ง‘๊ณ„ ์œ ํ˜•์ž…๋‹ˆ๋‹ค.

    • "field": "deaths": deaths ํ•„๋“œ์˜ ๊ฐ’์—์„œ ์ตœ์†Œ ๊ฐ’์„ ์ฐพ์Šต๋‹ˆ๋‹ค.

  • "avg_deaths": ํ‰๊ท  ์‚ฌ๋ง์ž ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ์ง‘๊ณ„์ž…๋‹ˆ๋‹ค.

    • "avg": ํ‰๊ท  ๊ฐ’์„ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•œ ์ง‘๊ณ„ ์œ ํ˜•์ž…๋‹ˆ๋‹ค.
  • "field": "deaths": deaths ํ•„๋“œ์˜ ๊ฐ’์˜ ํ‰๊ท ์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

4) stats ์ง‘๊ณ„๋ฅผ ์ด์šฉํ•ด์„œ ๊ฐœ์ˆ˜, ์ตœ์†Œ๊ฐ’, ์ตœ๋Œ€๊ฐ’, ํ‰๊ท , ํ•ฉ๊ณ„๋ฅผ ์กฐํšŒ

"stats" ์ง‘๊ณ„๋Š” ์ง€์ •๋œ ํ•„๋“œ์— ๋Œ€ํ•œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ†ต๊ณ„ ์ •๋ณด๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค:

  • count: ํ•ด๋‹น ํ•„๋“œ์˜ ๊ฐ’์˜ ๊ฐœ์ˆ˜

  • min: ํ•ด๋‹น ํ•„๋“œ์˜ ์ตœ์†Œ๊ฐ’

  • max: ํ•ด๋‹น ํ•„๋“œ์˜ ์ตœ๋Œ€๊ฐ’

  • avg: ํ•ด๋‹น ํ•„๋“œ์˜ ํ‰๊ท ๊ฐ’

  • sum: ํ•ด๋‹น ํ•„๋“œ์˜ ๋ชจ๋“  ๊ฐ’์˜ ํ•ฉ๊ณ„

  • "size": 0: ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋กœ ๋ฌธ์„œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๊ณ , ์ง‘๊ณ„ ๊ฒฐ๊ณผ๋งŒ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  • "aggs" : ์ง‘๊ณ„ ์ฟผ๋ฆฌ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

  • "all_stats" : ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

  • "stats" : ๊ฐœ์ˆ˜, ์ตœ์†Œ๊ฐ’, ์ตœ๋Œ€๊ฐ’, ํ‰๊ท , ํ•ฉ๊ณ„๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ์ง‘๊ณ„ ์œ ํ˜•์ž…๋‹ˆ๋‹ค.

  • "field": "deaths" : deaths ํ•„๋“œ์˜ ๊ฐ’์— ๋Œ€ํ•ด ํ†ต๊ณ„๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

5) extended_stats โ‡’ ๋ถ„์‚ฐ, ํ‘œ์ค€ ํŽธ์ฐจ์™€ ๊ฐ™์€ ๋” ๋งŽ์€ ์ •๋ณด๋ฅผ ์ œ๊ณต

  • "stats" ์ง‘๊ณ„์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ, "extended_stats"๋Š” ๋” ๋งŽ์€ ํ†ต๊ณ„ ์ •๋ณด๋ฅผ ์ œ๊ณต

โ‘  count: ํ•ด๋‹น ํ•„๋“œ์˜ ๊ฐ’์˜ ๊ฐœ์ˆ˜

โ‘ก min: ํ•ด๋‹น ํ•„๋“œ์˜ ์ตœ์†Œ๊ฐ’

โ‘ข max: ํ•ด๋‹น ํ•„๋“œ์˜ ์ตœ๋Œ€๊ฐ’

โ‘ฃ avg: ํ•ด๋‹น ํ•„๋“œ์˜ ํ‰๊ท ๊ฐ’

โ‘ค sum: ํ•ด๋‹น ํ•„๋“œ์˜ ๋ชจ๋“  ๊ฐ’์˜ ํ•ฉ๊ณ„

โ‘ฅ sum_of_squares: ํ•ด๋‹น ํ•„๋“œ ๊ฐ’์˜ ์ œ๊ณฑ์˜ ํ•ฉ

โ‘ฆ variance: ํ•ด๋‹น ํ•„๋“œ ๊ฐ’์˜ ๋ถ„์‚ฐ

โ‘ง std_deviation: ํ•ด๋‹น ํ•„๋“œ ๊ฐ’์˜ ํ‘œ์ค€ ํŽธ์ฐจ

โ‘จ std_deviation_bounds: ํ‘œ์ค€ ํŽธ์ฐจ ๊ฒฝ๊ณ„๊ฐ’์„ ํฌํ•จํ•œ ๊ฐ์ฒด



6. ๋ฒ„ํ‚ท(bucket) ์ง‘๊ณ„

๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์–‘ํ•œ ๊ทธ๋ฃน์ด๋‚˜ ๋ฒ„ํ‚ท์œผ๋กœ ๋ถ„๋ฆฌ โ‡’ ๋ฒ„ํ‚ทํŒ…

1) ํžˆ์Šคํ† ๊ทธ๋žจ ๋ฒ„ํ‚ท(histogram buckets)

  • ํžˆ์Šคํ† ๊ทธ๋žจ์€ ํ•„๋“œ ๊ฐ’์„ ์ง€์ •๋œ ๊ฐ„๊ฒฉ(interval)์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ๊ทธ๋ฃน์œผ๋กœ ๋‚˜๋ˆ„๋Š” ์ง‘๊ณ„ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ๊ฐ ๊ทธ๋ฃน์€ "๋ฒ„ํ‚ท"์ด๋ผ๊ณ ๋„ ๋ถˆ๋ฆฝ๋‹ˆ๋‹ค.

  • "size": 0: ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋กœ ๋ฌธ์„œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๊ณ , ์ง‘๊ณ„ ๊ฒฐ๊ณผ๋งŒ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  • "aggs": ์ง‘๊ณ„ ์ฟผ๋ฆฌ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

  • "critical_patients_as_histogram": ํžˆ์Šคํ† ๊ทธ๋žจ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

  • "histogram": ํžˆ์Šคํ† ๊ทธ๋žจ ์ง‘๊ณ„๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

  • "field": "critical" : critical ํ•„๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํžˆ์Šคํ† ๊ทธ๋žจ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • "interval": 2500 : ๊ฐ ๋ฒ„ํ‚ท(bin)์˜ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” critical ๊ฐ’์˜ ๋ฒ”์œ„๋ฅผ 2500 ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„์–ด ๋ฒ„ํ‚ท์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • 0๋ถ€ํ„ฐ 2499๊นŒ์ง€์˜ ๊ฐ’์— ํ•ด๋‹นํ•˜๋Š” ๋ฌธ์„œ๊ฐ€ 4๊ฐœ ์žˆ์Šต๋‹ˆ๋‹ค.

  • 2500๋ถ€ํ„ฐ 4999๊นŒ์ง€์˜ ๊ฐ’์— ํ•ด๋‹นํ•˜๋Š” ๋ฌธ์„œ๊ฐ€ 3๊ฐœ ์žˆ์Šต๋‹ˆ๋‹ค.

  • 5000๋ถ€ํ„ฐ 7499๊นŒ์ง€์˜ ๊ฐ’์— ํ•ด๋‹นํ•˜๋Š” ๋ฌธ์„œ๊ฐ€ 0๊ฐœ ์žˆ์Šต๋‹ˆ๋‹ค.

  • 7500๋ถ€ํ„ฐ ๋๊นŒ์ง€์˜ ๊ฐ’์— ํ•ด๋‹นํ•˜๋Š” ๋ฌธ์„œ๊ฐ€ 3๊ฐœ ์žˆ์Šต๋‹ˆ๋‹ค.

2) ๋ฒ”์œ„ ๋ฒ„ํ‚ท(range buckets)

๋ฒ”์œ„ ๋ฒ„ํ‚ท์€ ์ง€์ •๋œ ํ•„๋“œ์˜ ๊ฐ’์„ ๋ฒ”์œ„๋กœ ๊ทธ๋ฃนํ™”ํ•˜์—ฌ ํ•ด๋‹น ๋ฒ”์œ„์— ์†ํ•˜๋Š” ๋ฌธ์„œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ง‘๊ณ„ํ•ฉ๋‹ˆ๋‹ค.

  • "field": "critical": critical ํ•„๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฒ”์œ„๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

  • "ranges": ๊ฐ ๋ฒ”์œ„๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋ฒ”์œ„๋Š” ์‹œ์ž‘๊ฐ’๊ณผ ๋๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

    • 0๋ถ€ํ„ฐ 60000 ์‚ฌ์ด
    • 60000 ์ด์ƒ 70000 ๋ฏธ๋งŒ ์‚ฌ์ด
    • 70000 ์ด์ƒ 80000 ๋ฏธ๋งŒ ์‚ฌ์ด
    • 80000 ์ด์ƒ 120000 ๋ฏธ๋งŒ ์‚ฌ์ด

์ฃผ์–ด์ง„ ๊ฒฐ๊ณผ๋Š” "critical_patients_as_range" ์ง‘๊ณ„์˜ ๊ฒฐ๊ณผ๋กœ ์ƒ์„ฑ๋œ ๋ฒ”์œ„ ๋ฒ„ํ‚ท์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๊ฐ ๋ฒ„ํ‚ท์€ "critical" ํ•„๋“œ์˜ ๊ฐ’์„ ํŠน์ • ๋ฒ”์œ„๋กœ ๋‚˜๋ˆ„์–ด์„œ ํ•ด๋‹น ๋ฒ”์œ„์— ์†ํ•˜๋Š” ๋ฌธ์„œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ง‘๊ณ„ํ•ฉ๋‹ˆ๋‹ค.

  • "key": ๋ฒ”์œ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค. ๋ฒ”์œ„๋Š” ์‹œ์ž‘๊ฐ’๊ณผ ๋๊ฐ’์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ฒซ ๋ฒˆ์งธ ๋ฒ„ํ‚ท์€ 0๋ถ€ํ„ฐ 60000๊นŒ์ง€์˜ ๋ฒ”์œ„๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

  • "from": ๋ฒ”์œ„์˜ ์‹œ์ž‘๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆซ์ž์ž…๋‹ˆ๋‹ค.

  • "to": ๋ฒ”์œ„์˜ ๋๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆซ์ž์ž…๋‹ˆ๋‹ค.

  • "doc_count": ํ•ด๋‹น ๋ฒ”์œ„์— ์†ํ•˜๋Š” ๋ฌธ์„œ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค

    • 0๋ถ€ํ„ฐ 60000๊นŒ์ง€์˜ ๋ฒ”์œ„์— ํ•ด๋‹นํ•˜๋Š” ๋ฌธ์„œ๊ฐ€ 10๊ฐœ ์žˆ์Šต๋‹ˆ๋‹ค.
    • 60000 ์ด์ƒ 70000 ๋ฏธ๋งŒ์˜ ๋ฒ”์œ„์— ํ•ด๋‹นํ•˜๋Š” ๋ฌธ์„œ๋Š” ์—†์Šต๋‹ˆ๋‹ค.
    • 70000 ์ด์ƒ 80000 ๋ฏธ๋งŒ์˜ ๋ฒ”์œ„์— ํ•ด๋‹นํ•˜๋Š” ๋ฌธ์„œ๋Š” ์—†์Šต๋‹ˆ๋‹ค.
    • 80000 ์ด์ƒ 120000 ๋ฏธ๋งŒ์˜ ๋ฒ”์œ„์— ํ•ด๋‹นํ•˜๋Š” ๋ฌธ์„œ๋Š” ์—†์Šต๋‹ˆ๋‹ค.



ELK๋ฅผ ํ†ตํ•œ ๋ณด์•ˆ ๊ด€์ œ

์„œ๋น„์Šค ํ™˜๊ฒฝ์—์„œ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ค์–‘ํ•œ ์†Œ์Šค์—์„œ ์ƒ์„ฑ๋˜๋ฉฐ, ์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ๋Š” ์ค‘์•™์ง‘์ค‘์‹ ๋กœ๊น… ํ”Œ๋žซํผ์„ ํ†ตํ•ด ์ˆ˜์ง‘, ์ €์žฅ, ๋ถ„์„๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ์œ ํ˜•์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

โ‘  ๋„คํŠธ์›Œํฌ ์ข…๋‹จ์— ์žˆ๋Š” ๊ธฐ๊ธฐ:

  • ์ค‘์š”ํ•œ ๋ฉ”ํŠธ๋ฆญ(์˜ˆ: ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ, ๋Œ€์—ญํญ ์‚ฌ์šฉ๋ฅ  ๋“ฑ)์„ ์ˆ˜์ง‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฉ”ํŠธ๋ฆญ์€ ๋„คํŠธ์›Œํฌ์˜ ์„ฑ๋Šฅ๊ณผ ๊ฐ€์šฉ์„ฑ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ๋ฌธ์ œ๋ฅผ ์‹ ์†ํ•˜๊ฒŒ ํŒŒ์•…ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

โ‘ก ํ”„๋ก ํŠธ์—”๋“œ, ๋ฐฑ์—”๋“œ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„ ๊ทธ๋ฃน:

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

โ‘ข ๊ณ ๊ฐ์ด ์‹คํ–‰ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜:

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


*) ๋กœ๊ทธ vs ๋ฉ”ํŠธ๋ฆญ

๋กœ๊ทธ(Logs):

  • ๋กœ๊ทธ๋Š” ์‹œ์Šคํ…œ ๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ƒ์„ฑํ•œ, ํŠน์ • ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ด๋ฒคํŠธ์—๋Š” ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€, ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€, ์ •๋ณด ๋ฉ”์‹œ์ง€, ๋””๋ฒ„๊ทธ ๋ฉ”์‹œ์ง€ ๋“ฑ์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋กœ๊ทธ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํ…์ŠคํŠธ ํ˜•์‹์œผ๋กœ ๊ธฐ๋ก๋˜๋ฉฐ, ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ์‹œ๊ฐ„, ์ด๋ฒคํŠธ ์œ ํ˜•, ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ์ƒ์„ธ ๋‚ด์šฉ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค

  • ์ฃผ์š” ์šฉ๋„๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ, ๋””๋ฒ„๊น…, ๊ฐ์‚ฌ ์ถ”์  ๋“ฑ์˜ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋ฉ”ํŠธ๋ฆญ(Metrics):

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

  • ๋ฉ”ํŠธ๋ฆญ์€ ์ˆซ์ž ํ˜•์‹์œผ๋กœ ๊ธฐ๋ก๋˜๋ฉฐ, ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ๋งˆ๋‹ค ์ธก์ •๋˜๊ณ  ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค.

  • ์ฃผ์š” ์šฉ๋„๋Š” ์‹œ์Šคํ…œ ๋ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง, ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ ์ถ”์ , ์šฉ๋Ÿ‰ ๊ณ„ํš ๋“ฑ์˜ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.


๋น„์ธ (beats) ์—์ด์ „ํŠธ - ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•ด ์ค‘์•™ ์ˆ˜์‹ ์ง€๋กœ ์ „์†ก

  • ๋น„์ธ (Beats)๋Š” Elastic Stack๊ณผ ํ†ตํ•ฉ๋˜์–ด ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘์„ ๋‹ด๋‹นํ•˜๋Š” ๊ฒฝ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘๊ธฐ์ž…๋‹ˆ๋‹ค.

  • Beats๋Š” ๋กœ๊ทธ, ๋ฉ”ํŠธ๋ฆญ, ์ด๋ฒคํŠธ ๋“ฑ ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜์—ฌ ์ค‘์•™ ์ง‘์ค‘์‹์œผ๋กœ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

โ‘  ํŒŒ์ผ๋น„ํŠธ(Filebeat)

  • ๋‹ค์–‘ํ•œ ์œ„์น˜์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์œ ํ˜•์˜ ์‹œ์Šคํ…œ๊ณผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘

    โ–ช ๋””์Šคํฌ์— ์žˆ๋Š” ํŒŒ์ผ
    โ–ช HTTP API ์—”๋“œํฌ์ธํŠธ
    โ–ช ์นดํ”„์นด, ์• ์ € ์ด๋ฒคํŠธ ์ˆ˜์ง‘๊ธฐ, GCP Pub/Sub ๊ฐ™์€ ๋ฉ”์‹œ์ง€ ์ŠคํŠธ๋ฆผ
    โ–ช Syslog ๋ฆฌ์Šค๋„ˆ

โ‘ก ๋งคํŠธ๋ฆญ๋น„ํŠธ(metricbeat)

  • ์ง€์›๋˜๋Š” ๋‹ค์–‘ํ•œ ์‹œ์Šคํ…œ๊ณผ ํ”„๋กœํ† ์ฝœ์—์„œ ์‹œ์Šคํ…œ๊ณผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, ํ”Œ๋žซํผ์˜ ๋งคํŠธ๋ฆญ์„ ์ˆ˜์ง‘

โ‘ข ์˜ค๋”ง๋น„ํ‹ฐ(auditbeat)

  • ๋ฆฌ๋ˆ…์Šค ๊ฐ์‚ฌ ์‹œ์Šคํ…œ(Linux Auditing System = auditd) ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ๊ทœ์ •ํ•œ ์šด์˜์ฒด์ œ ๊ฐ์‚ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘

โ‘ฃ ํ•˜ํŠธ๋น„ํŠธ(heartbeat)

  • ICMP, TCP, HTTP ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์„œ๋น„์Šค ๊ฐ€๋™ ์‹œ๊ฐ„๊ณผ ๊ฐ€์šฉ์„ฑ ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ๋ชจ๋‹ˆํ„ฐ๋ง

โ‘ค ํŒจํ‚ท๋น„ํŠธ(packetbeat)

  • ๋ถ„์„ ๋Œ€์ƒ ํ˜ธ์ŠคํŠธ์—์„œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋„คํŠธ์›Œํฌ ํŒจํ‚ท ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ๋ณตํ˜ธํ™”

โ‘ฅ ์œˆ๋กœ๊ทธ๋น„ํŠธ(winlogbeat)

  • ์œˆ๋„์šฐ ์‹œ์Šคํ…œ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘

โ‘ฆ ํŽ‘์…˜๋น„ํŠธ(functionbeat)

  • AWS Lambda ๋˜๋Š” Google Cloud Functions์™€ ๊ฐ™์€ ์„œ๋ฒ„๋ฆฌ์Šค ํ”Œ๋žซํผ์—์„œ ๊ธฐ๋Šฅ(function)์œผ๋กœ ๋ฐฐํฌํ•ด CloudWatch Logs, GCP Pub/Sub, AWS Kinesis ๊ฐ™์€ ํด๋ผ์šฐ๋“œ์šฉ ๋กœ๊ทธ ์†Œ์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•  ์ˆ˜ ์žˆ๋Š” ํŠน๋ณ„ํ•œ ๋น„ํŠธ

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