๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๊ฐœ๋ฐœ/๋Ÿฐ์„ธ๊ถŒ

๊ธธ์ฐพ๊ธฐ, ๊ฒฝ๋กœ ๋ณด์ •์˜ ํ•ต์‹ฌ OSRM ํ†บ์•„๋ณด๊ธฐ

OSRM์ด๋ž€

osrm-backend

์˜คํ”ˆ ์†Œ์Šค ๋ผ์šฐํŒ… ๋จธ์‹ ์˜ ์•ฝ์ž๋กœ OpenStreetMap(OSM) ๋ฐ์ดํ„ฐ๋ฅผ ํ™œ์šฉํ•ด์„œ ๊ฒฝ๋กœ๋ฅผ ์ฐพ์•„์ฃผ๋Š” ๋ผ์šฐํŒ… ์—”์ง„์ด๋‹ค.

 

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

 

์šฐ์•„ํ•œํ˜•์ œ๋“ค, ๋„ค์ด๋ฒ„ ๋“ฑ ๋น…ํ…Œํฌ ๊ธฐ์—…์—์„œ๋„ ํ•ด๋‹น ์—”์ง„์„ ํ™œ์šฉํ• ๋งŒํผ ๋Œ€์ค‘์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์œผ๋ฉฐ, ์˜คํ”ˆ ์†Œ์Šค์ธ๋งŒํผ ๋ฌด๋ฃŒ์ด๊ณ  ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์ด ์ž์œ ๋กญ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. ๋˜ํ•œ, C++์ด๊ธฐ์— ๊ต‰์žฅํžˆ ๋น ๋ฅธ ์†๋„๋กœ ๊ฒฝ๋กœ ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

Valhalla๋‚˜ GraphHopper ๊ฐ™์€ ๋Œ€์ฒด์ œ๊ฐ€ ์กด์žฌํ•˜์ง€๋งŒ OSRM์ด ํ•œ๊ตญ ๋‚ด์—์„œ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ๋งŽ๊ณ , ๋ฌธ์„œํ™”๋„ ์ž˜ ๋˜์–ด์žˆ๋‹ค.

 

Contraction Hierarchies

OSRM์ด ๋น ๋ฅธ ์ด์œ ๋Š” C++์ธ ๊ฒƒ๋„ ์žˆ์ง€๋งŒ, ๊ฐ€์žฅ ํฐ ํ•ต์‹ฌ์€ Contraction Hierarchies(CH) ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์ต์ŠคํŠธ๋ผ๋Š” ๋ชจ๋“  ๋…ธ๋“œ์— ๋Œ€ํ•ด์„œ ํƒ์ƒ‰ํ•˜์ง€๋งŒ, ํ•ด๋‹น ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋„๋กœ๋ง์„ ๊ณ„์ธต์ ์œผ๋กœ ๊ตฌ์กฐํ™”ํ•˜์—ฌ ์ค‘์š”ํ•œ ๊ฐ„์„ ๋„๋กœ๋ฅผ ์šฐ์„  ํƒ์ƒ‰ํ•œ๋‹ค.

 

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

 

์ด๋Ÿฌํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ™œ์šฉํ•˜๋ ค๋ฉด OSM ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋Œ€๋กœ ํ™œ์šฉํ•  ์ˆœ ์—†๊ณ , ๋ฐ˜๋“œ์‹œ ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ ๊ณผ์ •์„ ๊ฑฐ์ณ์•ผ ํ•œ๋‹ค.

 

๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ

์ „์ฒ˜๋ฆฌ ๊ณผ์ •์€ ๋‹ค์Œ 3๊ฐ€์ง€๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.

  1. osrm-extract: OSM PBF ํŒŒ์ผ์—์„œ ๋„๋กœ ๋„คํŠธ์›Œํฌ๋งŒ ์ถ”์ถœ
  2. osrm-contract: Contraction Hierarchies ๊ทธ๋ž˜ํ”„๋กœ ๋ณ€ํ™˜
  3. osrm-routed: ์ „์ฒ˜๋ฆฌ๋œ ๋ฐ์ดํ„ฐ๋กœ ์„œ๋ฒ„ ์‹คํ–‰

์ด ๊ณผ์ •์ด ํ•„์š”ํ•œ ์ด์œ ๋Š” OSM ๋ฐ์ดํ„ฐ ์›๋ณธ์ด ์ˆ˜์‹ญ GB์— ํ•ด๋‹นํ•˜๊ธฐ์— ๋งค๋ฒˆ ์š”์ฒญ ์‹œ๋งˆ๋‹ค ์ „์ฒ˜๋ฆฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ „์ฒ˜๋ฆฌ ๊ณผ์ •์„ ํ†ตํ•ด ์ตœ์ ํ™”๋œ ๊ทธ๋ž˜ํ”„๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ๋ฏธ๋ฆฌ ์˜ฌ๋ ค๋‘๋ฉด ๋™์ผํ•œ ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ ๋ฐ€๋ฆฌ์ดˆ ์•ˆ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

