rest
2000๋ ๋ => http์ ์ฃผ์ ์ ์ ์ค ํ๋ช ์ธ ๋ก์ด ํ๋ฉ์ด ์ฐฝ์
์ ์ด์ ์์ผ ๊ฐ๊ด๋ฐ๊ฒ ๋์๋?
์์ฆ ์๋์๋ ๋๋ฐ์ด์ค์ ์ข ๋ฅ๊ฐ ๋ค์ํ๋ค.
pc, ์ค๋งํธํฐ, ํ๋ธ๋ฆฟ ๋ฑ๋ฑ..
๋๋ฐ์ด์ค๋ง๋ค ์ฑ์ ๋ฐ๋ก ๋ง๋ค์ด์ผํ๋๋ฐ, ๊ฐ์ ๋ก์ง์ ๊ฐ์ง ์๋ฒ๊น์ง ๋๋ฐ์ด์ค๋ง๋ค ๊ฐ๋ฐ?
ํด๋ผ์ด์ธํธ์ ์๋ฒ๋ฅผ ๋ถ๋ฆฌํด์ ๊ฐ๋ฐํ๋ ๊ฒ์ด ํธ๋ ๋๊ฐ ๋จ
์๋ฒ๋ API๋ง ์ ๊ณต => ํด๋ผ์ด์ธํธ๊ฐ ๋ฐ์์ ์ฒ๋ฆฌ
API๋ฅผ ์ค๊ณํ๋ค๋ณด๋, ์ข์ ์ค๊ณ์ REST API๊ฐ ์ด์ ์์ผ ๊ฐ๊ด๋ฐ๊ฒ ๋จ.
ํน์ง
1) Uniform (์ ๋ํผ ์ธํฐํ์ด์ค) Uniform Interface๋ URI๋ก ์ง์ ํ ๋ฆฌ์์ค์ ๋ํ ์กฐ์์ ํต์ผ๋๊ณ ํ์ ์ ์ธ ์ธํฐํ์ด์ค๋ก ์ํํ๋ ์ํคํ ์ฒ ์คํ์ผ์ ๋งํฉ๋๋ค.
2) Stateless (๋ฌด์ํ์ฑ) REST๋ ๋ฌด์ํ์ฑ ์ฑ๊ฒฉ์ ๊ฐ์ต๋๋ค. ๋ค์ ๋งํด ์์ ์ ์ํ ์ํ์ ๋ณด๋ฅผ ๋ฐ๋ก ์ ์ฅํ๊ณ ๊ด๋ฆฌํ์ง ์์ต๋๋ค. ์ธ์ ์ ๋ณด๋ ์ฟ ํค์ ๋ณด๋ฅผ ๋ณ๋๋ก ์ ์ฅํ๊ณ ๊ด๋ฆฌํ์ง ์๊ธฐ ๋๋ฌธ์ API ์๋ฒ๋ ๋ค์ด์ค๋ ์์ฒญ๋ง์ ๋จ์ํ ์ฒ๋ฆฌํ๋ฉด ๋ฉ๋๋ค. ๋๋ฌธ์ ์๋น์ค์ ์์ ๋๊ฐ ๋์์ง๊ณ ์๋ฒ์์ ๋ถํ์ํ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ์ง ์์์ผ๋ก์จ ๊ตฌํ์ด ๋จ์ํด์ง๋๋ค.
3) Cacheable (์บ์ ๊ฐ๋ฅ) REST์ ๊ฐ์ฅ ํฐ ํน์ง ์ค ํ๋๋ HTTP๋ผ๋ ๊ธฐ์กด ์นํ์ค์ ๊ทธ๋๋ก ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์, ์น์์ ์ฌ์ฉํ๋ ๊ธฐ์กด ์ธํ๋ผ๋ฅผ ๊ทธ๋๋ก ํ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค. ๋ฐ๋ผ์ HTTP๊ฐ ๊ฐ์ง ์บ์ฑ ๊ธฐ๋ฅ์ด ์ ์ฉ ๊ฐ๋ฅํฉ๋๋ค. HTTP ํ๋กํ ์ฝ ํ์ค์์ ์ฌ์ฉํ๋ Last-Modifiedํ๊ทธ๋ E-Tag๋ฅผ ์ด์ฉํ๋ฉด ์บ์ฑ ๊ตฌํ์ด ๊ฐ๋ฅํฉ๋๋ค.
4) Self-descriptiveness (์์ฒด ํํ ๊ตฌ์กฐ) REST์ ๋ ๋ค๋ฅธ ํฐ ํน์ง ์ค ํ๋๋ REST API ๋ฉ์์ง๋ง ๋ณด๊ณ ๋ ์ด๋ฅผ ์ฝ๊ฒ ์ดํด ํ ์ ์๋ ์์ฒด ํํ ๊ตฌ์กฐ๋ก ๋์ด ์๋ค๋ ๊ฒ์ ๋๋ค.
5) Client - Server ๊ตฌ์กฐ REST ์๋ฒ๋ API ์ ๊ณต, ํด๋ผ์ด์ธํธ๋ ์ฌ์ฉ์ ์ธ์ฆ์ด๋ ์ปจํ ์คํธ(์ธ์ , ๋ก๊ทธ์ธ ์ ๋ณด)๋ฑ์ ์ง์ ๊ด๋ฆฌํ๋ ๊ตฌ์กฐ๋ก ๊ฐ๊ฐ์ ์ญํ ์ด ํ์คํ ๊ตฌ๋ถ๋๊ธฐ ๋๋ฌธ์ ํด๋ผ์ด์ธํธ์ ์๋ฒ์์ ๊ฐ๋ฐํด์ผ ํ ๋ด์ฉ์ด ๋ช ํํด์ง๊ณ ์๋ก๊ฐ ์์กด์ฑ์ด ์ค์ด๋ค๊ฒ ๋ฉ๋๋ค.
6) ๊ณ์ธตํ ๊ตฌ์กฐ REST ์๋ฒ๋ ๋ค์ค ๊ณ์ธต์ผ๋ก ๊ตฌ์ฑ๋ ์ ์์ผ๋ฉฐ ๋ณด์, ๋ก๋ ๋ฐธ๋ฐ์ฑ, ์ํธํ ๊ณ์ธต์ ์ถ๊ฐํด ๊ตฌ์กฐ์์ ์ ์ฐ์ฑ์ ๋ ์ ์๊ณ PROXY, ๊ฒ์ดํธ์จ์ด ๊ฐ์ ๋คํธ์ํฌ ๊ธฐ๋ฐ์ ์ค๊ฐ๋งค์ฒด๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ํฉ๋๋ค.
REST API์ ์ค๊ณ
1) URI => ์์์ ํํ => ๋์ฌ๋ฅผ ์ฌ์ฉํ์ง์๊ณ ๋ช ์ฌ๋ฅผ ์ฌ์ฉํจ 2) ์์์ ๋ํ ํ์ => HTTP Method(GET, POST, PUT, DELETE)๋ก ํํ
reference : http://meetup.toast.com/posts/92 https://github.com/iljun/DevNote/tree/master/common/restFulAPI
Last updated