[🌎elasticsearch] Elasticsearch CRUD κΈ°λ³Έμ‚¬μš©λ²• (feat. Kibana)

Park Ji YoungΒ·2021λ…„ 1μ›” 13일
0

elasticsearch

λͺ©λ‘ 보기
3/8
post-thumbnail
post-custom-banner


ElasticSearch 의 κΈ°λ³Έ κΈ°λŠ₯ CRUD κΈ°λŠ₯을 ν•œλ²ˆ μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€!.

ElasticSearch 의 search 와 Bulk κΈ°λŠ₯은 이후 ν¬μŠ€νŠΈμ—μ„œ λ‹€λ£¨κ² μŠ΅λ‹ˆλ‹€.

πŸ‘“ CRUD λŠ” ??

  • Create
  • Read
  • Update
  • Delete

ElasticSearch μ—μ„œλŠ” REST APIs μ•ˆμ˜ Document APIs μ—μ„œ ν•΄λ‹Ή λ‚΄μš©μ„ 닀루고 μžˆμŠ΅λ‹ˆλ‹€.

πŸ”Ž λ“€μ–΄κ°€κΈ° 전에!!

  • Index

      ElasticSearch 의 Index λŠ” ν”νžˆ μ•„λŠ” λ°°μ—΄μ˜ μΈλ±μŠ€μ™€λŠ” λ‹€λ₯΄κ²Œ λ°μ΄ν„°λ² μ΄μŠ€μ˜ ν…Œμ΄λΈ”κ³Ό μœ μ‚¬ν•œ κ°œλ…μ„ 가지고 μžˆμŠ΅λ‹ˆλ‹€.
      같은 NoSQL MongoDB 의 Collector 와 λΉ„μŠ·ν•˜λ‹€κ³  μƒκ°ν•˜μ‹œλ©΄ νŽΈν•©λ‹ˆλ‹€.
  • HTTP ν”„λ‘œν† μ½œ

      ElasticSearch λŠ” http ν”„λ‘œν† μ½œλ‘œ μ ‘κ·Όμ œμ–΄κ°€ κ°€λŠ₯ν•©λ‹ˆλ‹€.
  • RESTFul

      PUT, POST, GET, DELETE λ©”μ†Œλ“œλ₯Ό 톡해 μžμ›μ„ μ œμ–΄ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

😎 Kibana Dev Tool

기본적으둜 λ¦¬λˆ…μŠ€μ˜ Curl κΈ°λŠ₯ λ˜λŠ” vscode 의 rest client λ“±μ˜ κΈ°λŠ₯κ³Ό 같이 URL을 μ΄μš©ν•΄ μžμ›μ— μ ‘κ·Όμ œμ–΄λ₯Ό ν•  μˆ˜λ„ μžˆμ§€λ§Œ μš°λ¦¬κ°€ μ €λ²ˆμ‹œκ°„μ— μ„€μΉ˜ν•œ Kibana 의 Dev Tool κΈ°λŠ₯을 톡해 Elastic ν™˜κ²½μ„ μ‹€μŠ΅ν•΄λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

μ •μƒμ μœΌλ‘œ Kibana κ°€ μ„€μΉ˜λ˜κ³  싀행이 되고 μžˆλ‹€λ©΄ http://localhost:5601 에 μ ‘μ†ν•˜λ©΄ Kibana μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ 메인화면이 기닀리고 μžˆμ–΄μš”!!

쒌츑 μƒλ‹¨μ˜ 메뉴 λ²„νŠΌμ„ λˆ„λ₯Έν›„ μ•„λž˜μͺ½μ˜ Dev Tools 둜 λ“€μ–΄κ°€μ€λ‹ˆλ‹€.




Dev Tools μ½˜μ†”μ—μ„œ μ’ŒμΈ‘μ—μ„œ Curl κ³Ό λΉ„μŠ·ν•œ κΈ°λŠ₯을 μˆ˜ν–‰ν•˜κ³  μš°μΈ‘μ—μ„œ κ·Έ κ²°κ³Όλ₯Ό λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ”¨ Create

