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

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

OSRM Match API๋กœ ๋Ÿฌ๋‹ ์ฝ”์Šค ๋ฐ์ดํ„ฐ ์ขŒํ‘œ ๋ณด์ •ํ•˜๊ธฐ

ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐ์— ๋Ÿฌ๋‹ ์ฝ”์Šค ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๋Š” ๊ณผ์ •์—์„œ ๊ตฌ๊ธ€ ์–ด์Šค๋ฅผ ์ด์šฉํ–ˆ๋‹ค. ํ•ด๋‹น ๋ฐฉ๋ฒ•์€ ์ง์ ‘ ์ขŒํ‘œ๋ฅผ ์ฐ์–ด๊ฐ€๋ฉฐ, ํ•ด๋‹น ์ขŒํ‘œ๋“ค์„ ๋ชจ์•„ kml ํŒŒ์ผ๋กœ ์ถ”์ถœํ•˜์—ฌ ๋Ÿฌ๋‹ ์ฝ”์Šค ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์ด์—ˆ๋‹ค.


ํ•˜์ง€๋งŒ ํ•ด๋‹น ๋ฐฉ์‹์€ ๊ฒฝ๋กœ๋ฅผ ๊ฐ ์ขŒํ‘œ๋งˆ๋‹ค ์ง์„ ์œผ๋กœ๋งŒ ์ด์–ด์ฃผ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ง์„ ์ด ๋งŽ์ง€ ์•Š์€ ์‹ค์ œ ๋„๋กœ์—์„œ๋Š” ์‚ฌ์šฉํ•˜๊ธฐ ์–ด๋ ค์› ๋‹ค. ๋˜ํ•œ, ๊ณก์„ ์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๋“ค์—ฌ์•ผ ํ•˜๋Š” ์—๋„ˆ์ง€๊ฐ€ ๋งŽ์ด ์†Œ๋ชจ๋๋‹ค.


๊ทธ๋ž˜์„œ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์ฐพ์•˜๊ณ , ์ด๋Š” ๋‹ค๋ฅธ ์™ธ๋ถ€ ์„œ๋น„์Šค (์ŠคํŠธ๋ผ๋ฐ”, ๊ฐ€๋ฏผ ๋“ฑ)์„ ์ด์šฉํ•˜๊ฑฐ๋‚˜ ๋ธ”๋กœ๊ทธ, ์™ธ๋ถ€ ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ์ฐพ์œผ๋ฉฐ ์‹ค์ œ ๋Ÿฌ๋‹์„ ๋›ด ์‚ฌ๋žŒ๋“ค์˜ ๊ธฐ๋ก์„ gpx ํŒŒ์ผ๋กœ ์ถ”์ถœํ•˜์—ฌ ์‚ฝ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด์—ˆ๋‹ค.


์ด ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด ๊ธฐ์กด kml ํŒŒ์ผ๋ณด๋‹ค ํ’ˆ์งˆ์ด ์ข‹์€ ๋Ÿฌ๋‹ ์ฝ”์Šค ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ•ด๋‹น ๋ฐฉ์‹์€ ์ธก์ •ํ•˜๋Š” ์‚ฌ๋žŒ์˜ ๊ธฐ๊ธฐ์— ๋”ฐ๋ผ ์ธก์ • ์„ฑ๋Šฅ์ด ์ฐจ์ด๋‚˜๋Š” ์น˜๋ช…์ ์ธ ๋ฌธ์ œ๊ฐ€ ์กด์žฌํ–ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ธก์ • ๊ธฐ๊ธฐ ๊ฐ„์˜ ๋Ÿฌ๋‹ ์ฝ”์Šค ์ •ํ™•๋„๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ํ•ด๊ฒฐํ•ด์•ผ ํ–ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ฒ˜์Œ์—๋Š” ํŒ€์›๋“ค๊ณผ ๋‹ค ๊ฐ™์ด '์ˆ˜๋™'์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ–ˆ๋‹ค. ์–ด๋“œ๋ฏผ ํŽ˜์ด์ง€๋ฅผ ๊ตฌ์„ฑํ•˜์˜€๊ณ , ๊ฐ ๋Ÿฌ๋‹ ์ฝ”์Šค๋“ค์˜ ํŠ€๋Š” ์ขŒํ‘œ๋“ค์„ ๋ฆฌ์ŠคํŠธ์—… ํ•˜๋ฉฐ ์ง์ ‘ ์ˆ˜์ •ํ–ˆ์—ˆ๋‹ค.


