REST๋ REpresentational State Transfer ์ ์ฝ์๋ก ์น์ด HTTP๋ฅผ ์ ๋๋ก ์ฌ์ฉํ์ง ๋ชปํ๊ณ ์๋ ์ํฉ์ ๋ณด๊ณ HTTP์ ์ฅ์ ์ ์ต๋ํ ํ์ฉํ ์ ์๋ ์ํคํ
์ฒ๋ก REST๋ฅผ ์๊ฐํ๊ณ ์ด๋ HTTPํ๋กํ ์ฝ์ ์๋์ ๋ง๊ฒ ๋์์ธํ๋๋ก ์ ๋ํ๊ณ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๋ฌํ REST ๊ธฐ๋ณธ ์์น์ ์ฑ์คํ ์งํจ ์๋น์ค ๋์์ธ์ RESTful ์ด๋ผ๊ณ ํฉ๋๋ค!
์๋ฅผ ๋ค์ด, โREST APIโ๋ฅผ ์ ๊ณตํ๋ ์น ์๋น์ค๋ฅผ โRESTfulโํ๋ค๊ณ ํ ์ ์์ต๋๋ค.
๋ค์ ์ ๋ฆฌํ๋ฉด
REST๋ HTTP URI(Uniform Resource Identifier)๋ฅผ ํตํด ์์(Resource)์ ๋ช
์ํ๊ณ , HTTP Method๋ฅผ ํตํด Resource๋ฅผ ์ฒ๋ฆฌํ๋๋ก ์ค๊ณ๋ ์ํคํ
์ณ ์ด๊ณ ,
REST API๋ REST๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋น์ค API๋ฅผ ๊ตฌํํ ๊ฒ ์ ์๋ฏธํฉ๋๋ค!!
-
Uniform(์ ๋ํผ ์ธํฐํ์ด์ค): URI๋ก ์ง์ ํ ๋ฆฌ์์ค์ ๋ํ ์กฐ์ง์ ํต์ผ๋๊ณ ํ์ ์ ์ธ ์ธํฐํ์ด์ค๋ก ์ํํ๋ ์ํคํ ์ฒ ์คํ์ผ
-
Stateless(๋ฌด์ํ์ฑ): ์์ ์ ์ํ ์ํ์ ๋ณด๋ฅผ ๋ฐ๋ก ์ ์ฅํ๊ณ ๊ด๋ฆฌํ์ง ์์ต๋๋ค. ์ธ์ , ์ฟ ํค ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ์ง ์๊ธฐ ๋๋ฌธ์ API ์๋ฒ๋ ๋ค์ด์ค๋ ์์ฒญ๋ง ๋จ์ํ ์ฒ๋ฆฌํฉ๋๋ค. ๋ฐ๋ผ์ ์๋น์ค์ ์์ ๋๊ฐ ๋์์ง๊ณ ๋ถํ์ํ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ์ง ์์์ผ๋ก์จ ๊ตฌํ์ด ๋จ์ํด์ง๋๋ค.
-
Cacheable(์บ์ ๊ฐ๋ฅ): REST๋ HTTP๋ผ๋ ๊ธฐ์กด ์นํ์ค์ ๊ทธ๋๋ก ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์, ์น์์ ์ฌ์ฉํ๋ ๊ธฐ์กด ์ธํ๋ผ๋ฅผ ๊ทธ๋๋ก ํ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค. ๋ฐ๋ผ์ HTTP๊ฐ ๊ฐ์ง ์บ์ฑ ๊ธฐ๋ฅ์ด ์ ์ฉ ๊ฐ๋ฅํฉ๋๋ค. HTTP ํ๋กํ ์ฝ ํ์ค์์ ์ฌ์ฉํ๋ Last-Modifiedํ๊ทธ๋ E-Tag๋ฅผ ์ด์ฉํ๋ฉด ์บ์ฑ ๊ตฌํ์ด ๊ฐ๋ฅํฉ๋๋ค.
-
Self-descriptiveness (์์ฒด ํํ ๊ตฌ์กฐ): REST API ๋ฉ์์ง๋ง ๋ณด๊ณ ๋ ์ด๋ฅผ ์ฝ๊ฒ ์ดํด ํ ์ ์๋ ์์ฒด ํํ ๊ตฌ์กฐ์ ๋๋ค.
-
Client - Server ๊ตฌ์กฐ: REST ์๋ฒ๋ API ์ ๊ณต, ํด๋ผ์ด์ธํธ๋ ์ฌ์ฉ์ ์ธ์ฆ์ด๋ ์ปจํ ์คํธ(์ธ์ , ๋ก๊ทธ์ธ ์ ๋ณด)๋ฑ์ ์ง์ ๊ด๋ฆฌํ๋ ๊ตฌ์กฐ๋ก ๊ฐ๊ฐ์ ์ญํ ์ด ํ์คํ ๊ตฌ๋ถ๋๊ธฐ ๋๋ฌธ์ ํด๋ผ์ด์ธํธ์ ์๋ฒ์์ ๊ฐ๋ฐํด์ผ ํ ๋ด์ฉ์ด ๋ช ํํด์ง๊ณ ์๋ก๊ฐ ์์กด์ฑ์ด ์ค์ด๋ค๊ฒ ๋ฉ๋๋ค.
-
๊ณ์ธตํ ๊ตฌ์กฐ: REST ์๋ฒ๋ ๋ค์ค ๊ณ์ธต์ผ๋ก ๊ตฌ์ฑ๋ ์ ์์ผ๋ฉฐ ๋ณด์, ๋ก๋ ๋ฐธ๋ฐ์ฑ, ์ํธํ ๊ณ์ธต์ ์ถ๊ฐํด ๊ตฌ์กฐ์์ ์ ์ฐ์ฑ์ ๋ ์ ์๊ณ PROXY, ๊ฒ์ดํธ์จ์ด ๊ฐ์ ๋คํธ์ํฌ ๊ธฐ๋ฐ์ ์ค๊ฐ๋งค์ฒด๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ํฉ๋๋ค.
REST API๋ Resource(์์), Verb(ํ์), Representation(ํํ) ์ ์ธ๊ฐ์ง ์์๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. REST๋ ์์ฒด ํํ ๊ตฌ์กฐ๋ก ๊ตฌ์ฑ๋์ด REST API๋ง์ผ๋ก๋ HTTP๋ด์ฉ์ ์ดํดํ ์ ์์ต๋๋ค!
๐ก ์ฌ๊ธฐ์ payload ๋?
์ ์ก๋๋ ๋ฐ์ดํฐ๋ฅผ ์๋ฏธํฉ๋๋ค. ์๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ก ํ ๋๋ ํค๋, ๋ฉํ๋ฐ์ดํฐ, ์๋ฌ ์ฒดํฌ ๋นํธ๋ฑ๊ณผ ๊ฐ์ ๋ค์ํ ์์๋ค์ ํจ๊ป ๋ณด๋ด์, ๋ฐ์ดํฐ ์ ์ก์ ํจ์จ๊ณผ ์์ ์ฑ์ ๋์ ๋๋ค.์ด ๋ ๋ณด๋ด๊ณ ์ ํ๋ ๋ฐ์ดํฐ ์์ฒด๊ฐ ๋ฐ๋ก payload์ ๋๋ค!json ์์์ payload๋ "data"
{ "status" : "from": "localhost", "to": "http://melonicedlatte.com/chatroom/1", "method": "GET", //payload "data":{ "message" : "There is a cutty dog!" } }
๊ฐ์ฅ ์ค์ํ ์์น์ ๋๊ฐ์ง๋ก, URI๋ ๋ฆฌ์์ค๋ฅผ ํํ ํ๋๋ฐ ์ง์คํ๊ณ ํ์์ ๋ํ ์ ์๋ HTTP ์์ฒญ ๋ฉ์๋๋ฅผ ํตํด ํ๋ ๊ฒ์ด RESTful API๋ฅผ ์ค๊ณํ๋ ์ค์ฌ ๊ท์น์ ๋๋ค!
-
URI๋ ๋ฆฌ์์ค๋ฅผ ํํํด์ผ ํ๋ค!
:
๋ฆฌ์์ค ํํ์ ์ค์ ์ ๋๊ณ๋ช ์ฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ฐ๋ผ์ ์ด๋ฆ์ get ๊ฐ์ ํ์์ ๋ํ ํํ์ด ๋ค์ด๊ฐ์๋ ์๋ฉ๋๋ค!//bad GET / getTodos / 1; GET / todos / show / 1; //good GET / todos / 1;
-
๋ฆฌ์์ค์ ๋ํ ํ์๋ HTTP์์ฒญ ๋ฉ์๋๋ก ํํํ๋ค!
: HTTP์์ฒญ ๋ฉ์๋๋ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์๊ฒ ์์ฒญ์ ์ข ๋ฅ์ ๋ชฉ์ (๋ฆฌ์์ค์ ๋ํ ํ์)์ ์๋ฆฌ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์ฃผ๋ก ์ฐ์ด๋ ์์ฒญ ๋ฉ์๋ 5๊ฐ์ง(GET, POST, PUT, PATCH, DELETE)๊ฐ ์์ต๋๋ค
: ๋ฆฌ์์ค์ ๋ํ ํ์๋ HTTP์์ฒญ ๋ฉ์๋๋ฅผ ํตํด ํํํ๋ฉฐ URI์ ํํํ์ง ์์์!
//bad GET /todos/delete/1 //good DELETE /todos/1
์์ฒญ method์ ๋ฐ๋ฅธ ์ค์ต์
C:\Users\wjdal\Documents\json-server-examํ์ผ ์ฐธ๊ณ !
[์ฐธ๊ณ ]
: ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive
: https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html

