Sketch of ConvBridge - aragorn/home GitHub Wiki
- ์์๋ฐ์ดํฐ ์ ์ฅ์, ๋ฐ์ดํฐ๋ณํ๊ธฐ API, ๊ฒ์์์ง์ ๋ด์ฅ๋ ๋ฐ์ดํฐ์์ง ํ๋ก๊ทธ๋จ์ผ๋ก ์ค์๊ฐ ๋ฐ์ดํฐ ์ฐ๊ณ ์์คํ ์ ๊ตฌ์ฑํ๋ค.
- ๋์ผํ ์ธํฐํ์ด์ค๋ฅผ ํ์ฉํ์ฌ ์ด๊ธฐ์ข ๋ฐ์ดํฐ์ ์ฅ์ ๊ฐ์ Extract, Transform, Load ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
- ๋ฐ์ดํฐ๋ณํ๊ธฐ API, ๋ฐ์ดํฐ์์ง ํ๋ก๊ทธ๋จ์ ํ๋๋ก ๋ฌถ์ด ConvBridge ๋ผ ๋ถ๋ฅธ๋ค.
๋ฐ์ดํฐ๋ณํ๊ธฐ API๋ ์์์ ๋ฐฑ์๋ ์คํ ๋ฆฌ์ง์ ๋ํ ๋ฐ์ดํฐ ๋ณํ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค.
์์ค ๋ฐ์ดํฐ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฐ๊ณํ๊ธฐ ์ํด ์ ์ฒด ๋ชฉ๋ก, ๋ณ๊ฒฝ๋ด์ญ ๋ชฉ๋ก ๋ฑ 2๊ฐ์ง ๋ฐฉ์์ ๋ชฉ๋ก์ ์ ๊ณตํ๊ณ , ์ด๋ฅผ ์ด์ฉํด ์ด๊ธฐ์ข DB ์ฌ์ด์ ๋ฐ์ดํฐ์ฐ๊ณ๋ฅผ ๊ตฌํํ๋ค.
์ ์ฒด ๋ชฉ๋ก์ ํน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ์๋ฃ๋ฅผ ๋น ์ง์์ด ๋ชจ๋ ๋์ดํ ์ ์๋ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ค. ์ ์ฒด ๋ชฉ๋ก์ ๋์ดํ๊ธฐ ์ํด API ํธ์ถ์ ์ฌ๋ฌ์ฐจ๋ก ์ํํด์ผ ํ ์ ์์ผ๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก ์ฌ๋ฌ์ฐจ๋ก ์ํํ์ฌ์ผ ํ๋ค. ์ฌ๋ฌ์ฐจ๋ก API๋ฅผ ํธ์ถํ๋ ๊ณผ์ ์์ ๊ฐ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ(Consistency) ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฉฐ, RDBMS์์ ์ผ๋ฐ์ ์ผ๋ก ์ ๊ณตํ๋ ํน์ ์์ ์ snapshot์ ์ ๊ณตํ์ง ์๋๋ค.
๋ณ๊ฒฝ๋ด์ญ ๋ชฉ๋ก์ mysql binlog ์ ๊ฐ์ ์๊ฐ์์์ ๋ฐ๋ฅธ ๋ฐ์ดํฐ CRUD๋ฅผ ๋น ์ง์์ด ๋ชจ๋ ๋์ดํ ์ ์๋ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ค. ๋ณ๊ฒฝ๋ด์ญ ๋ชฉ๋ก์ ๊ฐ ๋ฐ์ดํฐ๋ณ๊ฒฝ ์ด๋ฒคํธ์ ๋ํด ์ผ๋ จ๋ฒํธ๋ฅผ ๋ถ์ฌํ๊ณ , ์ด ์ผ๋ จ๋ฒํธ ์์์ ๋ฐ๋ผ ๋ฐ์ดํฐ ๋ณ๊ฒฝ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ทผํ ์ ์๋ค.
์ ์ฒด ๋ชฉ๋ก๊ณผ ๋ณ๊ฒฝ๋ด์ญ ๋ชฉ๋ก, 2๊ฐ์ง๋ฅผ ์ด์ฉํ์ฌ ์ด๊ธฐ์ข DB ์ฌ์ด์ ๋ฐ์ดํฐ์ฐ๊ณ๋ฅผ ๊ตฌํํ๊ฒ ๋๋ฉฐ, ๋ฐ์ดํฐ ์ฐ๊ณ ๋์ค์๋ ์ฐ๊ณ๋ DB์ ๋ฐ์ดํฐ ์ ํฉ์ฑ์ด ์ผ์์ ์ผ๋ก ๊นจ์ด์ง ์ ์์ผ๋, ๊ฒฐ๊ตญ ์๊ฐ์ด ์ง๋ ์ ํฉ์ฑ์ ๋ง์ถ ์ ์๊ฒ ๋๋ Eventual Consistency ๋ชจ๋ธ์ ๋ฐ๋ฅด๊ฒ ๋๋ค.
์ด๋ฌํ ๋ฐ์ดํฐ ๋ณํ๊ธฐ API๋ฅผ 'Converter'๋ผ๊ณ ์ด๋ฆ ์ง๋๋ค.
- ์ ์ (static) ์ฐ๊ณ : ์์ค ๋ฐ์ดํฐ์ ์ ์ฒด ๋ชฉ๋ก์ ์ด์ฉํด ๋ฐ์ดํฐ ์ฐ๊ณํ๋ ๊ฒ์ ๊ฐ๋ฆฌํจ๋ค.
- ๋์ (dynamic) ์ฐ๊ณ : ์์ค ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ๋ด์ญ ๋ชฉ๋ก์ ์ด์ฉํด ๋ฐ์ดํฐ ์ฐ๊ณํ๋ ๊ฒ์ ๊ฐ๋ฆฌํจ๋ค.
- next_url : ๋ชฉ๋ก์ ๋์ดํ๋ API์์ ์ดํ ํธ์ถํ API ์ฃผ์๋ฅผ next_url ์ด๋ผ ํ๋ค.
REST(Representational State Transfer) ๋ฐฉ์์ API๋ฅผ ๊ตฌํํ๋ค.
๊ทธ๋ฌ๋, ์ผ๋ฐ์ ์ธ RESTful API์ ๋ฌ๋ฆฌ, ๋ฐ์ดํฐ ์ ๋ ฅ/์์ ์ ๋์ํ๋ API๋ฅผ ์ ๊ณตํ์ง ์๋๋ค. ConvBridge๋ ๊ทธ ํน์ฑ์ ์์ค ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ ๋ด์ญ์ ์ฝ๊ธฐ์ ์ฉ ๋ฐฉ์์ผ๋ก ์ ๊ณตํ๋ฉฐ, ์์ค ๋ฐ์ดํฐ์ ๋ํ ์์ ์ด๋ ์ ๋ ฅ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง ์๋๋ค. ์์ค ๋ฐ์ดํฐ์ ๋ํ ์์ , ์ ๋ ฅ์ ํด๋น ์์ค DB์์ ์ง์ ์ ๊ณตํ๋ ๊ฒ์ ์ฌ์ฉํ๋ฉด ๋๋ค.
API์ URL์์ ๋ค์์ ํญ๋ชฉ์ ๋ช ์์ ์ผ๋ก ํค์๋๋ก ๊ตฌ๋ถํ์ฌ ๋๋ฌ๋ธ๋ค.
- ์์ถ์ฒ ๋ฐ์ดํฐ์ ์ด๋ฆ
- ๋ชฉ๋ก๋์ด ๋ฐฉ์ : static or dynamic
- API ๋ฆฌ๋น์
์๋น์ค ์ค์ธ ๊ธฐ์กด ์ฝ๋๋ ํ ์คํธ ์์ด ์์ /๋ฐฐํฌํ๊ธฐ ์ด๋ ต๋ค. ๋ฐ๋ผ์, ๊ตฌํ๋ ์ฝ๋๋ revision ๋จ์๋ก ๋ฐฐํฌํ๊ณ , ์ฌ์ฉํ์ง ์๋ revision์ ์ฝ๋๋ ์ด์์๊ฐ ์ ๊ฒํ์ฌ ์๋น์ค์์ ์ ๊ฑฐํ๋ค. ์ฌ์ฉํ์ง ์์์ผ ํ๋ revision์ด ์ฌ์ฉ ์ค์ธ ๊ฒฝ์ฐ์๋ ์ด์์๊ฐ ์ ๊ทน์ ์ผ๋ก API ์ฌ์ฉ์์ ํ์ํ์ฌ ์ฌ์ฉํ์ง ์๋๋ก ์ ํํ๋ค. ์ด๋ฌํ revision ์ฒด๊ณ๋ฅผ ํตํด, API ๊ฐ์ ์ ๋น ๋ฅด๊ฒ ์งํํ๊ณ , ๋ฐฐํฌ ๊ณผ์ ์์ ํธํ์ฑ ์ถฉ๋ ๋ฌธ์ ๋ฅผ ํํผํ๋ค. - ๋ฐ์ดํฐ ์กฐํ ๋ฐฉ์
์์ค ๋ฐ์ดํฐ๋ฅผ ๋ชฉ๋ก ํํ๋ก ์ ๊ทผํ๋ list, ID๋ฅผ ํ๋ผ๋ฉํฐ๋ก ์ง์ ํ์ฌ ํน์ ๋ฌธ์๋ฅผ ์กฐํํ๋ each, 2๊ฐ์ง ์กฐํ ๋ฐฉ์์ ์ ๊ณตํ๋ค. each์ ๊ฒฝ์ฐ, ์ผ๋ฐ์ ์ธ ๋ฐ์ดํฐ ์ฐ๊ณ ๊ณผ์ ์์ ์ฌ์ฉ๋์ง ์๊ณ , ๋ฐ์ดํฐํ์ธ, ์ ํ๋ ๋ฐ์ดํฐ ์กฐํ, ๋๋ฒ๊น ๋ฑ ์ฉ๋๋ก ์ฌ์ฉ๋๋ค. - ๋ณํ๋ ๋ฐ์ดํฐ ํ์์ ์ด๋ฆ
http://cb.dev.example.com/v1/blog/r123/static/list.breeze2 http://cb.dev.example.com/v1/blog/r123/static/list.xml http://cb.dev.example.com/v1/blog/r123/static/each.xml http://cb.dev.example.com/v1/blog/current/static/list.breeze2 http://cb.dev.example.com/v1/blog/r123/dynamic/list.breeze2 http://cb.dev.example.com/v1/blog/current/dynamic/list.breeze2
๋ฐ์ดํฐ ์กฐํ ๋ฐฉ์์ ๋ฐ๋ผ ์๋์ ๊ฐ์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํ๋ค. ํ๋ผ๋ฏธํฐ๊ฐ ์ ๋ ฅ๋์ง ์์ ๊ฒฝ์ฐ, next_url๋ง์ ์ถ๋ ฅํ๊ฒ ๋๊ณ , ๋ฐ์ดํฐ๋ ์ถ๋ ฅํ์ง ์๋๋ค. ์ด ๊ฒฝ์ฐ ์ถ๋ ฅ๋๋ next_url์ ์ ์ ๋ฐ์ดํฐ ์ฐ๊ณ์ ๊ฒฝ์ฐ, ์ ์ฒด๋ชฉ๋ก์ ์ฒซ๋ฒ์งธ ๋ชฉ๋ก์ ํด๋นํ๊ณ , ๋์ ๋ฐ์ดํฐ ์ฐ๊ณ์ ๊ฒฝ์ฐ ์ต์ ๋ชฉ๋ก์ ํด๋นํ๋ค.
- list : from, count, to
์์ค๋ฐ์ดํฐ ๋ชฉ๋ก์ ๊ฐ entry์ ์ผ๋ จ๋ฒํธ๋ฅผ ๋ถ์ฌํ๊ณ , ์ด ์์์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฅผ ์ ๊ทผํ๊ฒ ๋๋ค. ์ด๋ฌํ ๋ชฉ๋ก์ ์ผ๋ จ๋ฒํธ๋ฅผ sequence id๋ผ ํต์นญํ๋ค. from ํ๋ผ๋ฏธํฐ์ ๊ฐ์ธ ์ผ๋ จ๋ฒํธ๋ ๋์๋น๊ต๊ฐ ๊ฐ๋ฅํ ๊ฐ์ด๋ฉด ์ถฉ๋ถํ๋ฉฐ, ์ค์ ์ด ๊ฐ์ ํด์ํ๋ ๊ฒ์ API ๋ด๋ถ ๊ตฌํ์ฒด์ด๋ค. ์ธ๋ถ์์๋ ์ด ๊ฐ์ ํด์ํ ํ์๊ฐ ์๋ค. to ํ๋ผ๋ฏธํฐ๋ ๋ฐ์ดํฐ ์ฐ๊ณ ํ๋ก์ธ์ค์ ์ข ๋ฃ์กฐ๊ฑด์ ๊ฐ๋ฆฌํค๋ฉฐ, from์ ๊ฐ์ด to์ ๊ฐ๋ณด๋ค ์ปค์ง๋ ๊ฒฝ์ฐ, ์ฐ๊ณ๋ฅผ ์ข ๋ฃํ๋ฉด ๋๋ค. - each : docid=xx docid=x1,x2,x3,x4 docid=x1&id=x2&id=x3 ํ๋ผ๋ก ์ง์ ํ ํน์ ํ ๋ฌธ์๋ฅผ ์กฐํํ๋ค. TODO - ํ๋ผ๋ฏธํฐ์ ์ด๋ฆ๊ณผ ๊ฐ ๋ฑ ํ์์ ์ถํ ๊ฒฐ์ .
๋ฐ์ดํฐ ์ฐ๊ณ ํ๋ก์ธ์ค๋ฅผ ๋จ์ํํ๊ธฐ ์ํด ๋ชฉ๋ก ์ ๊ทผ API์ ๊ฒฝ์ฐ, ์ฐ์๋ ์ดํ API ํธ์ถ์ URL์ ์ ๊ณตํ๋ค. API ํด๋ผ์ด์ธํธ ์ ์ฅ์์๋ ์ ๊ณต๋๋ ์ดํ API ํธ์ถ URL๋ง์ ๋ฐ๋ณต์ ์ผ๋ก ๊ณ์ ๋ฐ๋ผ๊ฐ๋ ๊ฒ์ผ๋ก ํด๋น ๋ชฉ๋ก์ ๋ชจ๋ ์ ๊ทผํ ์ ์๊ฒ ๋๋ค. ์ด๋, API๋ ๋น ์ง์์ด ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ ๊ทผํ ์ ์๋ค๋ ํน์ฑ์ ๋ณด์ฅํ๊ฒ ๋๋ค.
API ํด๋ผ์ด์ธํธ๊ฐ ๋ชฉ๋ก์ ๋ค์ ํธ์ถ ๋งํฌ๋ฅผ ์ด์ฉํ๊ฒ ๋๋ฉด, API ํธ์ถ ํ๋ผ๋ฉํฐ์ ์ธ๋ถ ๋ด์ฉ์ ๋ํด ๊ด์ฌํ์ง ์๊ฒ ๋๋ ์ฅ์ ์ด ์๋ค.
API์์ ๋ณํํ์ฌ ์ ๊ณตํ๋ ๋ฐ์ดํฐ์ ํ์์ผ๋ก๋ ๋ค์์ ๊ฒ๋ค์ด ์๋ค.
- custom json - ๊ฒ์์์ง์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ณํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
- source tag - ๊ฒ์์์ง์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ณํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
- mysql - MySQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์๋ฃ๋ฅผ ์ฐ๊ณํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
API ์๋ฒ๋ ๋จ์ผ ์๋ฒ๊ฐ ์๋๋ผ ์ฌ๋ฌ ์๋ฒ๋ก ๊ตฌ์ฑ๋ ์ ์๋ค. ์ด๋, ํน์ ์๋ฒ์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ, API ํด๋ผ์ด์ธํธ๊ฐ ํด๋น ์์ฒญ์ ๋ค๋ฅธ ์๋ฒ์ ์ฌ์๋ํ์ฌ ์ค๋ฅ๋ฅผ ๋ณต๊ตฌํ๊ฒ ๋๋ค. API ํด๋ผ์ด์ธํธ๋ next_url์ ์ฐธ์กฐํ์ฌ ์ดํ์ API ์์ฒญ์ ์ํํ๊ฒ ๋๋๋ฐ, API ์๋ฒ๋ ๋ณต์์ next_url์ ์ ๊ณตํ๋ฉฐ, ์ด next_url ์ ์ด๋ ๊ฒ์ ์ ํํ์ฌ ํธ์ถํ์ฌ๋ ๋๋ฑํ ๊ฒฐ๊ณผ๋ฅผ ๋ด๋ณด๋ด์ด ์ค๋ค. API ํด๋ผ์ด์ธํธ๋ ๋ณต์์ next_url์ ๋ํด ์์์ ์์๋ก ์์ฒญ์ ์๋ํ๋ฉด ๋๊ณ , ๋ชจ๋ next_url์ ๋ํด ํธ์ถ์คํจํ๋ ๊ฒฝ์ฐ, ๋ฐ๋ณต์ ์ผ๋ก ์์ฒญ์ ์ฌ์๋ ํ๋ค.
API ์๋ฒ๋ ๋ณต์์ next_url์ ๋ฆฌ์คํธ ํ์ผ๋ก ๋ด๋ณด๋ด์ด ์ค๋ค. 1๊ฐ์ null์ list ํญ๋ชฉ์ผ๋ก ๊ฐ๋ ๊ฒฝ์ฐ, next_url์ด ๋น์ด์๋ ๊ฒ์ด๋ค. ๋ฆฌ์คํธ ์์ฒด๊ฐ ์กด์ฌํ์ง ์๊ณ null์ด ๋๋ ๊ฒฝ์ฐ๋ ์์ด์ผ ํ๋ค.
"next_urls" : ["http://host1/path/api", "http://host2/path/api"] - ์ ์์ ์ธ ๊ฒฝ์ฐ
"next_urls" : [null] - ์ ์์ ์ผ๋ก next_url์ด ๋น์ด ์๋ ๊ฒฝ์ฐ
"next_urls" : null - ์๋ ๊ฒฝ์ฐ์. API์๋ฒ๋ ์ด๋ฌํ ์๋ต์ ํ์ง ์์.
API ์๋ฒ๋ ์ ์ API๋ฅผ ํตํด ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ฒ์๋ถํฐ ๋๊น์ง ์ค๋ณต์์ด, ๋น ์ง์์ด ์ ๊ทผํ ์ ์๋ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ค. ์ด๋, API ํด๋ผ์ด์ธํธ๋ ์ฌ๋ฌ์ฐจ๋ก API ์๋ฒ๋ฅผ ํธ์ถํ๊ฒ ๋๋ฉฐ, ๊ฐ ์๋ต๊ฒฐ๊ณผ๋ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ด ์ ์ง๋์ง ์์ ์ ์๋ค. ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ด ๊นจ์ด์ง ๊ฒฝ์ฐ, ๋์ ๋ฐ์ดํฐ์ฐ๊ณ๋ฅผ ํตํด ๋ฐ์ดํฐ ๋ณ๊ฒฝ ๋ถ๋ถ์ ๋ฐ์ํ๋ ๊ฒฝ์ฐ, ์๊ฐ์ด ์ง๋ ์ผ๊ด์ฑ์ด ์ ์ง๋ ์ ์๋ค.
์ ์ ๋ฐ์ดํฐ ์ฐ๊ณ์ ๊ฒฝ์ฐ, ์ด๊ธฐ ํธ์ถ URL ์ดํ next_url์ ๋ฐ๋ณต์ ์ผ๋ก ํธ์ถํ์ฌ ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ์ ๊ทผํ ์ ์์ผ๋ฉฐ, next_url์ด ๋น ๊ฐ์ด ๋๋ ๊ฒฝ์ฐ, ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ์ ๊ทผํ ๊ฒ์ด๋ฉฐ, ์ ์ ๋ฐ์ดํฐ ์ฐ๊ณ๊ฐ ์๋ฃ๋ ๊ฒ์ด๋ค.
API ์์ธ ํ๋ผ๋ฏธํฐ์์ ์ ์ ์์ธ์ ๊ฒฝ์ฐ, ์ต์ด ์๋์ from=seqid1&to=seqid2&count=100 ๊ณผ ๊ฐ์ next_url์ ์ ๊ณตํ๋ค. API ์๋ฒ๋ ํ๋ผ๋ฏธํฐ์์ ์ ๋ฌ๋๋ to ๊ฐ์ ํด๋นํ๋ ๋ฒ์๊น์ง ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๊ณ , ๊ทธ ์ดํ์๋ next_url์ ๋น ๊ฐ์ผ๋ก ์๋ตํ๋ค.
๋์ ๋ฐ์ดํฐ ์ฐ๊ณ์ ๊ฒฝ์ฐ, ์ด๊ธฐ ํธ์ถ URL ์ดํ next_url์ ๋ฐ๋ณต์ ์ผ๋ก ํธ์ถํ์ฌ ์ต์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ทผํ ์ ์๋ค. ๊ทธ๋ฌ๋ ์ ์ ๋ฐ์ดํฐ ์ฐ๊ณ์ ๋ฌ๋ฆฌ, ์๋ฃ์์ ์ด ์์ผ๋ฉฐ, ๋์ ๋ฐ์ดํฐ ์ฐ๊ณ๋ฅผ ์ ์งํ๋ ค๋ ๊ฒฝ์ฐ, ๋ฌดํํ next_url์ ๊ณ์ ์ ๊ทผํ์ฌ์ผ ํ๋ค. ๋์ ๋ฐ์ดํฐ ์ฐ๊ณ๋ฅผ ์ผ์์ ์ผ๋ก ์ค๋จํ๋ ๊ฒฝ์ฐ, API ํด๋ผ์ด์ธํธ๋ ์ด next_url์ ๊ธฐ์ตํด ๋๊ณ , ๋ฐ์ดํฐ ์ฐ๊ณ๋ฅผ ์ฌ๊ฐํ ๋ ๋ค์ ํธ์ถํ๋ฉด ๋๋ค.
์ ์ ๋ฐ์ดํฐ ์ฐ๊ณ์ ๊ฒฝ์ฐ, ์ด๋ค url์ ๋ํด 1ํ์ ๋ฐ์ดํฐ ์ฐ๊ณ๊ฐ ์๋ฃ๋๋ ์์ ์ด ์กด์ฌํ๋ค. ์ด ๊ฒฝ์ฐ, next_url์ด ๋น ๊ฐ์ด ๋๋ค. ๋ฐ์ดํฐ ์ฐ๊ณ๊ฐ ์๋ฃ๋๋ ์์ ์ ๋์ด์ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ์ด๊ฑฐ๋, from ํ๋ผ๋ฏธํฐ์ ๊ฐ์ด to ํ๋ผ๋ฏธํฐ์ ๊ฐ๋ณด๋ค ์ปค์ง๋ ๊ฒฝ์ฐ์ด๋ค. from, to ํ๋ผ๋ฉํฐ์ ๊ฐ์ ์ธ๋ถ์ ์ผ๋ก ์ดํด๋ณด๋ฉด, ์ ์ฒด ๋ฐ์ดํฐ์ ์๊ณผ ํ์ฌ ์งํ ์ ๋๋ฅผ ์ถ์ ํ ์ ์๋ค.
๋์ ๋ฐ์ดํฐ ์ฐ๊ณ์ ๊ฒฝ์ฐ, ์ต๊ทผ ๋ฐ์ดํฐ๊น์ง ๋ชจ๋ ์ฐ๊ณ๊ฐ ์๋ฃ๋๋ ์์ ์ด ์ผ์์ ์ผ๋ก ์กด์ฌํ๋ค. ์ด ๊ฒฝ์ฐ๋ฅผ ํ๋จํ ์ ์๋ ์๋ต์ API ์๋ฒ์์ ์ ๊ณตํ ์ ์๋ค. TODO