ํ•˜์ง€๋งŒ, ๋Ÿฌ๋‹ ์ฝ”์Šค๋งˆ๋‹ค ์ ์–ด๋„ ์•ฝ 300๊ฐœ ์ด์ƒ์˜ ์ขŒํ‘œ๊ฐ€ ์กด์žฌํ–ˆ๊ณ , ๋งŽ์œผ๋ฉด 5๋งŒ ๊ฐœ๊นŒ์ง€ ์กด์žฌํ–ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋Ÿฌ๋‹ ์ฝ”์Šค ์ขŒํ‘œ๋“ค์„ ์ผ์ผ์ด ์ˆ˜์ž‘์—…์œผ๋กœ ์ˆ˜์ •ํ•œ๋‹ค๋Š” ๊ฒŒ ์‰ฌ์šด ์ž‘์—…๋„ ์•„๋‹๋ฟ๋”๋Ÿฌ ์‹œ๊ฐ„, ์—๋„ˆ์ง€ ์†Œ๋ชจ๊ฐ€ ์ปธ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋Ÿฌํ•œ ์ˆ˜๊ณ ๋ฅผ ๋œ์–ด์•ผ ํ–ˆ๋‹ค.

๋จผ์ € ์ง€๊ธˆ๊นŒ์ง€์˜ ๋ฌธ์ œ๋ฅผ ์ •์˜ํ•ด ๋ณด์•˜๋‹ค.

  1. ๋Ÿฌ๋‹ ์ฝ”์Šค ํŒŒ์ผ์— ์กด์žฌํ•˜๋Š” ์ •ํ™•ํ•˜์ง€ ์•Š์€ ๊ฒฝ๋กœ๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค.
  2. ์ •ํ™•ํ•˜์ง€ ์•Š์€ ๊ฒฝ๋กœ์˜ ์ˆ˜์ •์„ ์ˆ˜๋™์ด ์•„๋‹Œ '์ž๋™'์œผ๋กœ ์ด๋ค„๋‚ด์•ผ ํ•œ๋‹ค.

์ด ๋‘ ๊ฐ€์ง€ ๋ฌธ์ œ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์•ˆ์ด ์กด์žฌํ–ˆ๋‹ค. ๊ทธ ๋ฐฉ์•ˆ์€ Map match API๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ํ•ด๋‹น API๋Š” ์ขŒํ‘œ๋“ค์„ ๋„˜๊ฒจ์ฃผ๋ฉด ์ง€๋„์ƒ ๊ฐ€๊นŒ์šด ๋„๋กœ์— ์ž๋™์œผ๋กœ ๋งค์นญํ•ด ์ค€๋‹ค. ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šค๊ฐ€ ๋ช‡ ๊ฐ€์ง€ ์žˆ์—ˆ๋Š”๋ฐ ๊ฐ MapBox, OSRM, GraphHopper ๋“ฑ์ด ์žˆ๋‹ค.

์ด ์ค‘ ์ธ์ง€๋„์™€ ๋ฌธ์„œํ™” ์ˆ˜์ค€์„ ๋†“๊ณ  ๋ณด๋ฉด ์ ํ•ฉํ•œ ์„œ๋น„์Šค๋Š” MapBox์™€ OSRM์ด ํ›„๋ณด๋กœ ์ถ”๋ ค์ง„๋‹ค. ํ•˜์ง€๋งŒ, MapBox์˜ ๊ฒฝ์šฐ์—๋Š” 10๋งŒ ๋ฒˆ ์ด์ƒ ํ˜ธ์ถœ ์‹œ ๋น„์šฉ์ด ๋ฐœ์ƒํ•˜๊ณ , ๊ธฐ์กด์— OSRM ์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ•ด ๋†จ๊ธฐ์— OSRM์„ ์ด์šฉํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.


OSRM์„ ์„ ํƒํ•˜๊ณ , match API๋ฅผ ์ด์šฉํ•˜๋Š” ์„œ๋น„์Šค ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ, match API๋ฅผ ์ด์šฉํ•ด๋„ ์ขŒํ‘œ๊ฐ€ ์ œ๋Œ€๋กœ ๋งค์นญ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ด๋‹ค.


์• ์ดˆ์— ๋งค์นญ๋˜๋Š” ๊ฒฝ๋กœ๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ, ๋ฐ”๋กœ ์˜†์— ๋„๋กœ๊ฐ€ ์กด์žฌํ•˜๊ณ  ์žˆ๊ธฐ์— ๋งค์นญ๋˜๋Š” ๊ฒฝ๋กœ๊ฐ€ ์—†๋Š” ๊ฑด ๋ง์ด ์•ˆ ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์„œ ํ•ด๋‹น ๋ฌธ์ œ์™€ ๊ด€๋ จํ•ด์„œ ๊ณต์‹ ๋ฌธ์„œ ๋ฐ Github๋ฅผ ์ฐพ์•„๋ณด์•˜๊ณ , match api์—๋Š” ์ฃผ์š”ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋‘ ๊ฐœ ๋” ์กด์žฌํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜๋‹ค.