일단 λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλ„ μžμ›μ„ μ €μž₯ν•˜κ³  μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œ ν…Œμ΄λΈ”μ„ λ§Œλ“€λ“―μ΄ ElasticSearch μ—μ„œλ„ 이에 ν•΄λ‹Ήν•˜λŠ” Index λ₯Ό μƒμ„±ν•΄μ€˜μ•Ό ν•©λ‹ˆλ‹€.

Index μƒμ„±μ—λŠ” PUT λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μš”μ²­μ„ ν•΄μ•Όν•©λ‹ˆλ‹€.

일반적으둜 μƒμ„±μ—λŠ” POST κ°±μ‹ μ—λŠ” PUT λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜μ§€λ§Œ ElasticSearch μ—μ„œλŠ” λ‘˜μ„ λͺ¨ν˜Έν•˜κ²Œ μ‚¬μš©ν•©λ‹ˆλ‹€.

mydoc μ΄λΌλŠ” Index λ₯Ό μƒμ„±ν•΄λ΄…μ‹œλ‹€.

     PUT mydoc

μœ„μ˜ ν…μŠ€νŠΈλ₯Ό Dev Tools μ½˜μ†” μ’ŒμΈ‘μ— μž…λ ₯ν›„ ν•΄λ‹Ή 쀄에 μƒκΈ°λŠ” β–Ά μ΄λ ‡κ²Œ 생긴 μ‚Όκ°ν˜• λ²„νŠΌμ„ λˆ„λ₯΄λ©΄ ν•΄λ‹Ήν•˜λŠ” μš”μ²­μ΄ μ „μ†‘λ©λ‹ˆλ‹€.

Dev Tools μ—μ„œλŠ” http://<호슀트>:<포트>/ κ°€ μƒλž΅λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
즉 μœ„μ˜ μš”μ²­μ€ μ›λž˜λŒ€λ‘œλΌλ©΄ PUT http://localhost:5601/mydoc μž…λ‹ˆλ‹€. Dev tools μ—μ„œλŠ” 이 사항이 λ™μΌμ‹œ μ μš©λ©λ‹ˆλ‹€.

λ°”λ‘œ μ•„λž˜ μ΄μ–΄μ„œ 첫 데이터λ₯Ό μƒμ„±ν•΄λ΄…μ‹œλ‹€.

    POST mydoc/_doc
    {
    "title" : "first Title",
    "contents" : "first contents"
    }

μš°μΈ‘μ— λ°”λ‘œ

μœ„μ™€ 같은 ν˜•μ‹μ˜ κ²°κ³Ό 데이터가 보인닀면 μ„±κ³΅μž…λ‹ˆλ‹€. μš°μΈ‘μƒλ‹¨μ— 201 status μ½”λ“œμ™€ ν•΄λ‹Ή μš”μ²­μ„ μˆ˜ν–‰ν•˜λŠ”λ° κ±Έλ¦° μ‹œκ°„ λ˜ν•œ ν‘œμ‹œκ°€ λ©λ‹ˆλ‹€.

μ €λŠ” second, third κ°€ λ“€μ–΄κ°€λŠ” 데이터λ₯Ό λ‘κ°œ 더 λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€.

POST <인덱슀>/_doc/<아이디> 처럼 아이디λ₯Ό λͺ…μ‹œν•˜μ§€ μ•ŠμœΌλ©΄ μž„μ˜λ‘œ 아이디λ₯Ό μƒμ„±ν•˜κ²Œ λ©λ‹ˆλ‹€.
ν•΄λ‹Ήν•˜λŠ” 아이디가 μ‘΄μž¬ν•  경우 생성이 μ•„λ‹ˆλΌ κ°±μ‹ μ„ν•˜κ²Œ λ˜λ―€λ‘œ 쑰심해야 ν•©λ‹ˆλ‹€.
λ˜ν•œ PUT λ©”μ†Œλ“œλ₯Ό 톡해 PUT <인덱슀>/_create/<아이디> 처럼 μƒμ„±λ§Œ κ°€λŠ₯ν•˜κ²Œλ„ ν•  수 μžˆμ”λ‹ˆλ‹€.

