์ ์ฒด ๊ธ ์ธ๋ค์ผํ ๋ฆฌ์คํธํ ๋จ์ผ ์ธ์คํด์ค์์ EBS๊ฐ ์๋๋ฐ, S3๋ฅผ ์ ์ฌ์ฉํด์ผ ํ ๊น? ์ด๋ฒ์ DND์ ์ฐธ์ฌํ๋ฉด์, ์๋ก์ด ๋๋ฉ์ธ์ ๊ฒฝํํ ๊ธฐํ๋ฅผ ์ป์๋ค.์์ง ์ด๋ฐ์ด๋ผ ์๋ฒ ๊ตฌ์ฑ์ด๋ ์์ ๋ก๊ทธ์ธ ๊ฐ์ ๊ธฐ๋ฅ๋ค์ ๋จผ์ ๊ตฌํํ๊ณ ์๋๋ฐ, ํ์ฌ ์๋ฒ๋ ์ด์ ์๋ฒ์ ํธ๋ํฝ์ด ๋ง์ง ์์ ๊ฒ์ ๊ณ ๋ คํด์ ๋จ์ผ ์ธ์คํด์ค๋ก ์ด์ํ ๊ณํ์ด๋ค. ๊ทธ๋ฐ๋ฐ S3 ๋ฒํท์ ๋ง๋ค๊ณ ์๋ฒ์ ์ฐ๊ฒฐ ๊ตฌ์ฑํ๊ธฐ ์ ๋ฌธ๋ ์ด๋ฐ ์๊ฐ์ด ๋ค์๋ค. "๋จ์ผ ์ธ์คํด์ค๋ก ์ด์ํ๋ค๋ฉด, S3๋ง๊ณ EBS(EC2์ ์ฐ๊ฒฐ๋ ์คํ ๋ฆฌ์ง)๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋๊ฑฐ ์๋๊ฐ?" ๊ฒฐ๋ก ๋ถํฐ ๋งํ๋ฉด, ํ์ํ๋ค. ๋ต์ ์ฐพ๊ธฐ ์ํด ๋จผ์ ๋ ์๋น์ค๊ฐ ์ด๋ป๊ฒ ๋ค๋ฅธ์ง ์์๋ณด์. EBS์ S3, ๋ฌด์์ด ๋ค๋ฅผ๊น?EBS(Elastic Block Store)๋ EC2์ ์ฐ๊ฒฐ๋์ด ์ฌ์ฉํ๋ ๊ฐ์ ํ๋๋์คํฌ์ด๋ค. ์ธ์คํด์ค์๋ง ์ฐ๊ฒฐ๋๊ธฐ์ ํด๋น ์ธ์คํด์ค์ ๋ก์ปฌ ํ๋ ๋์คํฌ์ฒ๋ผ ์ฌ์ฉํ ์ ์๋ค. ํน.. ๋๋ณด๊ธฐ OSRM Match API๋ก ๋ฌ๋ ์ฝ์ค ๋ฐ์ดํฐ ์ขํ ๋ณด์ ํ๊ธฐ ํ๋ก์ ํธ ์ด๊ธฐ์ ๋ฌ๋ ์ฝ์ค ๋ฐ์ดํฐ๋ฅผ ์์งํ๋ ๊ณผ์ ์์ ๊ตฌ๊ธ ์ด์ค๋ฅผ ์ด์ฉํ๋ค. ํด๋น ๋ฐฉ๋ฒ์ ์ง์ ์ขํ๋ฅผ ์ฐ์ด๊ฐ๋ฉฐ, ํด๋น ์ขํ๋ค์ ๋ชจ์ kml ํ์ผ๋ก ์ถ์ถํ์ฌ ๋ฌ๋ ์ฝ์ค ๋ฐ์ดํฐ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ด์๋ค.ํ์ง๋ง ํด๋น ๋ฐฉ์์ ๊ฒฝ๋ก๋ฅผ ๊ฐ ์ขํ๋ง๋ค ์ง์ ์ผ๋ก๋ง ์ด์ด์ฃผ์๊ธฐ ๋๋ฌธ์ ์ง์ ์ด ๋ง์ง ์์ ์ค์ ๋๋ก์์๋ ์ฌ์ฉํ๊ธฐ ์ด๋ ค์ ๋ค. ๋ํ, ๊ณก์ ์ ํํํ๊ธฐ ์ํด ๋ค์ฌ์ผ ํ๋ ์๋์ง๊ฐ ๋ง์ด ์๋ชจ๋๋ค.๊ทธ๋์ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฐพ์๊ณ , ์ด๋ ๋ค๋ฅธ ์ธ๋ถ ์๋น์ค (์คํธ๋ผ๋ฐ, ๊ฐ๋ฏผ ๋ฑ)์ ์ด์ฉํ๊ฑฐ๋ ๋ธ๋ก๊ทธ, ์ธ๋ถ ์ปค๋ฎค๋ํฐ๋ฅผ ์ฐพ์ผ๋ฉฐ ์ค์ ๋ฌ๋์ ๋ด ์ฌ๋๋ค์ ๊ธฐ๋ก์ gpx ํ์ผ๋ก ์ถ์ถํ์ฌ ์ฝ์ ํ๋ ๋ฐฉ๋ฒ์ด์๋ค.์ด ๋ฐฉ๋ฒ์ ํตํด ๊ธฐ์กด kml ํ์ผ๋ณด๋ค ํ์ง์ด ์ข์ ๋ฌ๋ ์ฝ์ค ๋ฐ์ดํฐ๋ฅผ ์์งํ ์ ์์๋ค. ํ์ง๋ง ํด๋น ๋ฐฉ์์ ์ธก์ ํ๋ ์ฌ๋์ ๊ธฐ๊ธฐ์ ๋ฐ๋ผ .. ๋๋ณด๊ธฐ ๊ธธ์ฐพ๊ธฐ, ๊ฒฝ๋ก ๋ณด์ ์ ํต์ฌ OSRM ํบ์๋ณด๊ธฐ OSRM์ด๋osrm-backend์คํ ์์ค ๋ผ์ฐํ ๋จธ์ ์ ์ฝ์๋ก OpenStreetMap(OSM) ๋ฐ์ดํฐ๋ฅผ ํ์ฉํด์ ๊ฒฝ๋ก๋ฅผ ์ฐพ์์ฃผ๋ ๋ผ์ฐํ ์์ง์ด๋ค. ๋ผ์ฐํ ์์ง์ ๋ ์ง์ ๊ฐ์ ์ต์ ๊ฒฝ๋ก๋ฅผ ๊ณ์ฐํ๋ ์ํํธ์จ์ด๋ก ์ง๋ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ํ ์๋ฃ๊ตฌ์กฐ๋ก ๋ณํํ๊ณ ์ต๋จ ๊ฒฝ๋ก ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํด ๊ฒฝ๋ก๋ฅผ ์ฐพ๋๋ค. ์ฐ์ํํ์ ๋ค, ๋ค์ด๋ฒ ๋ฑ ๋น ํ ํฌ ๊ธฐ์ ์์๋ ํด๋น ์์ง์ ํ์ฉํ ๋งํผ ๋์ค์ ์ผ๋ก ์ฌ์ฉ๋๊ณ ์์ผ๋ฉฐ, ์คํ ์์ค์ธ๋งํผ ๋ฌด๋ฃ์ด๊ณ ์ปค์คํฐ๋ง์ด์ง์ด ์์ ๋กญ๋ค๋ ์ฅ์ ์ด ์๋ค. ๋ํ, C++์ด๊ธฐ์ ๊ต์ฅํ ๋น ๋ฅธ ์๋๋ก ๊ฒฝ๋ก ๊ณ์ฐ์ ์ํํ ์ ์๋ค. Valhalla๋ GraphHopper ๊ฐ์ ๋์ฒด์ ๊ฐ ์กด์ฌํ์ง๋ง OSRM์ด ํ๊ตญ ๋ด์์ ์ฌ์ฉ ์ฌ๋ก๊ฐ ๋ง๊ณ , ๋ฌธ์ํ๋ ์ ๋์ด์๋ค. Contraction HierarchiesOSRM์ด ๋น .. ๋๋ณด๊ธฐ API ๋ฌธ์ ๊ฐ์ ๊ณผ ๋ฌธ์ํ ํด Stoplight๋ก ๋ณ๊ฒฝํ๊ธฐ ๊ธฐ์กด ํ๋ก์ ํธ์์ API ๋ฌธ์๋ฅผ Springdoc์ ํตํด OpenAPI 3.0 ์คํ์ ๋ง๊ฒ ์๋ ์์ฑํ์ฌ Swagger UI ์กฐํฉ์ผ๋ก ์ฌ์ฉํ๊ณ ์์๋ค. ์๋ฌด๋๋ ๊ฐ์ฅ ์ต์ํ ํด์ด๊ธฐ๋ ํ๊ณ , ๋น์์๋ Springdoc + Swagger UI ์กฐํฉ์ผ๋ก ๊ฐ๋๋, Spring Rest Docs๋ฅผ ์ฌ์ฉํ๋๋์๋ง ์ง์คํ๊ธฐ์ ์ง์ ์๋ฒ์ ํ ์คํธ๋ฅผ ํด๋ณผ ์ ์๋ค๋ ์ ์์ Swagger UI๋ฅผ ์ ํํ์๋ค.ํ์ง๋ง, ๋ฌธ์๊ฐ ๊ด๋ฆฌ๋์ง ์๊ณ ๊ฐ๋ฐ์๋ค๊ฐ ์ฌ์ฉ๋ฅ ์ด ์ ์ ์ ์กฐํด์ง๋ ๊ฒ์ ๋ฐ๊ฒฌํ๋ค. ๊ทธ๋์ ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด์ํ๊ณ ์ ๋จผ์ ๋ฌธ์๋ฅผ ์ ๋ฐ์ ์ผ๋ก ๊ฒํ ํด๋ณด์๋ค. ๊ฐ์ 1. ํ๋ผ๋ฏธํฐ ์ค๋ช ๋ถ์ฌ์์ฒญ๊ณผ ์๋ต ํ๋ผ๋ฏธํฐ๋ฅผ ๋จผ์ ์ดํด๋ณด์๋๋ฐ, ์ค๋ช ์ด ๋ถ์ด์๋ ๊ฒ๋ ์์ง๋ง ๋ถ์ด์์ง ์๊ณ ๋จ์ํ example๋ง ํฌํจํ์ฌ ์ด์๋๊ณ ์๋ ๊ฒ๋ ์์๋ค.. ๋๋ณด๊ธฐ ๊ณต๊ฐ ์ธ๋ฑ์ค ๊ณต๊ฐ ์ธ๋ฑ์ค(Spatial Index)๋ ๊ณต๊ฐ ๋ฐ์ดํฐ ํ์์ ๋์ฑ ํจ์จ์ ์ผ๋ก ๋ง๋ค์ด์ฃผ๋ ์ธ๋ฑ์ค์ด๋ค. ์๋ฅผ ๋ค์ด ์ฌ์ฉ์ ์์น๋ฅผ ๊ธฐ์ค์ผ๋ก 1km ๋ด์ ๊ฐ๊ฒ๋ฅผ ์ฐพ๋๋ค๊ณ ํ์. ์ผ๋ฐ ์ธ๋ฑ์ค๋ผ๋ฉด ๋ฐ์ดํฐ๊ฐ ์๋, ๊ฒฝ๋๋ฅผ ๋ฐ๋ก ์นผ๋ผ์ผ๋ก ์ ์ฅํ๊ณ ์์ ๊ฒ์ด๋ค. ๊ทธ๋์ (์๋, ๊ฒฝ๋)์ ๊ฐ์ ํํ์ ๋ณตํฉ ์ธ๋ฑ์ค๊ฐ ๋ง๋ค์ด์ง๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค์๊ณผ ๊ฐ์ด 1km๋ฅผ ์ฐพ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ์ ์๋ค.์ฌ์ฉ์: (37.5, 127.0)1km ≈ ์๋ ±0.009, ๊ฒฝ๋ ±0.011→ WHERE latitude BETWEEN 37.491 AND 37.509 AND longitude BETWEEN 126.989 AND 127.011 ์ด๋ฐ ๊ฒฝ์ฐ ์ธ๋ฑ์ค๊ฐ ์๋ ๋ฒ์ ๋ด ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋จผ์ ํ์ํ๋ฉด์ ์กฐ๊ฑด์ ๋ง๋ ๊ฒฝ๋๋ฅผ ์ฐพ์ ๊ฒ์ด๋ค. ํ์ง๋ง ์ด๋ ๊ฒ.. ๋๋ณด๊ธฐ ์ค์ต์ ํตํ ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ(TDD) ๋ค์ด๊ฐ๋ฉฐ์๋ ํ์ธ์. ์ฐ์ํํ ํฌ์ฝ์ค์ ๋ฐฑ์๋ 7๊ธฐ ์จ๋ฌด์ ๋๋ค. ์ ๋ ์ฐ์ํํ ํฌ์ฝ์ค์์ ์ฒ์ ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ์ ๋ํด์ ์ ํ๊ฒ ๋์๋๋ฐ์. ๋น์์๋ ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ์ด ์คํ๋ ค ๊ฐ์ฒด์งํฅ์ ์ค๊ณ์ ๋ฐฉํฅ์ฑ์ ์ ์ํ์ง ๋ชปํ๋ฉฐ, ์๊ตฌ์ฌํญ์ ๋ง์กฑํ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ ์๋๋ฅผ ๋ฆ์ถ๋ค๊ณ ์๊ฐํ์ต๋๋ค. ํ์ง๋ง ์ด๋ฐ ์๊ฐ์ ๋ฐ๊พธ๊ฒ ๋ ๊ณ๊ธฐ๊ฐ ์๋๋ฐ์. ๋ฐ๋ก ์ฐ์ํํ ํฌ์ฝ์ค ๋ ๋ฒจ 1 ๋ฏธ์ ‘์ฅ๊ธฐ’์์ต๋๋ค.ํด๋น ๋ฏธ์ ์์ ์ฅ๊ธฐ ๋ณด๋์ ๊ธฐ๋ฌผ๊ณผ ์ฌ์ด์ ๊ด๊ณ๋ฅผ ๊ตฌํํ๋ฉด์ ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ์ ์ค์ฒํด๋ณด์๋๋ฐ, ์คํ๋ ค ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ์ด ์ค๊ณ์ ๋ฐฉํฅ์ฑ์ ์ก์์ฃผ๊ณ ์ฑ ์์ ๋ช ํํ ๋ถ๋ฆฌ๋ฅผ ์ ๋ํ์ต๋๋ค. ์ฌ์ ํ ํ ์คํธ๋ฅผ ์์ฑํ๋ ์๋๋ ๋๋ฆฌ๊ธด ํ์ต๋๋ค๋ง ํ ์คํธ ์์ฑ ๊ณผ์ ์์ ๋ถ์๊ณผ ์ค๊ณ๋ฅผ ํจ๊ป ํ๊ณ ์์๋ ๊ฒ์ ๋๋ค.์ผํธ ๋ฒก์ ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ์์ ํ ์ค.. ๋๋ณด๊ธฐ ํด๋ก๋ AI๋ฅผ ํตํ ์คํ๋ง ํ์ต ์ต๊ทผ Claude AI Pro๋ฅผ ๊ตฌ๋งคํ๋ฉด์ AI์ ๋ํ ๊ด์ฌ์ด ๋์ฑ ๋ง์์ก๋ค. ๊ธฐ์กด์๋ AI๋ฅผ ๊ทธ๋ฅ ์ ํธํ์ง ์์์ง๋ง, ์ธ์์ด ๋์๊ฐ๋ ๋ชจ์ต์ ๋ณด๋ฉด AI๋ฅผ ์ฌ์ฉํ์ง ์์ ์ ์๋ค. ๊ทธ๋์ ์ด๋ฒ ๊ธฐํ์ ๋ฉด์ ์ค๋น๊ฒธ ํ์ต์ผ๋ก Claude AI๋ฅผ ์ ๊ทน์ ์ผ๋ก ํ์ฉํด๋ณด๊ธฐ๋ก ํ๋ค.๊ฐ์ฅ ๋จผ์ ํด๋ณธ ๊ฒ์ ์คํ๋ง์ ๋ํ ๊ธฐ๋ณธ ์ง์ ํ์ต์ด ์๋์ด์๋์ง ํ์ธํ๋ ๊ฒ!๊ฐ๋จํ๊ฒ ํ๋กฌํํธ๋ "์คํ๋ง์ ๋ํ ๊ธฐ์ด์ ์ธ ์ง์์ ํ์ตํ๋๋ฐ, ์ด๋ฅผ ํ ์คํธํ๊ณ ์ถ์ด. ๋๊ฐ ํ ๋ฌธ์ ์ฉ ๋ด๋ฉด ๋ด๊ฐ ๊ทธ๊ฑธ ๋ตํ๋ ์์ผ๋ก ์งํํด๋ณด์"๋ก ์์ํ๋ค.์ฒซ ๋ฒ์งธ ๋ฌธ์ :์คํ๋ง์ ํต์ฌ ๊ฐ๋ ์ค ํ๋์ธ IoC(Inversion of Control)์ DI(Dependency Injection)์ ๊ฐ๋ ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์. ๊ทธ๋ฆฌ๊ณ ์คํ๋ง์์ ์์กด์ฑ ์ฃผ์ ์ ํ๋ ๋ฐฉ.. ๋๋ณด๊ธฐ ์์ ํด์ ์ค๊ณ '๊ฐ์ ๋ฉด์ ์ฌ๋ก๋ก ๋ฐฐ์ฐ๋ ๋๊ท๋ชจ ์์คํ ์ค๊ณ ๊ธฐ์ด' ์ฑ ์ ๋ณด๋ฉด์ '5์ฅ ์์ ํด์ ์ค๊ณ' ๋จ์์ ์ฝ์ด๋ณด์๋๋ฐ, ์ ์ดํด๊ฐ ๊ฐ์ง ์์์ ๋ค์ ํ๋ฒ ์ ๋ฆฌํด๋ณด๊ณ ์ ํ๋ค.์ผ๋จ, ํด๋น ๋จ์์ ํด์ ๊ธฐ์ ์ API ์๋ฒ๊ฐ ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์บ์ ์๋ฒ์ ๊ฐ์ ๋ฐ์ดํฐ ์ ์ฅ์ ์์คํ ์ ์ฌ์ฉ๋๋ ๊ฒ์ด๋ค. ์๋ํ๋ฉด API ์๋ฒ๋ ๊ธฐ๋ณธ์ ์ผ๋ก Stateless์ด๊ธฐ์ ์์ฒญ ์ฒ๋ฆฌ๋ฅผ ์ํด ๊ผญ ๊ฐ์ ์๋ฒ์๊ฒ ์์ฒญ์ ๋ณด๋ด์ผ ํ๋ ๊ฒ๋ ์๋๋ฉฐ, ์๋ฒ๋ฅผ ์ถ๊ฐ ๋ฐ ์ ๊ฑฐ ํ๋ค๊ณ ํด์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฐ API ์๋ฒ์ ๋ํ ๋ถํ ๋ถ์ฐ์ ๋ก๋ ๋ฐธ๋ฐ์๊ฐ ๋ฐ๋ก ํ๊ธฐ ๋๋ฌธ์ ๊ด๊ณ์๋ค!์์ ํด์์ ๋ชฉ์ ์ ๊ธฐ์กด ํด์๋ฅผ ํตํ ๋ฐ์ดํฐ์ ์ฅ์ ๋ถ์ฐ ๋ฐฉ์์ ๋จ์ ์ ํด์ํ๊ธฐ ์ํจ์ด๋ค.๊ธฐ์กด ํด์ ๋ฐฉ๋ฒ์ ์๋ฒ์ ์ ๋ณด๋ฅผ ๋ฐฐ์ด ๊ฐ์ ์๋ฃ๊ตฌ์กฐ์ ๋ด์๋๊ณ .. ๋๋ณด๊ธฐ ์ด์ 1 2 3 4 ยทยทยท 10 ๋ค์