์ด๋Š” radiuses, timestamps ํŒŒ๋ผ๋ฏธํ„ฐ์ด๋‹ค. ํ•ด๋‹น ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค์„ ๊ฐ™์ด ์ฃผ๊ฒŒ ๋œ๋‹ค๋ฉด ๋งค์นญ์˜ ์ •ํ™•๋„๊ฐ€ ๋” ๋†’์•„์ง„๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. radiuses ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ํŠน์ • ์ขŒํ‘œ๊ฐ€ ์ธ๊ทผ ๋„๋กœ ๊ตฌ๊ฐ„์— ๋งค์นญ๋  ๋•Œ ํ—ˆ์šฉ๋˜๋Š” ์ตœ๋Œ€ ๊ฑฐ๋ฆฌ(๋ฏธํ„ฐ ๋‹จ์œ„)๋ฅผ ์ง€์ •ํ•œ๋‹ค. timestamps์˜ ๊ฒฝ์šฐ์—๋Š” ์ง€๋„ ๋งค์นญ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ง€์  ๊ฐ„ ์ด๋™ ์†๋„์™€ ์‹œ๊ฐ„์„ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์ค€๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์žก์Œ์ด ์žˆ๋Š” ๊ฒฝ๋กœ์—์„œ ๋งค์นญ ํ’ˆ์งˆ์„ ํฌ๊ฒŒ ํ–ฅ์ƒํ•œ๋‹ค.

ํŒŒ๋ผ๋ฏธํ„ฐ ๋‘ ๊ฐœ๋ฅผ ๋”ฐ๋กœ ์ง€์ •ํ•ด์ฃผ์ง€ ์•Š์œผ๋ฉด, radiuses๋Š” 5m๋กœ ์ง€์ •๋˜๊ณ  timestamps ๊ธฐ๋ณธ๊ฐ’์ด ์—†๋‹ค. radiuses๋Š” ๊ฐ ์ขŒํ‘œ ๋ณ„๋กœ 15m๋ฅผ ์ง€์ •ํ•ด ์ฃผ์—ˆ๊ณ , timestamps๋Š” ๊ฐ ์ขŒํ‘œ ๊ฐ„ ์†Œ์š” ์‹œ๊ฐ„์„ 5์ดˆ๋กœ ์ง€์ •ํ•ด ์ฃผ์—ˆ๋‹ค.
gpx ํŒŒ์ผ์— ์กด์žฌํ•˜๋Š” ์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋” ์ข‹์•˜๊ฒ ์ง€๋งŒ, ์ด๋ฏธ ๋งŽ์€ ๋ฐ์ดํ„ฐ๋“ค์ด ์‚ฝ์ž…๋œ ์ƒํƒœ๋ผ ์ถ”ํ›„ ๊ณ ๋ คํ•ด ๋ณด๋Š” ๊ฒŒ ์ข‹์„ ๊ฑฐ ๊ฐ™๋‹ค.


์ด๊ฒƒ์œผ๋กœ NoMatch ๋ฌธ์ œ๊ฐ€ ํ•ด์†Œ๋˜์—ˆ๊ณ , ์ด์ „๋ณด๋‹ค ํ›จ์”ฌ ๋†’์€ ์ •ํ™•๋„๋ฅผ ๋ณด์—ฌ์ฃผ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ, ๋ฌธ์ œ๋Š” ์—ฌ์ „ํžˆ '๋„๋กœ'์—๋งŒ ๋งค์นญ๋œ๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ๋‚จ์•„์žˆ์—ˆ๋‹ค.


๊ทธ๋ž˜์„œ ์ด๋Ÿฌํ•œ ๊ณต์›๊ธธ์— ๋งค์นญ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ์˜ ์›์ธ์„ ์—ด์‹ฌํžˆ ์ฐพ์•„๋ณด์•˜๋‹ค. ํ•˜์ง€๋งŒ ์–ด๋””์—๋„ ์ด์™€ ๊ด€๋ จํ•œ ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ ์—†์–ด์„œ ์›์ธ์„ ํ•œ๋ฒˆ ์ถ”์ธกํ•ด ๋ดค๋‹ค.


OSRM ์„œ๋ฒ„๊ฐ€ OSM ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์–ด์„œ ํ•ด๋‹น ๋งต ๋ฐ์ดํ„ฐ์— ์ € ๊ณต์›๊ธธ ์ž์ฒด๊ฐ€ ์—†๋‹ค๋Š” ์ถ”์ธก์ด์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋ฅผ ์ฆ๋ช…ํ•˜๊ธฐ ์œ„ํ•ด์„œ OSM์— ์ ‘์†ํ•ด ํ•ด๋‹น ๊ณต์›๊ธธ์„ ์ฐพ์•„๋ณด์•˜๋Š”๋ฐ, ๊ธธ์ด ์•„์˜ˆ ์—†๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์—ˆ๋‹ค.