OSRM Service API

OSRM์—์„œ๋Š” ์ตœ์  ๊ฒฝ๋กœ ๊ณ„์‚ฐ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ RESTful API๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค. ์š”์ฒญ ์‹œ profile์„ ์ง€์ •ํ•˜์—ฌ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š”๋ฐ, ๊ฐ๊ฐ์€ foot, car, bike๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค. ์ด๋ฆ„์—์„œ ๋ณด์ด๋“ฏ์ด ๋„๋ณด์™€ ์ฐจ๋Ÿ‰ ๊ทธ๋ฆฌ๊ณ  ์ž์ „๊ฑฐ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋„๋กœ์— ๋งž๊ฒŒ ์‘๋‹ตํ•ด์ค€๋‹ค.

 

๋Ÿฐ์„ธ๊ถŒ์—์„œ๋Š” ์ฃผ๋กœ ๋‘ ๊ฐœ์˜ API๋ฅผ ํ™œ์šฉํ•˜๊ณ  ์žˆ๋‹ค.


1. Route API
๋‘ ์ง€์  ๊ฐ„์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ํ•ต์‹ฌ API์ด๋‹ค.

GET /route/v1/{profile}/{coordinates}

ex. GET /route/v1/foot/127.0276,37.4979;127.0476,37.5139

 

์œ„์™€ ๊ฐ™์ด OSRM๋ฅผ ๋„์šด ์„œ๋ฒ„์— ์š”์ฒญํ•˜๋ฉด, ์ตœ์  ๊ฒฝ๋กœ๋ฅผ ๊ณ„์‚ฐํ•ด์ค€๋‹ค. ์ตœ์  ๊ฒฝ๋กœ ๊ณ„์‚ฐ์€ ์•ž์„œ ์–˜๊ธฐํ•œ Contraction Hierarchies ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ™œ์šฉํ•œ๋‹ค.

 

ํ•ด๋‹น API๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋™์ž‘ํ•œ๋‹ค.

  1. ์ž…๋ ฅ๋ฐ›์€ ์ขŒํ‘œ๋ฅผ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋„๋กœ๋กœ ์ด๋™
  2. ์ถœ๋ฐœ์ง€, ๋„์ฐฉ์ง€ ๋…ธ๋“œ๋ฅผ ์ „์ฒ˜๋ฆฌ๋œ CH ๊ทธ๋ž˜ํ”„์—์„œ ์ฐพ๋Š”๋‹ค.
  3. ์ถœ๋ฐœ์ง€์—์„œ ๋„์ฐฉ์ง€๋กœ, ๋„์ฐฉ์ง€์—์„œ ์ถœ๋ฐœ์ง€๋กœ ๋™์‹œ์— ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•œ๋‹ค.
  4. ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ผ ์ƒ์œ„ ๊ณ„์ธต(๊ณ ์†๋„๋กœ ๋“ฑ)์œผ๋กœ ๋น ๋ฅด๊ฒŒ ์ด๋™ํ•œ๋‹ค.
  5. ๋‘ ํƒ์ƒ‰์ด ๋งŒ๋‚˜๋Š” ์ง€์ ์—์„œ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ํ™•์ •ํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ ๊ณ„์ธต ๊ตฌ์กฐ๋ผ๋Š” ๋ง์ด ์ž˜ ์ดํ•ด๊ฐ€ ๋˜์ง€์•Š์•„ ๋” ์ฐพ์•„๋ณด์•˜๋‹ค.


์ด์ „์— ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ ๊ณผ์ •์—์„œ ๊ฐ ๋„๋กœ ๋…ธ๋“œ๋Š” ๋ ˆ๋ฒจ์„ ๊ฐ€์ง„๋‹ค. ์ด๋Š” '์ถ•์•ฝ' ๊ณผ์ •์—์„œ ๋ถ€์—ฌ๋˜๋Š” ๊ฒƒ์ธ๋ฐ, ๋ณดํ†ต ๊ณจ๋ชฉ๊ธธ -> ์ง€๋ฐฉ๋„๋กœ -> ๊ตญ๋„ -> ๊ณ ์†๋„๋กœ ์ˆœ์œผ๋กœ ๋†’์€ ๋ ˆ๋ฒจ์„ ๊ฐ–๊ฒŒ๋œ๋‹ค.

 

