"Representational State Transfer"์ ์ฝ์
์์์ ์ด๋ฆ(์์์ ํํ)์ผ๋ก ๊ตฌ๋ถํ์ฌ ํด๋น ์์์ ์ํ(์ ๋ณด)๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ชจ๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ฆ, ์์(resource)์ ํํ (representation)์ ์ํ ์ํ ์ ๋ฌ
์์: ํด๋น ์ํํธ์จ์ด๊ฐ ๊ด๋ฆฌํ๋ ๋ชจ๋ ๊ฒ
EX) ๋ฌธ์, ๊ทธ๋ฆผ, ๋ฐ์ดํฐ, ํด๋น ์ํํธ์จ์ด ์์ฒด ๋ฑ
์์์ ํํ: ๊ทธ ์์์ ํํํ๊ธฐ ์ํ ์ด๋ฆ
EX) DB์ ํ์ ์ ๋ณด๊ฐ ์์์ผ ๋, 'Students'๋ฅผ ์์์ ํํ์ผ๋ก ์ ํ๋ค.
์ํ(์ ๋ณด) ์ ๋ฌ
์๋ ์์ด๋ ์น(www) ์ ๊ฐ์ ๋ถ์ฐ ํ์ดํผ๋ฏธ๋์ด ์์คํ ์ ์ํ ์ํํธ์จ์ด ๊ฐ๋ฐ ์ํคํ ์ฒ์ ํ์
HTTP URI(Uniform Resource Identifier)๋ฅผ ํตํด ์์(Resource)์ ๋ช ์ํ๊ณ , HTTP Method(POST, GET, PUT, DELETE)๋ฅผ ํตํด ํด๋น ์์์ ๋ํ CRUD Operation์ ์ ์ฉํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ฆ, REST๋ ์์ ๊ธฐ๋ฐ์ ๊ตฌ์กฐ(ROA, Resource Oriented Architecture) ์ค๊ณ์ ์ค์ฌ์ Resource๊ฐ ์๊ณ HTTP Method๋ฅผ ํตํด Resource๋ฅผ ์ฒ๋ฆฌํ๋๋ก ์ค๊ณ๋ ์ํคํ ์ณ๋ฅผ ์๋ฏธํ๋ค.
์น ์ฌ์ดํธ์ ์ด๋ฏธ์ง, ํ ์คํธ, DB ๋ด์ฉ ๋ฑ์ ๋ชจ๋ ์์์ ๊ณ ์ ํ ID์ธ HTTP URI๋ฅผ ๋ถ์ฌํ๋ค.
CRUD Operation
Create : ์์ฑ (POST)
Read : ์กฐํ (GET)
Update : ์์ (PUT)
Delete : ์ญ์ (DELETE)
HEAD : header ์ ๋ณด์กฐํ (HEAD)
'์ ํ๋ฆฌ์ผ์ด์ ๋ถ๋ฆฌ ๋ฐ ํตํฉ'
'๋ค์ํ ํด๋ผ์ด์ธํธ์ ๋ฑ์ฅ'
์ต๊ทผ์ ์๋ฒ ํ๋ก๊ทธ๋จ์ ๋ค์ผํ ๋ธ๋ผ์ฐ์ ์ ์๋๋ก์ด๋ํฐ, ์์ดํฐ๊ณผ ๊ฐ์ ๋ชจ๋ฐ์ผ ๋๋ฐ์ด์ค์์๋ ํต์ ์ ํ ์ ์์ด์ผํ๋ค.
์ด๋ฌํ ๋ฉํฐ ํ๋ซํผ์ ๋ํ ์ง์์ ์ํด ์๋น์ค ์์์ ๋ํ ์ํคํ ์ฒ๋ฅผ ์ธ์ฐ์ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ชจ์ํ ๊ฒฐ๊ณผ, REST์ ๊ด์ฌ์ ๊ฐ์ง๊ฒ ๋์๋ค.
/groups/:group_id
์ ๊ฐ์ HTTP URI ๋ค.์์์ด ์๋ ์ชฝ์ด Server, ์์์ ์์ฒญํ๋ ์ชฝ์ด Client๊ฐ ๋๋ค.
REST Server: API๋ฅผ ์ ๊ณตํ๊ณ ๋น์ง๋์ค ๋ก์ง ์ฒ๋ฆฌ ๋ฐ ์ ์ฅ์ ์ฑ ์์ง๋ค.
Client: ์ฌ์ฉ์ ์ธ์ฆ์ด๋ context(์ธ์ , ๋ก๊ทธ์ธ์ ๋ณด)๋ฑ์ ์ง์ ๊ด๋ฆฌํ๊ณ ์ฑ ์์ง๋ค.
์๋ก ๊ฐ ์์กด์ฑ์ด ์ค์ด๋ ๋ค.
HTTP ํ๋กํ ์ฝ์ Stateless Protocol์ด๋ฏ๋ก REST ์ญ์ ๋ฌด์ํ์ฑ์ ๊ฐ๋๋ค.
Client์ context๋ฅผ Server์ ์ ์ฅํ์ง ์๋๋ค. ์ฆ, ์ธ์ ๊ณผ ์ฟ ํค์ ๊ฐ์ context ์ ๋ณด๋ฅผ ์ ๊ฒฝ์ฐ์ง ์์๋ ๋๋ฏ๋ก ๊ตฌํ์ด ๋จ์ํด์ง๋ค.
Server๋ ๊ฐ๊ฐ์ ์์ฒญ์ ์์ ํ ๋ณ๊ฐ์ ๊ฒ์ผ๋ก ์ธ์ํ๊ณ ์ฒ๋ฆฌํ๋ค.
๊ฐ API ์๋ฒ๋ Client์ ์์ฒญ๋ง์ ๋จ์ ์ฒ๋ฆฌํ๋ค.
์ฆ, ์ด์ ์์ฒญ์ด ๋ค์ ์์ฒญ์ ์ฒ๋ฆฌ์ ์ฐ๊ด๋์ด์๋ ์๋๋ค.
๋ฌผ๋ก ์ด์ ์์ฒญ์ด DB๋ฅผ ์์ ํ์ฌ DB์ ์ํด ๋ฐ๋๋ ๊ฒ์ ํ์ฉํ๋ค.
Server์ ์ฒ๋ฆฌ ๋ฐฉ์์ ์ผ๊ด์ฑ์ ๋ถ์ฌํ๊ณ ๋ถ๋ด์ด ์ค์ด๋ค๋ฉฐ, ์๋น์ค์ ์์ ๋๊ฐ ๋์์ง๋ค.
์น ํ์ค HTTP ํ๋กํ ์ฝ์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ฏ๋ก ์น์์ ์ฌ์ฉํ๋ ๊ธฐ์กด์ ์ธํ๋ผ๋ฅผ ๊ทธ๋๋ก ํ์ฉํ ์ ์๋ค.
์ฆ, HTTP๊ฐ ๊ฐ์ง ๊ฐ์ฅ ๊ฐ๋ ฅํ ํน์ง ์ค ํ๋์ธ ์บ์ฑ ๊ธฐ๋ฅ์ ์ ์ฉํ ์ ์๋ค.
HTTP ํ๋กํ ์ฝ ํ์ค์์ ์ฌ์ฉํ๋ Last-Modified ํ๊ทธ๋ E-Tag๋ฅผ ์ด์ฉํ๋ฉด ์บ์ฑ ๊ตฌํ์ด ๊ฐ๋ฅํ๋ค.
๋๋์ ์์ฒญ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํด ์บ์๊ฐ ์๊ตฌ๋๋ค.
์บ์ ์ฌ์ฉ์ ํตํด ์๋ต์๊ฐ์ด ๋นจ๋ผ์ง๊ณ REST Server ํธ๋์ญ์ ์ด ๋ฐ์ํ์ง ์๊ธฐ ๋๋ฌธ์ ์ ์ฒด ์๋ต์๊ฐ, ์ฑ๋ฅ, ์๋ฒ์ ์์ ์ด์ฉ๋ฅ ์ ํฅ์์ํฌ ์ ์๋ค.
Client๋ REST API Server๋ง ํธ์ถํ๋ค.
REST Server๋ ๋ค์ค ๊ณ์ธต์ผ๋ก ๊ตฌ์ฑ๋ ์ ์๋ค.
API Server๋ ์์ ๋น์ฆ๋์ค ๋ก์ง์ ์ํํ๊ณ ๊ทธ ์๋จ์ ๋ณด์, ๋ก๋๋ฐธ๋ฐ์ฑ, ์ํธํ, ์ฌ์ฉ์ ์ธ์ฆ ๋ฑ์ ์ถ๊ฐํ์ฌ ๊ตฌ์กฐ์์ ์ ์ฐ์ฑ์ ์ค ์ ์๋ค.
๋ํ ๋ก๋๋ฐธ๋ฐ์ฑ, ๊ณต์ ์บ์ ๋ฑ์ ํตํด ํ์ฅ์ฑ๊ณผ ๋ณด์์ฑ์ ํฅ์์ํฌ ์ ์๋ค.
PROXY, ๊ฒ์ดํธ์จ์ด ๊ฐ์ ๋คํธ์ํฌ ๊ธฐ๋ฐ์ ์ค๊ฐ ๋งค์ฒด๋ฅผ ์ฌ์ฉํ ์ ์๋ค.