์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ footway๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ๊ธธ์ด ์กด์žฌํ•˜๊ธด ํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋Ÿฌํ•œ ์ƒํ™ฉ๊ณผ ํ•จ๊ป˜ Claude ๋ฐ GPT์˜ ๋„์›€์„ ๋ฐ›์•„ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์›์ธ์„ ๋Œ€ํ‘œ์ ์œผ๋กœ ๋‘ ๊ฐ€์ง€ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

  • OSM ๋งต ๋ฐ์ดํ„ฐ ์ž์ฒด์˜ ๋ฌธ์ œ

ํ•˜์ง€๋งŒ, ์ด๋Š” ์ด๋ฏธ ์ฆ๋ช…๋˜์—ˆ๋‹ค. ์ ์–ด๋„ ์ € ๊ธธ์—๋Š” ๋งค์นญ์ด ๋˜์–ด์•ผ ํ–ˆ๋‹ค.

  • OSRM profile์ด foot์ด ์•„๋‹Œ car๋กœ ๋˜์–ด์žˆ๋Š” ๋ฌธ์ œ

์ด๊ฑด ์ƒˆ๋กญ๊ฒŒ ์•ˆ ์‚ฌ์‹ค์ธ๋ฐ, url์— `/match/v1/foot/~`์œผ๋กœ ์ผ๋‹ค๊ณ  ํ•ด์„œ OSRM์—์„œ foot์œผ๋กœ ๋ฌด์กฐ๊ฑด ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒŒ ์•„๋‹ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋Š” OSRM ์„œ๋ฒ„ ๊ตฌ์„ฑ ์ค‘ ์–ด๋–ค profile๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์ฒ˜๋ฆฌ ํ–ˆ๋А๋ƒ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง„๋‹ค๊ณ  ํ•œ๋‹ค.

๊ทธ๋ž˜์„œ ๋น ๋ฅด๊ฒŒ ๋กœ์ปฌ์—์„œ OSRM์„ foot.lua๋กœ ์ „์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•œ ํ›„ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ–ˆ๋‹ค.

 

๊ทธ๋Ÿฌ์ž ์–ด๋А ์ •๋„ ๊ณต์›๊ธธ์— ๋งค์นญ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค! ํ•˜์ง€๋งŒ, ์ด ๋˜ํ•œ ์™„๋ฒฝํ•˜๊ฒŒ ๋งค์นญ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์—ˆ๋‹ค. ๊ทธ๋„ ๊ทธ๋Ÿด ๊ฒƒ์ด OSM ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋ฉด ์นด์นด์˜ค๋งต๊ณผ ๋‹ค๋ฅด๊ฒŒ ๊ณต์›๊ธธ์ด ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ์™„๋ฒฝํ•˜๊ฒŒ ์นด์นด์˜ค๋งต์— ๋งž๊ฒŒ ๋งค์นญํ•˜์ง€๋Š” ๋ชปํ•  ๊ฒƒ์ด๋‹ค..

 

๊ฒฐ๊ณผ์ ์œผ๋กœ ํ˜„์žฌ๋Š” ๊ณต์›๊ธธ์— ๋Œ€ํ•ด์„œ๋Š” ์ˆ˜์ž‘์—…์„ ํ†ตํ•ด์•ผ ํ•˜์ง€๋งŒ, ์ ์–ด๋„ ๋„๋กœ์— ๋Œ€ํ•ด์„œ๋Š” API ํ˜ธ์ถœ์„ ํ†ตํ•ด ํ•ด์†Œํ•˜๋„๋ก ํ–ˆ๋‹ค.

 

์•ž์œผ๋กœ์˜ ๊ณ„ํš

OSM ๋ฐ์ดํ„ฐ๋ฅผ ์ปค์Šคํ…€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๋ณด๊ฑฐ๋‚˜, ๋˜๋Š” OSRM์˜ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์ด ์ž์œ ๋กœ์šด ๋งŒํผ ์ด๋Ÿฌํ•œ ๋ถ€๋ถ„๋“ค์— ๋Œ€ํ•ด์„œ ๋” ๊ณต๋ถ€ํ•ด ๋ณด๊ณ  ์ ์šฉํ•˜๋Š” ๊ณผ์ •๋“ค์ด ํ•„์š”ํ•  ๊ฒƒ ๊ฐ™๋‹ค.