이제 확인을 ν•΄λ΄…μ‹œλ‹€. 😎😎

쒌츑 μƒλ‹¨μ˜ 메뉴 - ν•˜λ‹¨μ˜ Stack Management λ₯Ό ν΄λ¦­ν•©λ‹ˆλ‹€.

쒌츑 μ€‘κ°„μ¦ˆμŒ Kibana μΉ΄ν…Œκ³ λ¦¬ μ•„λž˜ Index Patterns λ₯Ό ν΄λ¦­ν•©λ‹ˆλ‹€.
μš°λ¦¬κ°€ λ³΄λ €λŠ” Index λ₯Ό λͺ…μ‹œν•˜κΈ° μœ„ν•΄ Create Index pattern 을 ν΄λ¦­ν•©λ‹ˆλ‹€.

Index pattern name 칸에 mydoc 을 μž…λ ₯ν•˜κ³  Next Step 을 ν΄λ¦­ν•©λ‹ˆλ‹€.

μš°λ¦¬κ°€ λ§Œλ“  λ°μ΄ν„°μ—λŠ” μ‹œκ°„ 데이터가 μ—†κΈ° λ•Œλ¬Έμ— 아무것도 μ„ νƒν•˜μ§€ μ•Šμ•„λ„ μƒμ„±λ©λ‹ˆλ‹€.
μ‹œκ°„ 데이터가 ν•œ 개 이상이라면 μ‹œκ°„λ³„λ‘œ 데이터λ₯Ό 좔적할 수 μžˆμŠ΅λ‹ˆλ‹€.
Create Index Pattern 을 ν΄λ¦­ν•©μ‹œλ‹€.

이제 쒌츑 메뉴λ₯Ό 클릭 메뉴 μƒλ‹¨μ˜ Kibana - Discover 탭을 μ„ νƒν•©λ‹ˆλ‹€.

μ—¬κΈ°μ„œ μš°λ¦¬κ°€ μœ„μ—μ„œ μž…λ ₯ν–ˆλ˜ Index 의 데이터듀이 λ‚˜νƒ€λ‚˜κ²Œ λ©λ‹ˆλ‹€.

데이터λ₯Ό μƒμ„±ν•˜λŠ” 것은 이제 λλ‚¬μŠ΅λ‹ˆλ‹€.

πŸ”¨ Read

Read λŠ” 맀우 λ‹¨μˆœν•©λ‹ˆλ‹€!

    GET mydoc/_doc/cdRVaXYBNC5Keng2JJce

μœ„μ™€ 같이 GET <인덱슀>/_doc/<아이디> ν˜•μ‹μœΌλ‘œ μš”μ²­μ„ ν•˜κ²Œ 되면 ν•΄λ‹Ήν•˜λŠ” 데이터가
κ²°κ³Όκ°’μœΌλ‘œ λ‚˜μ˜€κ²Œ λ©λ‹ˆλ‹€.!!

μš°ν•˜μš°ν•˜!μš°ν•˜!
μžλ£Œκ°€ μ—†μœΌλ©΄ not foundκ°€ 뜨게 λ©λ‹ˆλ‹€!! μ—¬κΈ°κΉŒμ§€ ν•˜λŠλΌ κ³ μƒλ§ŽμœΌμ…¨μŠ΅λ‹ˆλ‹€.
이제 μ–Όλ§ˆ μ•ˆλ‚¨μ•˜μœΌλ‹ˆ 영차영차! 😁😁😁😁