์ถ•์•ฝ์ด๋ž€, ๊ฐ ๋…ธ๋“œ์˜ Edge Difference๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ๊ฐ€์žฅ ์ž‘์€ ๋…ธ๋“œ๋ถ€ํ„ฐ ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ์ง€๋‚˜๋Š” ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ shortcut์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ณผ์ •์ด๋‹ค. Edge Difference๋Š” ํŠน์ • ๋…ธ๋“œ๋ฅผ ์ถ•์•ฝํ–ˆ์„ ๋•Œ ์ƒ๊ธฐ๋Š” shortcut ๊ฐœ์ˆ˜ - ์ œ๊ฑฐ๋  edge ๊ฐœ์ˆ˜์ด๋ฉฐ ์ด ๊ฐ’์ด ์ž‘์„์ˆ˜๋ก ๊ทธ๋ž˜ํ”„๊ฐ€ ๋‹จ์ˆœํ•ด์ง„๋‹ค. ์ฆ‰, ๋จผ์ € ์ถ•์•ฝ๋œ๋‹ค.

    2km        2km 
A -------- B -------- C
\                    / 
 \------ 5km -------/

์ด์ฒ˜๋Ÿผ A -> C๋กœ ๊ฐ€๋Š” ๋ฐฉ๋ฒ•์ด B๋ฅผ ๊ฑฐ์ณ๊ฐ€๋Š” ๋ฐฉ๋ฒ•๊ณผ ์ง์ ‘ ๊ฐ€๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค๊ณ  ํ•  ๋•Œ B๋ฅผ ๊ฑฐ์ณ๊ฐ€๋Š” ๋ฐฉ๋ฒ•์ด 4km๋กœ ๋” ์งง๋‹ค. ๋”ฐ๋ผ์„œ B๋ฅผ ์ถ•์•ฝํ•  ๋•Œ B๋ฅผ ๊ฑฐ์น˜๋Š” ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๋ณด์กดํ•˜๊ธฐ ์œ„ํ•ด A->C shortcut์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

    2km        2km 
A -------- B -------- C
\                    / 
 \------ 5km -------/
  \----- 4km ------/

์œ„์˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ๋งŒ๋“ค์–ด ๋‘๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋Ÿฐ์‹์œผ๋กœ ๋ชจ๋“  ๋…ธ๋“œ๋“ค์„ ์ถ•์•ฝํ•˜์—ฌ ์ค‘์š”ํ•œ ๊ฒฝ๋กœ๋“ค์„ shortcut์œผ๋กœ ์ €์žฅํ•ด๋‘๊ณ  ๋‚˜์ค‘์— ๊ฒฝ๋กœ ๊ณ„์‚ฐ์— ์ด์šฉํ•œ๋‹ค.

 

ํ”„๋กœ์ ํŠธ์—์„œ๋„ ํ•ด๋‹น Service API๋ฅผ ํ™œ์šฉํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ์‚ฌ์šฉ์ž์˜ ์œ„์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋Ÿฌ๋‹ ์ฝ”์Šค์™€ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ ์„ ์ฐพ์•„ ์ตœ์  ๊ฒฝ๋กœ๋กœ ๊ธธ์ฐพ๊ธฐ๋ฅผ ์ œ๊ณตํ•ด์ฃผ๊ณ  ์žˆ๋‹ค.

 

2. Match API

GPS ๊ถค์  ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์ œ ๋„๋กœ์— ๋งค์นญ์‹œํ‚ค๋Š” API์ด๋‹ค. ๊ฐ ์ขŒํ‘œ์™€ ์ •๋ฐ€๋„๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ๊ฐ€์žฅ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€ ๊ฒฝ๋กœ๋ฅผ ์ฐพ์•„ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค.

GET /match/v1/{profile}/{coordinates}?timestamps={timestamps}

ex. GET /match/v1/foot/127.027,37.497;127.028,37.498;127.029,37.499 ?timestamps=1701234567;1701234577;1701234587 &overview=full&geometries=geojson

ํ•ด๋‹น API์˜ ํ•ต์‹ฌ ๋กœ์ง์€ '์€๋‹‰ ๋งˆ๋ฅด์ฝ”ํ”„ ๋ชจ๋ธ(Hidden Markov Model/HMM)'์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ Viterbi ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•ด ๊ตฌํ˜„๋œ๋‹ค. ํ•ด๋‹น ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋™์ž‘์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ด๋ค„์ง„๋‹ค.

  1. ๊ฐ GPS ์ขŒํ‘œ๋งˆ๋‹ค ๋ฐ˜๊ฒฝ ๋‚ด์˜ ๊ฐ€๋Šฅํ•œ ๋„๋กœ ์ง€์ ๋“ค(ํ›„๋ณด)์„ ์ฐพ๋Š”๋‹ค.
  2. ๊ฐ ํ›„๋ณด์— ๋Œ€ํ•ด ๋ฐฉ์ถœ ํ™•๋ฅ ๊ณผ ์ „์ด ํ™•๋ฅ ์„ ๊ณ„์‚ฐํ•œ๋‹ค.
  3. Viterbi ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๊ฐ€์žฅ ํ™•๋ฅ ์ด ๋†’์€ ๊ฒฝ๋กœ๋ฅผ ์„ ํƒํ•œ๋‹ค.

