Upgrade to PRO for Only $50/Yearโ€”Limited-Time Offer! ๐Ÿ”ฅ

Starting Graph-Database

Avatar for Buzzvil Buzzvil
September 01, 2021

Startingย Graph-Database

By Asher

Avatar for Buzzvil

Buzzvil

September 01, 2021
Tweet

More Decks by Buzzvil

Other Decks in Programming

Transcript

  1. ๋ชฉ์ฐจ 1. ๊ทธ๋ž˜ํ”„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐœ๋… 2. ๊ทธ๋ž˜ํ”„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŠน์ง• 3.

    ๊ทธ๋ž˜ํ”„ VS ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค 4. ๊ทธ๋ž˜ํ”„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์˜ˆ์‹œ 5. ๊ทธ๋ž˜ํ”„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์œ ์Šค์ผ€์ด์Šค
  2. KNOW LIKE LIKE LIKE LIKE FAMILY MARRIED ์žฅ๋ชจ๋‹˜ BUY BUY

    BUY ์ถ”์ฒœ ๊ทธ๋ž˜ํ”„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์˜ˆ์‹œ
  3. ๊ทธ๋ž˜ํ”„ ๋ž€? ๊ทธ๋ž˜ํ”„๋Š” ๊ฐœ๋ณ„ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ (Node or Vertex), ๊ฐ์ฒด

    ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ํ‘œ์‹œํ•˜๋Š” ์„  (Edge or Relationship)๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
  4. ๊ทธ๋ž˜ํ”„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŠน์ง• - ๊ตฌ์กฐ โ€œA database that uses graph

    structures for semantic queries with nodes, edges, and properties to represent and store dataโ€ -> ๊ทธ๋ž˜ํ”„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ํฌ๊ฒŒ ๋…ธ๋“œ์™€ ์—ฃ์ง€(๊ด€๊ณ„)๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋…ธ๋“œ์™€ ์—ฃ์ง€๋Š” ๊ฐ๊ฐ์˜ ๋ผ๋ฒจ ๋ฐ ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ–์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Name: โ€˜Asherโ€™ Age: โ€˜2xโ€™ Company:โ€™Buzzvil Lives:{โ€˜Ilsanโ€™} CO-Worker :KNOWS Name: โ€˜Zendyaโ€™ Age: โ€˜2xโ€™ Company:โ€™Buzzvil Hobbies:{โ€˜tennisโ€™} Name: โ€˜Jandyโ€™ Age: โ€˜4xโ€™ Company:โ€™Kakaoโ€™ Hobbies:{โ€˜codingโ€™} since:2020 team:CCO since:2020 university:d ongguk Person Person Person Node(Vertex) Label Edge Property ์ฐธ์กฐ https://www.youtube.com/watch?v=c21D8zHmk-E
  5. Name: โ€˜Asherโ€™ Age: โ€˜2xโ€™ Company:โ€™Buzzvil Lives:{โ€˜Ilsanโ€™} :KNOWS :KNOWS Name: โ€˜Zendyaโ€™

    Age: โ€˜2xโ€™ Company:โ€™Buzzvil Hobbies:{โ€˜tennisโ€™, cook} Name: โ€˜Jandyโ€™ Age: โ€˜4xโ€™ Company:โ€™Kakaoโ€™ Hobbies:{โ€˜codingโ€™, โ€˜swimโ€™} since:2020 team:CCO since:2020 university: dongguk Person Person Person - ๊ทธ๋ž˜ํ”„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” NOSQL์˜ ํ•œ ์ข…๋ฅ˜๋กœ์จ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ•œ๊ณ„๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž…๋‹ˆ๋‹ค. (์Šคํ‚ค๋งˆ, ๋Œ€๊ทœ๋ชจ ๋ถ„์‚ฐํ™˜๊ฒฝ) -> ๊ทธ๋ž˜ํ”„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” Nosql์˜ ํ•œ ์ข…๋ฅ˜๋กœ ๊ฐ™์€ Label์ผ ์ง€๋ผ๋„ ๋‹ค๋ฅธ Property ๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค. ๋‘˜๋‹ค Person์ด๋ผ๋Š” ๊ฐ™์€ ๋ผ๋ฒจ์„ ๊ฐ–๋Š” ๋…ธ๋“œ ์žˆ์ง€๋งŒ asher์˜ ๊ฒฝ์šฐ์—๋Š” ์‚ฌ๋Š”๊ณณ์ด ์žˆ๊ณ , zendya ์˜ ๊ฒฝ์šฐ์—๋Š” ์ทจ๋ฏธ๊ฐ€ ์žˆ์Œ ๋…ธ๋“œ ๋ฟ๋งŒ์•„๋‹ˆ๋ผ ์—ฃ์ง€๋„ ๊ฐ™์€ ๋ผ๋ฒจ์„ ๊ฐ–์œผ๋ฉด์„œ ๋‹ค๋ฅธ ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ–์„ ์ˆ˜ ์žˆ๋‹ค ๊ทธ๋ž˜ํ”„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŠน์ง• - ์Šคํ‚ค๋งˆ
  6. Graph Query Language (Cypher) Graph DB SQL MATCH SELECT CREATE

    INSERT SET UPDATE WHERE WHERE DELETE, REMOVE, DETACH DELETE
  7. Graph Query Language (Cypher) Node Edge ex) (p:Person{name:โ€™Asherโ€™,age:27})-[r:WORK_AT{since:2021}]->(c:Company{name:โ€™Buzzvilโ€™}) -> ๋‚˜์ด:27,

    ์ด๋ฆ„:์—์…” ์‚ฌ๋žŒ ๋…ธ๋“œ ๋ณ€์ˆ˜ p ์™€ ์ด๋ฆ„:๋ฒ„์ฆˆ๋นŒ์ธ ํšŒ์‚ฌ ๋…ธ๋“œ ๋ณ€์ˆ˜ c๊ฐ€ 2021๋…„๋ถ€ํ„ฐ ์ผํ–ˆ๋‹ค๋Š” ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•œ ์—ฃ์ง€ ๋ณ€์ˆ˜ r์— ์˜ํ•ด ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”๊ฒƒ์„ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ name:Asher age:27 name:Buzzvil Person Company WORK_AT
  8. CREATE (n:Person{name:'Messi'})-[:LIKE]-> (m:Sports{name:'Soccer'}) return n, m Result { "identity": 22,

    "labels": [ "Person" ], "properties": { "name": "Messi", } } Graph Query Language (Cypher)
  9. MATCH (person), (sport) WHERE person.name = 'Messi' AND sport.name =

    'Soccer' SET person += {age:34} CREATE (person)-[:Play_at]->(team:Team{name:'PSG'}) return person, sport, team Result { "identity": 22, "labels": [ "Person" ], "properties": { "name": "Messi", } } { "identity": 22, "labels": [ "Person" ], "properties": { "name": "Messi", "age": 34 } } Graph Query Language (Cypher)
  10. Graph DB vs RDB -Simple lookup (vs Join) - Complicate

    lookup -Unstructured data (Schema-less)
  11. Simple Lookup Asher ID:1 Jandy ID:2 :KNOWS ID Name 1

    Asher 2 Jandy person_id Relate_to 1 2 2 3 Relationship Person Q : Asher๊ฐ€ ์•Œ๊ณ ์žˆ๋Š” ์‚ฌ๋žŒ์˜ ์ˆ˜? // Asher์™€ KNOWS ๋กœ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ์˜ ์ˆ˜ MATCH (n:Person{name:'Asher'})-[:KNOWS]->(m) RETURN COUNT(m) // Asher์™€ KNOWS ๋กœ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ์˜ ์ˆ˜ SELECT COUNT(*) FROM Relationship R JOIN Person P on R.relate_to = P.ID where P.Name = โ€˜Asherโ€™ ; Foreign Key
  12. Complicated Lookup Asher Jandy :KNOWS Jack Joel :KNOWS More than

    n distance :KNOWS Q : Asher์™€ Joel์˜ ์—ฐ๊ฒฐ ๊ฒฝ๋กœ? Graph Database Query MATCH p=(start)-[*]->(finish) WHERE start.name='Asher' AND finish.name='Joel' RETURN p Structured Query Language WITH โ€ฆ. โ€ฆ. โ€ฆ.. โ€ฆ. โ€ฆ. ๋„ˆ๋ฌด ๋ณต์žกํ•ด์„œ ํฌ๊ธฐ~~~ ใ…Žใ…Ž ใ…  // ๊ฐ€์žฅ ๋น ๋ฅธ ๊ฒฝ๋กœ MATCH p=shortestPath(start)-[*]->(finish) WHERE start.name='Asher' AND finish.name='Joel' RETURN p
  13. Unstructured data Add new column Asher ID:1 Jandy ID:2 :KNOWS

    ID Name 1 Asher 2 Jandy Person_id Relate_to 1 2 2 3 Relationship Person Q : ์–ธ์ œ๋ถ€ํ„ฐ ์•Œ๊ณ ์ง€๋ƒˆ๋Š”์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค๋ฉด? // Asher์˜ KNOWS ์— since ํŒŒ๋ผ๋ฏธํ„ฐ ์ถ”๊ฐ€ MATCH (n:Person{name:'Asher'})-[r:KNOWS]->(m:Person{ name:'Jandy'}) SET r += {since:2020} return r // Relationship table ์— since column ์ถ”๊ฐ€ ALTER TABLE โ€˜Relationshipโ€™ ADD COLUMN โ€˜sinceโ€™ INT(10) DEFAULT NULL { "identity": 45, "start": 51, "end": 52, "type": "KNOWS", "properties": { "since": 2020 } } NEW !! Since 2020 NULL Foreign Key since:2020
  14. Unstructured data Add new columnS Jandy ID:2 ID Name 1

    Asher 2 Jandy Person_id Relate_to 1 2 2 3 Relationship Person Q : ์ทจ๋ฏธ, ์ข‹์•„ํ•˜๋Š” ์•„์ด๋Œ, ์šด๋™์„ ์ถ”๊ฐ€ํ•œ๋‹ค๋ฉด ?(๊ด€๊ณ„) // Asher์— HOBBY, LIKE, EXERCISE ๊ด€๊ณ„ ์ถ”๊ฐ€ MATCH (a) WHERE a.name='Asher' CREATE (a)-[r:HOBBY]->(b:Hobbies{name:'Cook'}) MATCH (a) WHERE a.name='Asher' CREATE (a)-[r:LIKE]->(b:Idol{name:'Twice'}) MATCH (a) WHERE a.name='Asher' CREATE (a)-[r:EXERCISE]->(b:Sports{name:'Swim'}) // Asher์— HOBBY, LIKE, EXERCISE ๊ด€๊ณ„ ์ถ”๊ฐ€ NEW !! Asher ID:1 Cook ID:3 Swim ID:4 Twice ID:5 :KNOWS :LIKE :EXERCISE :HOBBY Persion_Id Name 1 Cook 2 Book HOBBY Persion_Id Name 1 Twice 2 Black Pink LIKE Persion_Id Name 1 Swim 2 Running EXERCISE NEW !! NEW !! Foreign Key
  15. Graph DB ์‘์šฉ Jack Joel Natasha ๊ฒŒ์ž„: ๋กค Wonda Dorothy

    Irene Girl Friend Know Know Know LIKE LIKE ๊ฒŒ์ž„: ๋ฐฐ๊ทธ LIKE LIKE LIKE Joel ์š”์ฆ˜ ์™ธ๋กœ์šด๋ฐ ์†Œ๊ฐœํŒ…์ข€ ์‹œ์ผœ์ค˜์š”~~! ๋ฌผ๋ก ์ด์ฃ  Jack, ์ด์ƒํ˜•์ด ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”? ์ €๋Š” ๊ฒŒ์ž„ ์ข‹์•„ํ•˜๊ณ  ํŠนํžˆ ๋กค!, ๊ทธ๋ฆฌ๊ณ  ์„œ์šธ์— ์‚ด์•˜์œผ๋ฉด ์ข‹๊ฒ ์–ด์š” ์ œ ์ฃผ๋ณ€๊ณผ ์—ฌ์ž์นœ๊ตฌ ์ง€์ธ์ค‘์— ์ฐพ์•„๋ณผ๊ฒŒ์š”!
  16. MATCH (jack:Person{name:'Jack'})-[:LIKE]->(jack_hobby:Hobby) MATCH (joel:Person{name:'Joel'})-[:KNOW*1]->(joel_friends)-[:LIKE]->(friends_hobby) WHERE jack.live = joel_friends.live AND jack_hobby

    = friends_hobby return COUNT(joel_friends) MATCH (jack:Person{name:'Jack'})-[:LIKE]->(jack_hobby:Hobby) MATCH (joel:Person{name:'Joel'})-[:Girl_Friend]->(joel_girl_friend)-[:KNOW*1]->(joel_girl_friend_friends)-[:LIKE]->(friends_hobby) WHERE jack.live = joel_girl_friend_friends.live AND jack_hobby = friends_hobby return COUNT(joel_girl_friend_friends), joel_girl_friend_friends.name
  17. Study Match with Graph DB -์œ ์ € ์ƒ์„ฑ -์›ํ•˜๋Š” ์Šคํ„ฐ๋”” ๋งค์นญ

    ์š”์ฒญ -์Šคํ„ฐ๋”” ๋งค์นญ ์กฐ๊ฑด์ด ๋งŒ์กฑ๋˜๋ฉด ์Šคํ„ฐ๋”” ๊ทธ๋ฃน ์ƒ์„ฑ + (์ด์ „ ์š”์ฒญ ์‚ญ์ œ) -> ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ๋กœ๋งŒ ์ž‘์„ฑ
  18. Study Match with Graph DB CREATE_USER { "identity": 76, "labels":

    [ "User" ], "properties": { "name": "Asher" } }
  19. Graph DB Usecase https://aws.amazon.com/neptune/ ์ง€์‹ ๊ทธ๋ž˜ํ”„ ์†Œ์…œ ๋„คํŠธ์›Œํ‚น ์ถ”์ฒœ ์—”์ง„

    ๊ณ ๊ฐ ๊ด€์‹ฌ์‚ฌ, ์นœ๊ตฌ, ๊ตฌ๋งค ์ด๋ ฅ๊ณผ ๊ฐ™์€ ์ •๋ณด ๊ฐ„ ๊ด€๊ณ„๋ฅผ ๊ทธ๋ž˜ํ”„๋กœ ์ €์žฅํ•˜๊ณ  ์‹ ์†ํ•˜๊ฒŒ ์ฟผ๋ฆฌํ•˜์—ฌ ๊ฐœ์ธํ™”๋˜๊ณ  ์—ฐ๊ด€์„ฑ์ด ๋†’์€ ์ถ”์ฒœ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค, ์˜ˆ๋ฅผ ๋“ค๋ฉด ๊ทธ๋ž˜ํ”„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ด ์‚ฌ์šฉ์ž์™€ ๊ฐ™์€ ์Šคํฌ์ธ ๋ฅผ ์ข‹์•„ํ•˜๊ณ  ๋น„์Šทํ•œ ๊ตฌ๋งค ์ด๋ ฅ์ด ์žˆ๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๊ตฌ๋งคํ•œ ์ œํ’ˆ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œํ’ˆ์„ ์ถ”์ฒœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๊ทœ๋ชจ ์‚ฌ์šฉ์ž ํ”„๋กœํ•„ ๋ฐ ์ƒํ˜ธ ์ž‘์šฉ ์„ธํŠธ๋ฅผ ์†์‰ฝ๊ฒŒ ์‹ ์†ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜์—ฌ ์†Œ์…œ ๋„คํŠธ์›Œํ‚น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์†Œ์…œ ํ”ผ๋“œ๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, ๊ทธ๋ž˜ํ”„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ด ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฐ€์กฑ, '์ข‹์•„์š”'๋ฅผ ๋ˆ„๋ฅธ ์นœ๊ตฌ ๋ฐ ๊ทผ์ฒ˜์— ์‚ฌ๋Š” ์นœ๊ตฌ์˜ ์ตœ์‹  ๋ฐ์ดํ„ฐ๋ฅผ ์šฐ์„ ์ ์œผ๋กœ ๋ณด์—ฌ์ฃผ๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€์‹ ๊ทธ๋ž˜ํ”„๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ •๋ณด๋ฅผ ๊ทธ๋ž˜ํ”„ ๋ชจ๋ธ์— ์ €์žฅํ•˜๊ณ  ๊ทธ๋ž˜ํ”„ ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ์ƒํ˜ธ์—ฐ๊ฒฐ์„ฑ์ด ๋†’์€ ๋ฐ์ดํ„ฐ ์„ธํŠธ๋ฅผ ์†์‰ฝ๊ฒŒ ํƒ์ƒ‰ํ•˜๋„๋ก ์ง€์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์‚ฌ์šฉ์ž๊ฐ€ ๋ชจ๋‚˜๋ฆฌ์ž์— ๊ด€์‹ฌ์ด ์žˆ๋Š” ๊ฒฝ์šฐ, ๋ ˆ์˜ค๋‚˜๋ฅด๋„ ๋‹ค๋นˆ์น˜์˜ ๋‹ค๋ฅธ ์ž‘ํ’ˆ ๋˜๋Š” ๋ฃจ๋ธŒ๋ฅด ๋ฐ•๋ฌผ๊ด€์— ์žˆ๋Š” ๋‹ค๋ฅธ ์ž‘ํ’ˆ์„ ์ฐพ๋„๋ก ์ง€์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€์‹ ๊ทธ๋ž˜ํ”„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ œํ’ˆ ์นดํƒˆ๋กœ๊ทธ์— ์ฃผ์ œ๋ณ„ ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜, ๋ณต์žกํ•œ ๋ฒ•๊ทœ ๋ชจ๋ธ์„ ๋นŒ๋“œํ•˜๊ณ  ์ฟผ๋ฆฌํ•˜๊ฑฐ๋‚˜, Wikidata ๊ฐ™์€ ์ผ๋ฐ˜ ์ •๋ณด๋ฅผ ๋ชจ๋ธ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  20. Q : ๊ทธ๋ž˜ํ”„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋˜๋Š” ๊ฒฝ์šฐ๋Š” ์–ธ์ œ์ธ๊ฐ€์š”? A -

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