full-text-search κΈ°λŠ₯인 ν‚€μ›Œλ“œλ₯Ό 톡해 자료λ₯Ό μ°ΎλŠ” search κΈ°λŠ₯은 λ‹€μŒν¬μŠ€νŠΈμ—μ„œ λ‹€λ£¨κ² μŠ΅λ‹ˆλ‹€.!!

πŸ”¨ Update

μ΄λ²ˆμ—λŠ” Update κΈ°λŠ₯을 μˆ˜ν–‰ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

Update λŠ” PUT λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
second Title 자료의 idλ₯Ό λ³΅μ‚¬ν•˜μ—¬ λ‹€μŒκ³Ό 같은 ν˜•νƒœμ˜ μš”μ²­μ„ λ§Œλ“€μ–΄μ€λ‹ˆλ‹€.
ν•΄λ‹Ήν•˜λŠ” Id κ°€ μ‘΄μž¬ν•  경우 데이터 전체λ₯Ό μ—…λ°μ΄νŠΈν•˜κ²Œ λ©λ‹ˆλ‹€.

    PUT mydoc/_doc/ctRWaXYBNC5Keng2Dpfm
    {
    "title" : "updated second title",
    "contents" : "updated second contents"
    }

μ„±κ³΅ν•˜λ©΄ μ•„λž˜κ³Ό 같이 result 에 updated λΌλŠ” 결과값이 ν‘œμ‹œλ©λ‹ˆλ‹€.

Kibana 의 Discover 탭을 보게 되면

μš°ν•˜! ν–‰λ³΅ν•˜κ΅°μš” Update κ°€ μ„±κ³΅λœ 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.!!

πŸ”¨ Delete

λ§ˆμ§€λ§‰μž…λ‹ˆλ‹€.!! μ΄κ²ƒλ§Œ μ•Œλ©΄ CRUD κΈ°λŠ₯은 끝 μž…λ‹ˆλ‹€.

    DELETE mydoc/_doc/ctRWaXYBNC5Keng2Dpfm

λ°”λ‘œ μ‹€ν–‰!!

μ‚­μ œ κ²°κ³Ό 연산을 캑처 ν•˜λŠ” 것을 κΉœλΉ‘ν•΄μ„œ 데이터λ₯Ό ν•˜λ‚˜ 더 λ§Œλ“€κ³  λ‹€μ‹œ μ‚­μ œν•΄μ„œ 이전과 아이디가 λ‹€λ¦…λ‹ˆλ‹€. γ…œγ…œ

μœ„μ™€ 같이 result 의 κ°’μœΌλ‘œ deletedκ°€ 뜨면 성곡!!!!

μ—¬λŸ¬λΆ„ λ§Œλ‚¨μ΄ 있으면 끝도 μžˆλŠ”λ²•.

λ§ˆμ§€λ§‰μœΌλ‘œ Index λ‹˜μ„ μ‚­μ œ ν•΄λ“œλ¦½μ‹œλ‹€. μž˜κ°€ ... 😭😭😭😭

    DELETE mydoc

μ‚­μ œ... μš”μ²­...

성곡...

이후 Discover 탭에 μ–΄λ– ν•œ μžλ£Œλ„ μΆ”μ ν•˜μ§€ λͺ»ν•˜κ²Œλ˜μ—ˆμŠ΅λ‹ˆλ‹€.. 흐극

μ™€μš° 컀피 ν•œμž” ν•˜λ©΄μ„œ 같이 λ”°λΌν•΄λ³΄μ…¨λ‚˜μš”. 생각보닀 κ°„λ‹¨ν•©λ‹ˆλ‹€.
λ‹€μŒμ—λŠ” Search λ‹˜κ³Ό ν•¨κ»˜ 톡해 λ‹€μ‹œ μ°Ύμ•„μ˜€κ² μŠ΅λ‹ˆλ‹€.!!

더 λ§Žμ€ 자료 보러 κ³΅μ‹ν™ˆνŽ˜μ΄μ§€ κ°€κΈ°!!

profile
I am two cat's father
post-custom-banner

0개의 λŒ“κΈ€