๊ตฌ์ฒด์ ์œผ๋กœ '์€๋‹‰ ๋งˆ๋ฅด์ฝ”ํ”„ ๋ชจ๋ธ'์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

์‹ค์ œ ๋„๋กœ: Road1 -------- Road2 -------- Road3 
          |               |             | 
        GPS1            GPS2           GPS3 
       (๊ด€์ธก๊ฐ’)          (๊ด€์ธก๊ฐ’)         (๊ด€์ธก๊ฐ’) 

GPS1์€ Road1 ๊ทผ์ฒ˜์—์„œ ์ธก์ • GPS2๋Š” Road2์—์„œ ๋ฉ€๋ฆฌ ํА GPS3์€ Road3 ๊ทผ์ฒ˜์—์„œ ์ธก์ • 

๋ฌธ์ œ: GPS2๊ฐ€ ์‹ค์ œ๋กœ๋Š” ์–ด๋А ๋„๋กœ์— ์žˆ์—ˆ์„๊นŒ?

์ฆ‰, ๊ด€์ธก๊ฐ’์„ ๋ณด๊ณ  ๊ฐ€์žฅ ๊ฐ€๋Šฅ์„ฑ ๋†’์€ ์ˆจ๊ฒจ์ง„ ์ƒํƒœ(์‹ค์ œ ์žˆ์—ˆ๋˜ ๋„๋กœ ์œ„์น˜)๋ฅผ ์ฐพ๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋Š” ํ™•๋ฅ ๋กœ ๊ธฐ๋ฐ˜ํ•˜์—ฌ ์ฐพ๋Š”๋‹ค.

 

  • ๋ฐฉ์ถœ ํ™•๋ฅ  (Emission Probability)

ํŠน์ • ๋„๋กœ ์œ„์— ํŠน์ • ์ขŒํ‘œ๊ฐ€ ๋ฐœ๊ฒฌ๋  ํ™•๋ฅ ์ด๋‹ค.

 

๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๋ฉด ์ˆ˜ํ•™์  ๊ณ„์‚ฐ์„ ํ†ตํ•ด ํ™•๋ฅ ์„ ๊ตฌํ•˜๊ณ , ์ด ๊ฐ’์ด ํด์ˆ˜๋ก ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค๊ณ  ํŒ๋‹จํ•œ๋‹ค. ์˜ํ–ฅ์„ ์ฃผ๋Š” ๋ณ€์ˆ˜๋กœ๋Š” GPS ์ขŒํ‘œ์˜ ์ •ํ™•๋„์™€ ๋„๋กœ์™€ ์ขŒํ‘œ ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๊ฐ€ ์žˆ๋‹ค.

 

  • ์ „์ด ํ™•๋ฅ  (Transition Probability)

์ด๋Š” ์ด์ „ ๋„๋กœ ์ง€์ ์—์„œ ํ˜„์žฌ ๋„๋กœ ์ง€์ ์œผ๋กœ ์ด๋™ํ–ˆ์„ ํ™•๋ฅ ์„ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

์‹ค์ œ ๋„๋กœ๋ฅผ ๋”ฐ๋ผ ์ด๋™ํ•œ ๊ฑฐ๋ฆฌ์™€ ์ฃผ์–ด์ง„ ์ขŒํ‘œ ๊ฐ„ ์ง์„  ๊ฑฐ๋ฆฌ๋ฅผ ๋น„๊ตํ•œ๋‹ค. ๋‘ ๊ฐ’์˜ ์ฐจ์ด๊ฐ€ ์ž‘์„์ˆ˜๋ก ๋†’์€ ํ™•๋ฅ ์„ ๊ฐ€์ง„๋‹ค.

 

ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ํ•ด๋‹น API๋ฅผ ์ด์šฉํ•ด ๋„๋กœ์— ์ •ํ™•ํ•˜๊ฒŒ ๋งคํ•‘๋˜์ง€ ์•Š์€ ๋Ÿฌ๋‹ ์ฝ”์Šค ์ขŒํ‘œ๋“ค์„ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.