REST ์ํคํ ์ฒ ์คํ์ผ์ด ๋ค๋ฅธ ๋คํธ์ํฌ ๊ธฐ๋ฐ ์คํ์ผ๊ณผ ๊ตฌ๋ณ๋๋ ์ค์ฌ ๊ธฐ๋ฅ์ ๊ตฌ์ฑ ์์ ๊ฐ์ ์ผ๊ด๋ ์ธํฐํ์ด์ค์ ์ค์ ์ ๋๋ค๋ ์ ์ ๋๋ค. ์ํํธ์จ์ด ์์ง๋์ด๋ง์ ์ผ๋ฐ์ฑ ์์น์ ๊ตฌ์ฑ ์์ ์ธํฐํ์ด์ค์ ์ ์ฉํจ์ผ๋ก์จ ์ ์ฒด ์์คํ ์ํคํ ์ฒ๊ฐ ๋จ์ํ๋๊ณ ์ํธ์์ฉ์ ๊ฐ์์ฑ์ด ํฅ์๋ฉ๋๋ค. ๊ตฌํ์ ์ ๊ณตํ๋ ์๋น์ค์ ๋ถ๋ฆฌ๋๋ฉฐ, ์ด๋ ๋ ๋ฆฝ์ ์ธ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ ์ด์งํฉ๋๋ค.
-Roy Fielding, https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm#sec_5_1_5
์ด ์์ธ์ด์์๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋งฅ๋ฝ์์ ๋ ๊ฐ์ง ์ ํ์ ๊ฒฐํฉ ํด์ (Decoupling)๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค:
์ฐ๋ฆฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ค์์๋ ํ์ดํผ๋ฏธ๋์ด API๊ฐ ํ๋ก ํธ์๋์ ๋ฐฑ์๋๋ฅผ ๊ธด๋ฐํ๊ฒ ๊ฒฐํฉ์ํค์ง๋ง, ์ด ์ฌ์ค์๋ ๋ถ๊ตฌํ๊ณ ํ์ดํผ๋ฏธ๋์ด API๊ฐ ๋ณํ์ ๋ ์ ๊ฒฌ๋๋ ๊ฒฝํฅ์ด ์์์ ์๊ฒ ๋ ๊ฒ์ ๋๋ค.
๊ฒฐํฉ(Coupling)์ ์ํํธ์จ์ด ์์คํ ์์ ๋ ๊ฐ์ ๋ชจ๋์ด๋ ์์คํ ์ ์ธก๋ฉด์ด ๋์ ์ํธ ์์กด์ฑ์ ๊ฐ์ง๋ ํน์ฑ์ ๋งํฉ๋๋ค. **๊ฒฐํฉ ํด์ (Decoupling)**๋ ์ด์ ๊ด๋ จ์ด ์๋ ๋ชจ๋ ๊ฐ์ ์ํธ ์์กด์ฑ์ ์ค์ฌ ๋ ๋ฆฝ์ ์ผ๋ก ๋ฐ์ ํ ์ ์๋๋ก ํ๋ ํ์์ ๋๋ค.
๊ฒฐํฉ ๋ฐ ๊ฒฐํฉ ํด์ ๊ฐ๋ ์ ์์ง๋ ฅ(Cohesion)๊ณผ ๋ฐ์ ํ๊ฒ (๊ทธ๋ฆฌ๊ณ ๋ฐ๋๋ก) ์ฐ๊ด๋์ด ์์ต๋๋ค. ์์ง๋ ฅ์ด ๋์ ์ํํธ์จ์ด๋ ๊ด๋ จ๋ ๋ ผ๋ฆฌ๊ฐ ๋ชจ๋์ด๋ ๊ฐ๋ ์ ๊ฒฝ๊ณ ๋ด์ ์กด์ฌํ๋ฉฐ, ์ฝ๋๋ฒ ์ด์ค ์ ์ฒด์ ํผ์ง์ง ์์ต๋๋ค. (๊ด๋ จ ๊ฐ๋ ์ผ๋ก๋ ์ฐ๋ฆฌ์ ํ๋์ ์ง์ญ์ฑ ์์ด๋์ด๊ฐ ์์ต๋๋ค.)
์ผ๋ฐ์ ์ผ๋ก ๊ฒฝํ์ด ๋ง์ ๊ฐ๋ฐ์๋ค์ ๊ฒฐํฉ ํด์ ๋๊ณ ์์ง๋ ฅ ์๋ ์์คํ ์ ์งํฅํฉ๋๋ค.
์ค๋๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ์ผ๋ฐ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ JSON ๋ฐ์ดํฐ API๋ฅผ ์์ฑํ๊ณ ์ด๋ฅผ React์ ๊ฐ์ JavaScript ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ์ฌ ์๋นํ๋ ๊ฒ์ ๋๋ค. ์ด ์ ํ๋ฆฌ์ผ์ด์ ์์ค์ ์ํคํ ์ฒ ๊ฒฐ์ ์ ํ๋ก ํธ์๋ ์ฝ๋์ ๋ฐฑ์๋ ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ๊ณ , ์ด JSON API๋ฅผ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ , ํ์ฌ ํด๋ผ์ด์ธํธ ํตํฉ ๋ฑ๊ณผ ๊ฐ์ ๋ค๋ฅธ ์ปจํ ์คํธ์์ ์ฌ์ฌ์ฉํ ์ ์๊ฒ ํฉ๋๋ค.
์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ค์ ๊ฒฐํฉ ํด์ ์ ๋๋ค. ์๋ํ๋ฉด ๊ฒฐํฉ ํด์ ์ ๊ฒฐ์ ๊ณผ ๊ตฌํ์ด ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์์ ์ํด ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์ ๋๋ค. JSON API๋ ์ํํธ์จ์ด์ ๋ ๋ถ๋ถ ์ฌ์ด์ โ๋จ๋จํโ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ ๊ฐ ์ข์ํ๋ ์์๋ฅผ ์ฌ์ฉํ์ฌ, https://example.com/account/12345
์ GET
์๋ํฌ์ธํธ๋ฅผ ๊ฐ์ง๊ณ ์๋ ์ํ์ ์ํ ๊ฐ๋จํ JSON์ ๊ณ ๋ คํด๋ณด๊ฒ ์ต๋๋ค.
์ด API๋ ๋ค์๊ณผ ๊ฐ์ ๋ด์ฉ์ ๋ฐํํ ์ ์์ต๋๋ค:
HTTP/1.1 200 OK
{
"account": {
"account_number": 12345,
"balance": {
"currency": "usd",
"value": -50.00
},
"status": "overdrawn"
}
}
์ด ๋ฐ์ดํฐ API๋ ์น ์ ํ๋ฆฌ์ผ์ด์ , ๋ชจ๋ฐ์ผ ํด๋ผ์ด์ธํธ, ํ์ฌ ๋ฑ ์ด๋ค ํด๋ผ์ด์ธํธ์์๋ ์๋นํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ํน์ ํด๋ผ์ด์ธํธ์ ์ข ์๋์ง ์์ต๋๋ค.
์ง๊ธ๊น์ง๋ ์ ๋์์ต๋๋ค. ํ์ง๋ง ์ด ๊ฒฐํฉ ํด์ ๊ฐ ์ค์ ๋ก๋ ์ด๋ป๊ฒ ์๋ํ ๊น์?
์ฐ๋ฆฌ์ ์์ธ์ด Splitting Your Data & Application APIs: Going Further์์ ๋ค์๊ณผ ๊ฐ์ ์ธ์ฉ๋ฌธ์ ์ฐพ์ ์ ์์ต๋๋ค:
์์ฆ ๋ด ์ผ์์ ๊ฐ์ฅ ์ด๋ ค์ด ๋ถ๋ถ์ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ฅผ ์ํด API๋ฅผ ์ค๊ณํ๋ ๊ฒ์ ๋๋ค. ๋ํ๋ ๋ถ๊ฐํผํ๊ฒ ๋ค์๊ณผ ๊ฐ์ด ์งํ๋ฉ๋๋ค:
Dev โ ์ด ํ๋ฉด์๋ ๋ฐ์ดํฐ ์์ x, y, z๊ฐ ์์ต๋๋คโฆ ์ด ํ์์ ์๋ต์ ์ ๊ณตํ๋ API๋ฅผ ๋ง๋ค์ด ์ฃผ์ค ์ ์๋์? {x: , y:, z: }
Me โ ์๊ฒ ์ต๋๋ค.
Jean-Jacques Dubray - https://www.infoq.com/articles/no-more-mvc-frameworks
์ด ์ธ์ฉ๋ฌธ์ ์ฐ๋ฆฌ๊ฐ ๊ฒฐํฉ์ ํผ์นํฌํฌ๋ก (๋๋ ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ JSON API๋ก) ๋ชฐ์๋์ง๋ง, ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฉ JSON API ์๋ํฌ์ธํธ์ ๋ํ ์์ฒญ์ ํตํด ๋ค์ ๋์์์์ ๋ณด์ฌ์ค๋๋ค. ์ด๋ฌํ ์์ฒญ์ ํ๋ก ํธ์๋์ ๋ฐฑ์๋ ์ฝ๋๋ฅผ ๋ค์ ๊ฒฐํฉ์ํต๋๋ค: JSON API๋ ๋ ์ด์ ์ผ๋ฐ์ ์ธ JSON ๋ฐ์ดํฐ API๋ฅผ ์ ๊ณตํ์ง ์๊ณ , ๋์ ํ๋ก ํธ์๋์ ํน์ ์๊ตฌ์ ๋ง๋ API๋ฅผ ์ ๊ณตํ๊ฒ ๋ฉ๋๋ค.
๋ ๋์ ๊ฒ์, ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฐ์ ํจ์ ๋ฐ๋ผ ํ๋ก ํธ์๋์ ์๊ตฌ ์ฌํญ์ด ์์ฃผ ๋ณ๊ฒฝ๋ ์ ์์ผ๋ฉฐ, ์ด๋ JSON API์ ์์ ์ ํ์๋ก ํ๋ค๋ ๊ฒ์ ๋๋ค. ๋ง์ฝ ๋ค๋ฅธ ๋น์น ์ ํ๋ฆฌ์ผ์ด์ ํด๋ผ์ด์ธํธ๊ฐ ์๋์ API์ ์์กดํ๊ฒ ๋๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
์ด ๋ฌธ์ ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๋ค๋ฅธ ๋น์น ์ ํ๋ฆฌ์ผ์ด์ ํด๋ผ์ด์ธํธ๋ฅผ ์ง์ํ ๋ ๋ง์ JSON ๋ฐ์ดํฐ API ๊ฐ๋ฐ์๋ค์ด ์ง๋ฉดํ๋ โ๋ฒ์ ๊ด๋ฆฌ ์ง์ฅโ์ผ๋ก ์ด์ด์ง๋๋ค.
์ด ๋ฌธ์ ์ ๋ํ ํ ๊ฐ์ง ์ ์ฌ์ ์ธ ํด๊ฒฐ์ฑ ์ GraphQL์ ๋์ ํ๋ ๊ฒ์ ๋๋ค. GraphQL์ ์ฌ์ฉํ๋ฉด API ํด๋ผ์ด์ธํธ์ ์๊ตฌ๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค API๋ฅผ ์์ฃผ ๋ณ๊ฒฝํ์ง ์์๋ ๋๋ ํจ์ฌ ๋ ํํ๋ ฅ ์๋ JSON API๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค.
์ด๊ฒ์ ์์์ ์ค๋ช ํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ํฉ๋ฆฌ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ด์ง๋ง, ๋ช ๊ฐ์ง ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ API ๋ณ๋์ฑ/๋ณด์ ์ ์ถฉ์ ์์ธ์ด์์ ์ค๋ช ํ ๋ฐ์ ๊ฐ์ด, ๊ฐ์ฅ ํฐ ๋ฌธ์ ๋ ๋ณด์์ ๋๋ค.
Facebook์ ํ์ฉ ๋ชฉ๋ก์ ์ฌ์ฉํ์ฌ GraphQL์ด ๋์ ํ๋ ๋ณด์ ๋ฌธ์ ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ฌ๋ GraphQL์ ์ฌ์ฉํ๋ ๋ง์ ๊ฐ๋ฐ์๋ค์ด ๊ด๋ จ๋ ๋ณด์ ์ํ์ ์ดํดํ์ง ๋ชปํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์์ผ๋ก๋, Max Chernyak์ด ๊ทธ์ ๊ธฐ์ฌ Donโt Build A General Purpose API To Power Your Own Front End์์ ์ ์ํ ๋ฐฉ๋ฒ์ ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ๋ ๊ฐ์ง JSON API๋ฅผ ๊ตฌ์ถํ๋ ๊ฒ์ ๋๋ค:
์ด๊ฒ์ ์ฌ๋ฌ๋ถ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ํ๋ก ํธ์๋์ ์ด๋ฅผ ์ง์ํ๋ ๋ฐฑ์๋ ์ฝ๋ ๊ฐ์ ๋ณธ์ง์ ์ธ ๊ฒฐํฉ์ ํด๊ฒฐํ๊ธฐ ์ํ ์ค์ฉ์ ์ธ ํด๊ฒฐ์ฑ ์ด๋ฉฐ, ์ผ๋ฐ์ ์ธ GraphQL API์์ ๋ฐ์ํ๋ ๋ณด์ ์ ์ถฉ์ ์ ํฌํจํ์ง ์์ต๋๋ค.
์ด์ ํ์ดํผ๋ฏธ๋์ด API๊ฐ ์ํํธ์จ์ด๋ฅผ ์ด๋ป๊ฒ ๊ฒฐํฉ ํด์ ํ๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์์์ ๋ณธ https://example.com/account/12345
์ ๋ํ ๋์ผํ GET
์์ฒญ์ ๋ํ ์ ์ฌ์ ์ธ ์๋ต์ ๊ณ ๋ คํด๋ณด์ธ์:
HTTP/1.1 200 OK
<html>
<body>
<div>๊ณ์ข ๋ฒํธ: 12345</div>
<div>์์ก: $100.00 USD</div>
<div>๋งํฌ:
<a href="/accounts/12345/deposits">์๊ธ</a>
<a href="/accounts/12345/withdrawals">์ถ๊ธ</a>
<a href="/accounts/12345/transfers">์ก๊ธ</a>
<a href="/accounts/12345/close-requests">๊ณ์ข ํด์ง</a>
</div>
<body>
</html>
(๋ค, ์ด๊ฒ์ API ์๋ต์ ๋๋ค. ์ด๋ฒ ๊ฒฝ์ฐ์๋ ํ์ดํผ๋ฏธ๋์ด ํ์์ ์๋ต์ด๋ฉฐ, HTML๋ก ์ ๊ณต๋ฉ๋๋ค.)
์ฌ๊ธฐ์ ๋ณผ ์ ์๋ฏ์ด, ์ ํ๋ฆฌ์ผ์ด์ ์์ค์์ ์ด ์๋ต์ โํ๋ก ํธ์๋โ์ ๋ ๊ธด๋ฐํ๊ฒ ๊ฒฐํฉ๋ ์ ์์ต๋๋ค. ์ฌ์ค, ์ด ์๋ต์ ๋ฆฌ์์ค์ ๋ํ ๋ฐ์ดํฐ๋ฟ๋ง ์๋๋ผ ์ด ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉ์์๊ฒ ์ด๋ป๊ฒ ์ ํํ ํ์ํ ์ง์ ๋ํ ๋ ์ด์์ ์ ๋ณด๋ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ํ๋ก ํธ์๋ ์์ฒด์ ๋๋ค.
์๋ต์๋ ํ์ดํผ๋ฏธ๋์ด ์ ์ด ์์, ์ด ๊ฒฝ์ฐ์๋ ๋งํฌ๊ฐ ํฌํจ๋์ด ์์ด ์ฌ์ฉ์๊ฐ ์ด ํ์ดํผ๋ฏธ๋์ด ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ ๊ณตํ๋ ํ์ดํผ๋ฏธ๋์ด API๋ฅผ ๊ณ์ ํ์ํ ์ ์์ต๋๋ค.
๊ทธ๋ ๋ค๋ฉด, ์ด ๊ฒฝ์ฐ ๊ฒฐํฉ ํด์ ๋ ์ด๋์์ ์ผ์ด๋๊ณ ์์๊น์?
์ด ๊ฒฝ์ฐ ๊ฒฐํฉ ํด์ ๋ ๋ ๋ฎ์ ์์ค์์ ๋ฐ์ํ๊ณ ์์ต๋๋ค. ์ฆ, ๋คํธ์ํฌ ์ํคํ ์ฒ ์์ค์์ ์์คํ ์์ค์ผ๋ก ๋ฐ์ํฉ๋๋ค. ํ์ดํผ๋ฏธ๋์ด ์์คํ ์ ํ์ดํผ๋ฏธ๋์ด ํด๋ผ์ด์ธํธ(์น์ ๊ฒฝ์ฐ, ๋ธ๋ผ์ฐ์ )๋ฅผ ํ์ดํผ๋ฏธ๋์ด ์๋ฒ์์ ๊ฒฐํฉ ํด์ ํ๋๋ก ์ค๊ณ๋์์ต๋๋ค.
์ด๋ REST์ ์ผ๊ด๋ ์ธํฐํ์ด์ค ์ ์ฝ ์กฐ๊ฑด์ ํตํด, ํนํ ์ ํ๋ฆฌ์ผ์ด์ ์ํ์ ์์ง์ผ๋ก์์ ํ์ดํผ๋ฏธ๋์ด(HATOEAS)๋ฅผ ์ฌ์ฉํ์ฌ ์ฃผ๋ก ๋ฌ์ฑ๋ฉ๋๋ค.
์ด๋ฌํ ์คํ์ผ์ ๊ฒฐํฉ ํด์ ๋ ๋ ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์์ค์์ ๋ ๊ธด๋ฐํ ๊ฒฐํฉ์ ํ์ฉํ๋ฉด์(์ด๋ ๋ณธ์ง์ ์ธ ๊ฒฐํฉ์ผ ์ ์์) ์ ์ฒด ์์คํ ์ ๊ฒฐํฉ ํด์ ์ ์ด์ ์ ์ฌ์ ํ ์ ์งํฉ๋๋ค.
์ด๋ฌํ ๊ฒฐํฉ ํด์ ๊ฐ ์ค์ ๋ก ์ด๋ป๊ฒ ์๋ํ๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์ํ ๊ณ์ข์์ ๋ค๋ฅธ ์ํ์ผ๋ก ์ก๊ธํ๋ ๊ธฐ๋ฅ๊ณผ ๊ณ์ข๋ฅผ ํด์งํ๋ ๊ธฐ๋ฅ์ ์ ๊ฑฐํ๊ณ ์ถ๋ค๊ณ ๊ฐ์ ํด๋ณด๊ฒ ์ต๋๋ค.
์ด GET
์์ฒญ์ ๋ํ ํ์ดํผ๋ฏธ๋์ด ์๋ต์ ์ด๋ป๊ฒ ๋ณด์ผ๊น์?
HTTP/1.1 200 OK
<html>
<body>
<div>๊ณ์ข ๋ฒํธ: 12345</div>
<div>์์ก: $100.00 USD</div>
<div>๋งํฌ:
<a href="/accounts/12345/deposits">์๊ธ</a>
<a href="/accounts/12345/withdrawals">์ถ๊ธ</a>
</div>
<body>
</html>
์ด ์๋ต์์๋ HTML์์ ํด๋น ๋ ์์ ์ ๋ํ ๋งํฌ๊ฐ ์ ๊ฑฐ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ๋ธ๋ผ์ฐ์ ๋ ๋จ์ํ ์ HTML์ ์ฌ์ฉ์์๊ฒ ๋ ๋๋งํฉ๋๋ค. ๊ฑฐ์ ๋ชจ๋ ํด๋ผ์ด์ธํธ๊ฐ ์ด์ API๋ฅผ ์ฌ์ฉํ์ง ์๊ฒ ๋ฉ๋๋ค. API๋ ํ์ดํผ๋ฏธ๋์ด ๋ด์ ์ธ์ฝ๋ฉ๋๊ณ ํ์ดํผ๋ฏธ๋์ด๋ฅผ ํตํด ๋ฐ๊ฒฌ๋ฉ๋๋ค.
์ด๊ฒ์ ํด๋ผ์ด์ธํธ๋ฅผ ์์์ํค์ง ์๊ณ API๋ฅผ ํฌ๊ฒ ๋ณ๊ฒฝํ ์ ์์์ ์๋ฏธํฉ๋๋ค.
์ด ์ ์ฐ์ฑ์ REST-ful ๋คํธ์ํฌ ์ํคํ ์ฒ, ํนํ HATEOAS์ ํต์ฌ์ ๋๋ค.
๋ณด์๋ค์ํผ, ์ฐ๋ฆฌ์ ํ๋ก ํธ์๋์ ๋ฐฑ์๋ ๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์์ค ๊ฒฐํฉ์ด ํจ์ฌ ๋ ๊ธด๋ฐํด์ก์์๋ ๋ถ๊ตฌํ๊ณ , REST-ful ํ์ดํผ๋ฏธ๋์ด ์์คํ ์ด ์ ๊ณตํ๋ ์ผ๊ด๋ ์ธํฐํ์ด์ค ์ธก๋ฉด์์ ๋คํธ์ํฌ ์ํคํ ์ฒ ๊ฒฐํฉ ํด์ ๋๋ถ์ ์ฐ๋ฆฌ๋ ๋ ํฐ ์ ์ฐ์ฑ์ ๊ฐ๊ฒ ๋ฉ๋๋ค.
๋ง์ ์ฌ๋๋ค์ด ์ด ํ์ดํผ๋ฏธ๋์ด API๊ฐ ์น ์ ํ๋ฆฌ์ผ์ด์ ์๋ ์ ์ฐํ ์ ์์ง๋ง, ์ผ๋ฐ์ ์ธ API๋ก์๋ ๋์ฐํ๋ค๊ณ ๋ฐ๋ฐํ ์ ์์ต๋๋ค.
์ด๊ฒ์ ์ฌ์ค์ ๋๋ค. ์ด ํ์ดํผ๋ฏธ๋์ด API๋ ํน์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๊ฒ ์กฐ์ ๋์์ต๋๋ค. ์ด HTML์ ๋ค์ด๋ก๋ํ๊ณ ๊ตฌ๋ฌธ ๋ถ์ํ์ฌ ์ ๋ณด๋ฅผ ์ถ์ถํ๋ ค๊ณ ํ๋ฉด ๋ฒ๊ฑฐ๋กญ๊ณ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ์ต๋๋ค. ์ด ํ์ดํผ๋ฏธ๋์ด API๋ ์ ์ ํ ํ์ดํผ๋ฏธ๋์ด ํด๋ผ์ด์ธํธ๊ฐ ์๋นํ๋ ๋ ํฐ ํ์ดํผ๋ฏธ๋์ด ์์คํ ์ ์ผ๋ถ๋ก์๋ง ์๋ฏธ๊ฐ ์์ต๋๋ค.
๋ฐ๋ก ์ด ์ด์ ๋๋ฌธ์ ์ฐ๋ฆฌ๋ Splitting Your Data & Application APIs: Going Further์์ ํ์ดํผ๋ฏธ๋์ด API์ ํจ๊ป ์ผ๋ฐ์ ์ธ JSON API๋ฅผ ์์ฑํ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํ์ดํผ๋ฏธ๋์ด์ ์ ์ฐ์ฑ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ํ์ฉํ๋ ๋์์ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ , ํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ๋ฑ์ ์ํ ์ผ๋ฐ์ ์ธ JSON API๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค.
(์ฐธ๊ณ ๋ก, ํ์ดํผ๋ฏธ๋์ด ๊ธฐ๋ฐ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ๋ ์ข์ ์ ํ์ผ ์ ์์ต๋๋ค!)
์ด ์์ธ์ด์์๋ ๋ ๊ฐ์ง ์ ํ์ ๊ฒฐํฉ ํด์ ์ ๋ํด ์ดํด๋ณด์์ต๋๋ค:
๊ทธ๋ฆฌ๊ณ ํ์ดํผ๋ฏธ๋์ด ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ ๊ธด๋ฐํ ์ ํ๋ฆฌ์ผ์ด์ ์์ค ๊ฒฐํฉ์ด ์์์๋ ๋ถ๊ตฌํ๊ณ , ํ์ดํผ๋ฏธ๋์ด ์์คํ ์ด ๋ณํ์ ๋ ์ ๋์ํ ์ ์๋ค๋ ๊ฒ์ ํ์ธํ์ต๋๋ค.