์ฃผ์ REST API ์ธํฐ๋ทฐ ์ง๋ฌธ ๋ฐ ๋ต๋ณ
์ด ๊ธฐ์ฌ์์๋ ๊ฐ๋ฐ์๊ฐ ๊ฐ๋ฐ์๋ก์ ๋ฉด์ ์์ ์ด๊ธธ ์ ์๋๋ก ์ค๋นํ๊ธฐ ์ํด ๊ฐ์ฅ ์์ฃผ ๋ฌป๋ REST API ๋ฉด์ ์ง๋ฌธ์ ๋ํด ์ค๋ช ํฉ๋๋ค.

ํด๋ผ์ฐ๋ ์ปดํจํ ๋ฐ ๋ง์ดํฌ๋ก์๋น์ค ๊ธฐ๋ฐ ์ํคํ ์ฒ๋ฅผ ํฌํจํ ์ฌ๋ฌ ๊ฐ๋ฐ์ด RESTful API ๋ฅผ ํตํด ๊ฐ๋ฅํ์ต๋๋ค. ๊ทธ๋ค์ ์จ๋ผ์ธ ์ปค๋ฎค๋์ผ์ด์ ๊ณผ ์ปดํจํ ์ ๋จ์ํ ๊ฒ์ผ๋ก ๋ฌ์ฌํ์ต๋๋ค. ๋ฐ๋ผ์ ๋ชจ๋ ๊ฐ๋ฐ์๋ REST๊ฐ ๋ฌด์์ธ์ง , ์๋ ๋ฐฉ์, ์ด์ ๋ฐ ์๋์ ๋ฐ๋ง์ถฐ ์์ ํ ์๋น์ค๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์ดํดํด์ผ ํฉ๋๋ค. ํ์ฅ ๊ฐ๋ฅํ๊ณ ์ ์ง ๊ด๋ฆฌ๊ฐ ๊ฐ๋จํ ์๋ฃจ์ ์ ๋ง๋๋ ๋ฐ ๋์์ด ๋ ์ ์์ผ๋ฉฐ ์ธํฐ๋ท์ ํ ๋๋ถ์ ์ ํ์ด ์ ์ธ๊ณ์ ๋๋ฌํ ์ ์์ผ๋ฏ๋ก ๋ง์ ๊ธฐ์ ์์ REST๋ฅผ ์ดํดํ๋ ๊ฐ๋ฐ์๋ฅผ ์ ํธํฉ๋๋ค.
RESTful API ๊ด๋ จ ๋ฉด์ ์ง๋ฌธ์ ์ด๋ป๊ฒ ์ค๋นํ๋์?
REST API ์ธํฐ๋ทฐ ์ค RESTful ์น ์๋น์ค์ ๋ํ ๊ฐ์ฅ ๋น๋ฒํ REST API ์ธํฐ๋ทฐ ์ง๋ฌธ๊ณผ Spring MVC ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ์ถ๋ JAX-RS ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ RESTful ์น ์๋น์ค์ ๋ํ ์ง๋ฌธ์ ์๋ ์น์ ์์ ์ธ๊ธ๋ฉ๋๋ค. ์ธํฐ๋ทฐ์ ์๊ฑฐ๋ ์ธํฐ๋ทฐ๋ฅผ ์์ฝํ๊ธฐ ์ ์ ์ธ๊ธ๋ ๋ชจ๋ REST API ์ธํฐ๋ทฐ ์ง๋ฌธ์ ์ค๋นํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
REST ๋ ๋ฌด์์ ๋๊น?
Representational State Transfer๋ฅผ ์ค๋ช ํ๋ REST๋ HTTP ํ๋กํ ์ฝ์ ์ค์ ๋ ์น์ฌ์ดํธ ์ฑ ๊ฐ๋ฐ์ ๋ด๋นํฉ๋๋ค. REST๋ ์น์ฌ์ดํธ ๊ด๋ จ ์ ์ฉ์ฑ์ด ๋ฏฟ๊ธฐ ์ํด ์ฒจ๋ถํด์ผ ํ๋ ๋ช ๊ฐ์ง ๊ท์น์ ์ง์ ํฉ๋๋ค. ์ ์ ์ฌํญ์ ์ ์ถ๋ฌผ์ ๊ฐ์์ผ๋ก ์ ์กํ๊ธฐ ์ํด ์๋ฒ์ ์ฌ์ฉ์ ๊ฐ์ ํ์คํ๋ HTTP ๋ฐฉ๋ฒ์ ๋ณด์ฅํฉ๋๋ค.

REST API๋ ๋ฌด์์ ๋๊น?
RESTful API๋ ๋ ์ปดํจํฐ ์์คํ ๊ฐ์ ์์ ํ ์จ๋ผ์ธ ์ ๋ณด ๊ตํ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. ๋ค์ํ ํ๋์ ์๋ฃํ๊ธฐ ์ํด ๋๋ถ๋ถ์ ๋น์ฆ๋์ค ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค๋ฅธ ๋ด๋ถ ๋ฐ ์ธ๋ถ ํ๋ก๊ทธ๋จ๊ณผ ๋ฐ์ดํฐ๋ฅผ ๊ตํํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ด๋ถ ๊ณ์ ์์คํ ์ด ๊ธ์ฌ ๋ช ์ธ์๋ฅผ ์์ฑํ๊ธฐ ์ํด ์ธ๋ถ ์ํ ์์คํ ๊ณผ ์ง์ ์ ๋ณด๋ฅผ ๊ณต์ ํ๋ ๊ฒฝ์ฐ. ์ด ์ ๋ณด๋ ๊ฐ๋ณ ๊ฐ์ธ์ด๋ฉฐ REST API ์ํํธ์จ์ด ํ์ค์ ์์ ํ๊ณ ํจ์จ์ ์ด๋ฉฐ ์ ๋ขฐํ ์ ์์ผ๋ฏ๋ก REST API๋ก ์ํํ ์ ์์ต๋๋ค.
RESTful API๋ ์ด๋ค ์์ผ๋ก๋ REST์ ์ฐ๊ฒฐ๋๋ API๋ก ์๋ ค์ ธ ์์ต๋๋ค. ๋ชจ๋ ๋ฐ์ดํฐ๋ REST API์์ ๋ฆฌ์์ค๋ก ๊ฐ์ฃผ๋๋ฉฐ ์ ํํ ํ์ค ์์ ๋จ์(URI)์ ์ํด ๊ฒฐ์ ๋ฉ๋๋ค. Twitter API๋ ์ฌ์ฉ์๊ฐ ์ก์ธ์คํ๊ณ ๊ฒ์ํ ์ ์๋ ๋ฆฌ์์ค๋ก ํธ์์ ์์ฑํฉ๋๋ค. Twitter API๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์๋ ์ฝ๊ฒ ํธ์์ ๊ฒ์ํ ์ ์์ต๋๋ค.
REST์ ์์น์ ๋ฌด์์ ๋๊น?
ํด๋ผ์ด์ธํธ-์๋ฒ๋ ์๋น์์ ์๋ฒ ๊ฐ์ ์ ์กํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์ผ๋ จ์ ์๋ต์ ํ์ฉํฉ๋๋ค. ๋ ๋ค ์๋ก ์๋ต์ ๋ณด๋ด๊ณ ์๋ฝํ ์ ์์ต๋๋ค. ํด๋ผ์ด์ธํธ-์๋ฒ ๋ฐฉ์์ ๋ํ ์ด๋ฌํ ๋ช ํํ ๋น์ ์ ํตํด ๋ ์ธ๋ ฅ์ด ์๋ก์ ๋์ ์์ด ์๋ํ ์ ์์ต๋๋ค.
๊ณ์ธตํ ์์คํ
ํด๋ผ์ด์ธํธ์ API ์๋ฒ ์ฌ์ด์์ ๊ณ์ธต์ ์๋ฒ์ ๋๋ค. ์ด๋ฌํ ์๋ก ๋ค๋ฅธ ์๋ฒ๋ ์คํธ ํ์ง ๋ฐ ์ฑ๋ฅ ํฅ์๊ณผ ๊ฐ์ ์ฌ๋ฌ ์์ ์ ์ํํฉ๋๋ค. REST(ํํ ์ํ)๋ ๋ชจ๋์ ์ํคํ ์ฒ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ํด๋ผ์ด์ธํธ์ API(์์ฉ ํ๋ก๊ทธ๋๋ฐ ์ธํฐํ์ด์ค) ์๋ฒ ๊ฐ์ ์ ์ก๋๋ ๋ฉ์์ง๋ ๊ณ์ธต์ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํด๋ ์ํฅ์ ๋ฐ์ง ์์ต๋๋ค.
๊ท ์ผํ ์ธํฐํ์ด์ค
ํด๋ผ์ด์ธํธ์ ์๋ฒ๋ ๋ชจ๋ ํต์ ์ ๋ํด ํญ์ ๋์ผํ ํ๋กํ ์ฝ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์ด ํ๋กํ ์ฝ์ HTTP REST์ ๋๋ค. ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋์ผํ ์ธ์ด๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ณ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ํต์ผ๋ ์ธํฐํ์ด์ค๋ ํตํฉ์ ์ฉ์ดํ๊ฒ ํฉ๋๋ค.
๋ฌด๊ตญ์ ์
์ํ ๋น์ ์ฅ ํต์ ์์ ์๋ฒ๋ ์ด๋ฏธ ๋ณด๋ธ ์๋ต์ ๋ํ ๊ธฐ๋ก์ ๋ณด๊ดํ์ง ์์ต๋๋ค. ๋ชจ๋ ์๋ต์๋ ๊ฑฐ๋๋ฅผ ์๋ฃํ๋ ๋ฐ ํ์ํ ์์ ํ ์ ๋ ฅ์ด ํฌํจ๋ฉ๋๋ค. ์๋ฒ ๋ถํ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ค์ฌ ํด์์ ํฅ์์ํต๋๋ค. ๋ํ ๋ถ์์ ํ ์ ๋ณด๋ก ์ธํด ์์ฒญ์ด ์คํจํ ์ ์๋ ๊ฐ๋ฅ์ฑ์ ์ฒ ํํฉ๋๋ค.
์บ์ ๊ฐ๋ฅ
ํด๋ผ์ด์ธํธ๋ ๋ฆฌ์์ค๋ฅผ ์บ์ํ ์ ์๋์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ ์๋ฒ์ ์๋ต์ ์ฌ์ฉํ์ฌ ์ฑ๋ฅ์ ํฅ์์ํค๊ธฐ ์ํด ๋ชจ๋ ๋ฆฌ์์ค๋ฅผ ์บ์ํ ์ ์์ต๋๋ค. REST์๋ ๋ค์๊ณผ ๊ฐ์ ์ ํ์ ์กฐ๊ฑด๋ ํฌํจ๋ฉ๋๋ค.
์ฃผ๋ฌธํ ์ฝ๋
API์ ์๋ต์๋ ์ฌ์ฉ์๊ฐ ์คํํ ์ ์๋ ์คํ ์ฝ๋๊ฐ ํฌํจ๋ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฒด ๋ฐฑ์๋์์ ์ฝ๋๋ฅผ ์คํํ ์ ์์ต๋๋ค.
AJAX์ REST์ ์ฐจ์ด์ ์ ๋ฌด์์ ๋๊น?
AJAX์ REST์ ์ฐจ์ด์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์์ฝ์ค****์ฌ๋ค XMLHttpRequest ๊ฐ์ฒด๋ ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๊ธฐ ์ํด Ajax์์ ์ฌ์ฉ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ JavaScript ์ ์ฝ๋๋ ํ์ฌ ํ์ด์ง๋ฅผ ๋์ ์ผ๋ก ๋ณ๊ฒฝํ๋ ๋ต๋ณ์ ์ ๊ณตํฉ๋๋ค. ๋ฆฌ์์ค ํ์ฉ์ URI ๊ตฌ์กฐ ๋ฐ ์์ฒญ/์๋ต ํจํด์ ์ค์ํฉ๋๋ค. REST์์ ์ฌ์ฉํฉ๋๋ค. Ajax๋ ํ์ด์ง๋ฅผ ๋ค์ ๋ก๋ํ์ง ์๊ณ ๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ๋์ ์ ๋ฐ์ดํธ๋ฅผ ํ์ฉํ๋ ๊ธฐ์ ๊ทธ๋ฃน์ ๋๋ค. ์ฌ์ฉ์๋ REST ์ํํธ์จ์ด ์ํคํ ์ฒ ์คํ์ผ์ ์ฌ์ฉํ์ฌ ์๋ฒ์์ ๋ฐ์ดํฐ ๋๋ ์ ๋ณด๋ฅผ ์์ฒญํ ์ ์์ต๋๋ค. Ajax๋ ์๋ฒ์ ์ฌ์ฉ์ ๊ฐ์ ๋น๋๊ธฐ ํต์ ์ ์ ๊ฑฐํฉ๋๋ค. REST๋ ์๋ฒ์ ์ฌ์ฉ์ ๊ฐ์ ํต์ ์ ์๊ตฌํฉ๋๋ค.
๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ๋ ์ด๋ป๊ฒ ์๋ํฉ๋๊น?
ํด๋ผ์ฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๊ธฐ ์ํ ์ํคํ ์ฒ ๋ฐฉ๋ฒ์ ๋ง์ดํฌ๋ก์๋น์ค๋ผ๊ณ ํฉ๋๋ค. ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ๋ฌ ์๋น์ค๋ก ๊ตฌ์ฑ๋๋ฉฐ, ๊ฐ ์๋น์ค๋ ๋ณ๋์ ํ๋ก์ธ์ค์์ ์คํ๋๊ณ API๋ฅผ ํตํด ๋ค๋ฅธ ์๋น์ค์ ์ํธ ์์ฉํฉ๋๋ค. "๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ"๋ก ์๋ ค์ง ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋ชจ๋ฒ ์ฌ๋ก๊ฐ ๋์์ต๋๋ค. ๋ง์ดํฌ๋ก ์๋น์ค ์ํคํ ์ฒ์ ๊ตฌ์ฑ ์์๋ ๋น์ฆ๋์ค ์๊ตฌ ์ฌํญ์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค.
- ํด๋ผ์ด์ธํธ
๋ค์ํ ์ฅ์น๋ฅผ ์ฌ์ฉํ์ฌ ์๋ง์ ์ฌ์ฉ์๊ฐ ์์ฒญ์ ๋ณด๋ ๋๋ค.
- ID ๊ณต๊ธ์
์ฌ์ฉ์ ๋๋ ๊ณ ๊ฐ์ ์ ์์ ํ์ธํ๊ณ ๋ณด์ ํ ํฐ์ ์ ๊ณตํฉ๋๋ค.
- API ๊ฒ์ดํธ์จ์ด
ํด๋ผ์ด์ธํธ ์์ฒญ์ API ๊ฒ์ดํธ์จ์ด๋ฅผ ํตํด ์ฒ๋ฆฌ๋ฉ๋๋ค.
- ์ ์ ์ฝํ ์ธ
์์คํ ์ ๋ชจ๋ ์๋ฃ๋ ์ ์ ์ฝํ ์ธ ์ ํฌํจ๋์ด ์์ต๋๋ค.
- ๊ด๋ฆฌ
์ฅ์ ๋ฅผ ๊ฒฐ์ ํ๊ณ ๋ ธ๋ ๊ฐ์ ์๋น์ค ๊ท ํ์ ์กฐ์ ํฉ๋๋ค.
- ์๋น์ค ๋ฐ๊ฒฌ
๋ง์ดํฌ๋ก์๋น์ค ๊ฐ์ ํต์ ๊ฒฝ๋ก๋ฅผ ๊ฒฐ์ ํ๊ธฐ ์ํ ๋๊ตฌ์ ๋๋ค.
- ์ฝํ ์ธ ์ ์ก ๋คํธ์ํฌ
ํ๋ก์ ์๋ฒ ๋ฐ ๊ด๋ จ ๋ฐ์ดํฐ ์ผํฐ์ ๋ถ์ฐ ๋คํธ์ํฌ์ ๋๋ค.
- ์๊ฒฉ ์๋น์ค
IT ์ฅ์น ๋คํธ์ํฌ์ ์ ์ฅ๋ ์ ๋ณด๋ ์๊ฒฉ ์๋น์ค๋ฅผ ํตํด ์๊ฒฉ์ผ๋ก ์ก์ธ์คํ ์ ์์ต๋๋ค.

REST์์ ์ง์ํ๋ HTTP ๋ฉ์๋๋ ๋ฌด์์ ๋๊น?
REST HTTP ์ง์ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- GET - ์น์ฌ์ดํธ ๋ฐ API์์ ๊ฐ์ฅ ๊ด๋ฒ์ํ๊ฒ ์ฌ์ฉ๋๋ ๋ฐฉ๋ฒ์ธ GET์ ํน์ ๋ฐ์ดํฐ ์๋ฒ์์ ๋ฆฌ์์ค๋ฅผ ์์ ํฉ๋๋ค.
- POST - POST ๋ฉ์๋๋ฅผ ํตํด ๋ฆฌ์์ค๋ฅผ ์ ๋ฐ์ดํธํ๊ธฐ ์ํด ๋ฐ์ดํฐ๊ฐ API ์๋ฒ๋ก ์ ์ก๋ฉ๋๋ค. ์๋ฒ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ฉด HTTP ์์ฒญ ๋ณธ๋ฌธ์ ์ ์ฅํฉ๋๋ค.
- PUT - ๋ฆฌ์์ค๋ฅผ ์์ฑํ๊ณ ์ ๋ฐ์ดํธํ๊ธฐ ์ํด API์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ ๋๋ค.
- DELETE - ์ด๋ฆ์์ ์ ์ ์๋ฏ์ด ์ด ๋ฉ์๋๋ ํน์ URL์ ๋ฆฌ์์ค๋ฅผ ์ญ์ ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ์ต์ - ์ง์๋๋ ๊ธฐ์ ์ ๋ํด ์์ธํ ์ค๋ช ํฉ๋๋ค.
HEAD - ์์ฒญ URL์ ๋ํ ๋ฉํ๋ฐ์ดํฐ๊ฐ ๋ฐํ๋ฉ๋๋ค. ๋จ์ผ ๊ธฐ๋ก์ ๊ด์ ์์ ์ํฉ์ ์ดํด๋ณด์. ์ง์ ๋ฒํธ๊ฐ 1์ธ ์์ ์์ ๋ํ ๋ ์ฝ๋๊ฐ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ๋ค์ ํ๋์ ๊ฐ๊ฐ ๋ค๋ฅธ ๊ฒ์ ๋ํ๋ ๋๋ค.
POST - ์ด๋ฏธ ์์ฑ๋ ์ง์ 1์ ๋ํ ์ ๋ณด๋ฅผ ๊ฒ์ ์ค์ด๋ฏ๋ก ์ ์ฉํ ์ ์์ต๋๋ค.
GET - RESTful ์น API๋ฅผ ํตํด ์ง์ ์ ๋ณด๋ฅผ ๊ฒ์ํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ ์ง์ ๋ฒํธ๋ 1์ ๋๋ค.
PUT - RESTful ์น API๋ฅผ ์ฌ์ฉํ์ฌ PUT์ ์ฌ์ฉํ์ฌ ์ง์ 1๋ฒ์ ๋ฐ์ํ๋๋ก ์ง์ ์ ๋ณด๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค.
DELETE - ์ฌ์๋ฒํธ๊ฐ 1์ธ ์ฌ์์ ์ ๋ณด๋ฅผ ์ญ์ ํ๋ ๊ธฐ๋ฅ์ ๋๋ค.
PUT๊ณผ POST์ ์ฐจ์ด์ ์ ๋ฌด์์ ๋๊น?
PUT๊ณผ Post์ ์ฐจ์ด์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- PUT - ์ ๊ณต๋(๊ท ์ผํ ๋ฆฌ์์ค ์๋ณ์) URI์์ ํ์ผ ๋๋ ๋ฆฌ์์ค๋ฅผ ์ ํํ๊ณ ๊ตฌ์ฒด์ ์ผ๋ก ์๋ณํฉ๋๋ค. PUT์ ๊ธฐ์กด ํ์ผ์ด URI(Uniform Resource Identifier)์ ์๋ ๊ฒฝ์ฐ ๊ธฐ์กด ํ์ผ์ ๋ณ๊ฒฝํฉ๋๋ค. PUT๋ ํ์ผ์ด ์ด๋ฏธ ์กด์ฌํ๋ ๊ฒฝ์ฐ ํ์ผ์ ํ์ฑํฉ๋๋ค. ๋ํ PUT์ ๋ฉฑ๋ฑ์ฑ์ด๊ธฐ ๋๋ฌธ์ ํ์ผ์ด ์ฌ์ฉ๋๋ ๋น๋์๋ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค.
- POST - ๋ฐ์ดํฐ๋ฅผ ๊ณ ์ ํ ๊ท ์ผ ๋ฆฌ์์ค ์๋ณ์(URI)๋ก ๋ณด๋ด๊ณ ๊ฑฐ๊ธฐ์ ์๋ ๋ฆฌ์์ค ํ์ผ์ด ์์๋ฅผ ๊ด๋ฆฌํ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค. ์ด ์๊ฐ ์น์ฌ์ดํธ ์๋ฒ๋ ์ ํํ ํ์ผ์ ์ปจํ ์คํธ์์ ๋ฐ์ดํฐ๋ก ์ํํ ์ ์๋ ์์ ์ ๊ฒฐ์ ํ ์ ์์ต๋๋ค. ๋ํ POST ์ ๋ต์ ๋ฉฑ๋ฑ์ฑ์ด ์๋๋ฏ๋ก ๋ ๋ฒ ์ด์ ์ฌ์ฉํ๋ฉด ์ ํ์ผ ์์ฑ์ด ์ฌ๊ฐ๋ฉ๋๋ค.
๋ชจ๋๋ฆฌ์ SOA์ ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ์ ์ฐจ์ด์ ์ ๋ฌด์์ ๋๊น?
๋ชจ๋๋ฆฌ์ ์ฑ์ ๊ฐ๋ฐ ์๋๊ฐ ๋งค์ฐ ๋๋ฆฌ๊ณ ์๋ก ์ฐ๊ฒฐ๋ ๋ถ๋ฆฌํ ์ ์๋ ๋จ์๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ๋ ์๊ณ ์ต์ํ์ผ๋ก ์ฐ๊ฒฐ๋ ์๋น์ค๊ฐ SOA๋ฅผ ๊ตฌ์ฑํ๋ฉฐ ๊ฐ๋ฐ๋ ์ ํ์ ์ ๋๋ค.
๋ง์ดํฌ๋ก ์๋น์ค๋ ๋งค์ฐ ์๊ณ ๋์จํ๊ฒ ์ฐ๊ฒฐ๋ ๋ ๋ฆฝ ์คํํ ์๋น์ค๋ก ๋น ๋ฅธ ๋ฐ๋ณต ๊ฐ๋ฐ ์ฃผ๊ธฐ๋ฅผ ์ ๊ณตํฉ๋๋ค.
URI ๋ ๋ฌด์์ ๋๊น?
URI(Uniform Resource Identifier)๋ฅผ URI๋ผ๊ณ ํฉ๋๋ค. REST์ URI๋ ์น ์๋ฒ์ ๋ฆฌ์์ค๋ฅผ ์ง์ ํ๋ ๋ฌธ์์ด์ ๋๋ค. ๊ฐ ๋ฆฌ์์ค์๋ HTTP ์์ฒญ์์ ์ฌ์ฉ๋ ๋ ํด๋ผ์ด์ธํธ๊ฐ ์ด๋ฅผ ๋์์ผ๋ก ์ง์ ํ๊ณ ์์ ์ ์ํํ ์ ์๋๋ก ํ๋ ๊ณ ์ ํ URI๊ฐ ์์ต๋๋ค. ์ฃผ์ ์ง์ ์ URI๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌ์์ค๋ก ํธ๋ํฝ์ ๋ณด๋ด๋ ํ๋ก์ธ์ค์ ๋๋ค.
URI ํ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
<ํ๋กํ ์ฝ>://<์๋น์ค ์ด๋ฆ>/<๋ฆฌ์์ค ์ ํ>/<๋ฆฌ์์ค ID>
URI์๋ ๋ ๊ฐ์ง ์ ํ์ด ์์ต๋๋ค.
1. URL - ํด๋น ์์น์์ ๋ฆฌ์์ค ๊ฒ์์ ๋ํ ์ ๋ณด๋ Uniform Resource Locator์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
URL์๋ ๋คํธ์ํฌ ํธ์คํธ ์ด๋ฆ(sampleServer.com) ๋ฐ ์ฝํ ์ธ ๊ฒฝ๋ก(/samplePage.html)์ ๋ํ ์ ๋ณด๊ฐ ํฌํจ๋์ด ์์ผ๋ฉฐ ํ๋กํ ์ฝ(์: FTP, HTTP ๋ฑ)๋ก ์์ํฉ๋๋ค. ๊ฒ์ ๊ธฐ์ค์ด ์์ ์๋ ์์ต๋๋ค.
2. URN - ๊ณ ์ ํ๊ณ ๋ด๊ตฌ์ฑ ์๋ ์ด๋ฆ์ ์ฌ์ฉํ์ฌ ๊ท ์ผํ ์์ ์ด๋ฆ์ด ์์์ ์๋ณํฉ๋๋ค.
์ธํฐ๋ท์์ ๋ฆฌ์์ค์ ์์น๋ URN์ ์ํด ๋ฐ๋์ ์ง์ ๋์ง๋ ์์ต๋๋ค. ๋ฆฌ์์ค๋ฅผ ์๋ณํ ๋ ๋ค๋ฅธ ํ์๊ฐ ์ฌ์ฉํ ๋ชจ๋ธ ์ญํ ์ ํฉ๋๋ค.
URN์ด ๋ฌธ์๋ฅผ ์๋ณํ ๋๋ง๋ค "resolver"๋ฅผ ์ฌ์ฉํ์ฌ ๋น ๋ฅด๊ฒ URL๋ก ๋ณํํ์ฌ ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค.
RESTful ์น ์๋น์ค์ ๊ธฐ๋ฅ์ ๋ฌด์์ ๋๊น?
๋ค์ ๊ธฐ๋ฅ์ ๋ชจ๋ RESTful ์น ์๋น์ค์ ์์ต๋๋ค.
- ํด๋ผ์ด์ธํธ-์๋ฒ ํต์ ๋ชจ๋ธ์ ์๋น์ค์ ๊ธฐ์ด์ ๋๋ค.
- ์ด ์๋น์ค๋ HTTP ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ/๋ฆฌ์์ค๋ฅผ ๊ฐ์ ธ์ค๊ณ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๊ณ ๊ธฐํ ์์ ์ ์ํํฉ๋๋ค.
- "๋ฉ์์ง"์ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ํต์ ์ ์ฌ์ฉ๋๋ ๋ฐฉ๋ฒ์ ๋๋ค.
- ์๋น์ค๋ URI๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌ์์ค์ ์ก์ธ์คํ ์ ์์ต๋๋ค.
- ์ด๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ๊ณผ ์๋ต์ด ๋ค๋ฅธ ์ฌ๋์๊ฒ ์์กดํ์ง ์๋๋ค๋ ๋ฌด๊ตญ์ ๊ฐ๋ ์ ์ค์ํ๋ฏ๋ก ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ป์ ์ ์๋ค๋ ์์ ํ ํ์ ์ ์ ๊ณตํฉ๋๋ค.
- ๋์ผํ ์ ํ์ ๋ฐ๋ณต ์์ฒญ์ ๋ํ ์๋ฒ ํธ์ถ์ ์ค์ด๊ธฐ ์ํด ์ด๋ฌํ ์๋น์ค๋ ์บ์ฑ ๊ฐ๋ ๋ ์ฌ์ฉํฉ๋๋ค.
- ์ด๋ฌํ ์๋น์ค๋ SOAP ์๋น์ค๋ฅผ ์ฌ์ฉํ์ฌ REST ์ํคํ ์ฒ ํจํด์ ๊ตฌํํ ์๋ ์์ต๋๋ค.
HTTP ์ํ ์ฝ๋๋ ๋ฌด์์ ๋๊น?
HTTP ์ํ์์ ์ฌ์ฉ๋๋ ํ์ค ์ฝ๋๋ ์ค์ ๋ ์๋ฒ ์์ ์๋ฃ ์ํ์ ํด๋นํฉ๋๋ค. ์๋ฅผ ๋ค์ด, HTTP ์ํ 404๋ ์๋ฒ์ ์์ฒญ๋ ๋ฆฌ์์ค๊ฐ ์์์ ๋ํ๋ ๋๋ค.

HTTP ์ํ ์ฝ๋๋ฅผ ๋ณด๊ณ ๊ทธ ์๋ฏธ๋ฅผ ์ดํดํด ๋ณด๊ฒ ์ต๋๋ค.
- 200 - ์ข์ต๋๋ค. ์ฑ๊ณต์ด ๋ถ๋ช ํฉ๋๋ค.
- 201 - POST ๋๋ PUT ์์ฒญ์ด ์ฑ๊ณต์ ์ผ๋ก ๋ฆฌ์์ค๋ฅผ ์์ฑํ๋ฉด ์๋ต ์ฝ๋๋ 201 - CREATED์ ๋๋ค. ์์น ํค๋๋ฅผ ์ฌ์ฉํ์ฌ ์๋ก ์์ฑ๋ ๋ฆฌ์์ค์ ๋ํ URL์ ๋ฐํํฉ๋๋ค.
- 304 - ์กฐ๊ฑด๋ถ GET ์์ฒญ์ ๊ฒฝ์ฐ ์ํ ์ฝ๋ 304 NOT MODIFIED๋ฅผ ์ฌ์ฉํ์ฌ ๋คํธ์ํฌ ๋์ญํญ์ ์ ์ฝํฉ๋๋ค. ์๋ต ๊ธฐ๊ด์ ๋น์ด ์์ด์ผ ํฉ๋๋ค. ๋ ์ง, ์์น ๋ฐ ๊ธฐํ ์ ๋ณด๋ ํค๋์ ์์ด์ผ ํฉ๋๋ค.
- 400 - BAD REQUEST๋ ๋๋ฝ๋ ๋ฐ์ดํฐ ๋๋ ์ ํจ์ฑ ๊ฒ์ฌ ์ค์์ ๊ฐ์ ์๋ชป๋ ์ ๋ ฅ์ด ์ ๊ณต๋์์์ ๋ํ๋ ๋๋ค.
- 401 - FORBIDDEN์ ์ฌ์ฉ์๊ฐ ๊ด๋ฆฌ์ ๊ถํ ์์ด ์ก์ธ์ค ๊ถํ์ ์ญ์ ํ๋ ๋ฑ ์ฌ์ฉ ์ค์ธ ๋ฐฉ๋ฒ์ ์ก์ธ์คํ ์ ์์์ ๋ํ๋ ๋๋ค.
- 404 - ์ค๋ฅ๋ ์์ฒญํ ๋ฐฉ๋ฒ์ ์ฐพ์ ์ ์์์ ๋ํ๋ ๋๋ค.
- 409 - CONFLICTS ๋ฉ์๋๊ฐ ์คํ๋ ๋ ์ค๋ณต ํญ๋ชฉ ์ฝ์ ๊ณผ ๊ฐ์ ์ถฉ๋ ๋ฌธ์ ๋ฅผ ๋ํ๋ ๋๋ค.
- 500 - ๋ด๋ถ ์๋ฒ ์ค๋ฅ ์ฝ๋๋ ๋ฉ์๋๊ฐ ์คํ๋๋ ๋์ ์๋ฒ์์ ์์ธ๊ฐ ๋ฐ์ํ์์ ๋ํ๋ ๋๋ค.
RESTful ์น ์๋น์ค์ ๋จ์ ์ ์๋ ค์ฃผ์ค ์ ์๋์?
RESTful ์น ์๋น์ค์ ๋จ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ด์์คํดํธ๊ฐ ๋ฌด๊ตญ์ ์์ ๊ฐ๋ ์ ๊ณ ์ํ๊ธฐ ๋๋ฌธ์ RESTful ์น ์๋น์ค์ ์ธ์ ์ ์ ์ง ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
- ๋ณด์ ๋ฐ ๋ณดํธ ์ ํ์ REST์ ํ์์ ์ธ ๊ฒ์ ์๋๋๋ค. ์ผ๋ถ ํ๋กํ ์ฝ์ ์์ ๋ณดํธ๋ฅผ ์ํด ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด SSL/TLS ์ธ์ฆ๊ณผ ๊ฐ์ด ์ ํํ ๋ณดํธ ๋ฐ ์์ ํ์ค์ ๊ฒฐ์ ํ ๋ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ๊ณ ๊ฐ ํ์๋ฉ๋๋ค.
SOAP์ REST๋ฅผ ๊ตฌ๋ณํ์๊ฒ ์ต๋๊น?
SOAP์ REST์ ์ฐจ์ด์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋น๋****์ฌ๋ค SOAP๋ผ๋ ํ๋กํ ์ฝ์ ์น ์๋น์ค๋ฅผ ๊ตฌํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. REST๋ ์น ์๋น์ค๋ฅผ ๊ฐ๋ฐํ๊ธฐ ์ํ ์ํคํ ์ฒ ๋์์ธ ํจํด์ ๋๋ค. SOAP์์ ์ ๊ณตํ๋ ์ง์นจ์ ๋ค์์ ์๊ฒฉํ ์ค์ํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค. REST๋ ๊ธฐ์ค์ ์ค๋ช ํ์ง๋ง ์์ ํ ์ค์ํ ํ์๋ ์์ต๋๋ค. SOAP ํด๋ผ์ด์ธํธ์ ์๋ฒ๋ ๋ ๋ฐ์ ํ๊ฒ ๊ด๋ จ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ด ์ ์์ ์๊ฒฉํ ๊ณ์ฝ์ ๊ฐ์ง ๋ฐ์คํฌํฑ ํ๋ก๊ทธ๋จ์ ํ์ ํฉ๋๋ค. REST ํด๋ผ์ด์ธํธ๋ ๋ธ๋ผ์ฐ์ ๋ณด๋ค ์ ์๋ ฅ์ด ๋์ผ๋ฉฐ ํ์ํ ํต์ ํ์ค์ ์ค์ํ๋ ํ ์๋ฒ์ ์ค๊ณ์ ๋ฌด๊ดํฉ๋๋ค. SOAP๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ XML ์ ์ก๋ง ์ง์ํฉ๋๋ค. XML, JSON, MIME, Text ๋ฑ ๋ค์ํ ๋ฐ์ดํฐ ์ ํ์ REST์์ ์ ๊ณต SOAP ์ฝ๊ธฐ๋ฅผ ์บ์ํ ์ ์์ต๋๋ค. REST ์ฝ๊ธฐ ์ฟผ๋ฆฌ๋ฅผ ์บ์ํ ์ ์์ต๋๋ค. ์๋น์ค ์ธํฐํ์ด์ค๋ SOAP์์ ๋ฆฌ์์ค ๋ ผ๋ฆฌ๋ฅผ ๋ ธ์ถํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๋ฆฌ์์ค ๋ก์ง์ URI๋ฅผ ์ฌ์ฉํ์ฌ REST๋ฅผ ์ฌ์ฉํ์ฌ ๋ ธ์ถ๋ฉ๋๋ค. SOAP๊ฐ ๋๋ฆผ REST๊ฐ ๋ ๋น ๋ฆ ํ๋กํ ์ฝ์ด๊ธฐ ๋๋ฌธ์ SOAP๋ ์์ฒด ๋ณด์ ํ๋กํ ์ฝ์ ์ค์ ํฉ๋๋ค. REST๋ ๊ตฌํ ํ๋กํ ์ฝ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๋ณด์ ์๋ฐฉ ์กฐ์น๋ง ์ทจํฉ๋๋ค. SOAP๋ ์์ฃผ ์ ํ๋์ง ์์ง๋ง Stateful ๋ฐ์ดํฐ ์ ์ก๊ณผ ๋ ๋์ ์์ ์ฑ์ด ํ์ํ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋ฉ๋๋ค. ์์ฆ REST๋ ๋ ๋ง์ ํ์ฅ์ฑ๊ณผ ์ ์ง ๊ด๋ฆฌ์ฑ์ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์๋ค์ด ์์ฃผ ์ ํธํฉ๋๋ค.
HTTP ์๋ต์ ํต์ฌ ๊ตฌ์ฑ ์์๋ ๋ฌด์์ ๋๊น?
HTTP ์๋ต์๋ ๋ค์๊ณผ ๊ฐ์ ๋ค ๊ฐ์ง ์ฃผ์ ๊ตฌ์ฑ ์์๊ฐ ์์ต๋๋ค.
- ์๋ต ์ํ ์ฝ๋ - ๋ฆฌ์์ค ์์ฒญ์ ๋ํ ์๋ต์ผ๋ก ์๋ฒ์ ์ํ ์ฝ๋๋ฅผ ํ์ํฉ๋๋ค. ์: ํด๋ผ์ด์ธํธ ์ธก ์ค๋ฅ๋ 400์ผ๋ก ํ์๋๋ ๋ฐ๋ฉด ์ฑ๊ณต์ ์ธ ์๋ต์ 200์ผ๋ก ํ์๋ฉ๋๋ค.
- HTTP ๋ฒ์ - HTTP ํ๋กํ ์ฝ ๋ฒ์ ์ HTTP ๋ฒ์ ์ผ๋ก ํ์๋ฉ๋๋ค.
- ์๋ต ํค๋ - ์๋ต ๋ฉ์์ง์ ๋ฉํ๋ฐ์ดํฐ๊ฐ ์ด ์น์ ์ ํฌํจ๋ฉ๋๋ค. ๋ฐ์ดํฐ๋ ์ฝํ ์ธ ๊ธธ์ด, ์ ํ, ์๋ต ๋ ์ง, ์๋ฒ ์ ํ ๋ฑ๊ณผ ๊ฐ์ ํญ๋ชฉ์ ์ ๊ณตํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ์๋ต ๋ณธ๋ฌธ - ์๋ฒ๊ฐ ์ค์ ๋ก ๋ฐํํ ๋ฆฌ์์ค ๋๋ ๋ฉ์์ง๋ ์๋ต ๋ณธ๋ฌธ์ ํฌํจ๋ฉ๋๋ค.
WebSocket๊ณผ REST์ ์ฐจ์ด์ ์ ๋ฌด์์ ๋๊น?
๋ค์์ ์๋์ ์ธ๊ธ๋ WebSocket ๊ณผ REST ๊ฐ์ ๋ช ๊ฐ์ง ์ฐจ์ด์ ์ ๋๋ค.
REST๋ CRUD ์์ ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๋ฐ๋ฉด WebSocket์ ๊ธฐ๋ณธ ์ ์ก ๋ฉ์ปค๋์ฆ์ธ ์์ผ ๋ฐ ํฌํธ ๊ฐ๋ ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์ ์์ค ํ๋กํ ์ฝ์ ๋๋ค.
RESTful ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์ฌ์ HTTP๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ ์ ์ค๊ณํด์ผ ํ์ง๋ง WebSocket์ ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ํ์ ์์ค ์ธ๋ถ ์ ๋ณด์ธ IP ์ฃผ์ ๋ฐ ํฌํธ ์ ๋ณด์ ์ฌ์ฉ์ ์๊ตฌํฉ๋๋ค. WebSocket์ ์ํ ์ ์ฅ ํ๋กํ ์ฝ์ธ ๋ฐ๋ฉด REST๋ ์ํ ๋น์ ์ฅ ํ๋กํ ์ฝ์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. ์ฆ, ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์๋ก๋ฅผ ์ธ์ํ ํ์๊ฐ ์์ต๋๋ค.
์ํ์ผ๋ก ํ์ฅํ ์ ์๋ HTTP ๊ธฐ๋ฐ REST์ ๋ฌ๋ฆฌ WebSocket ์ฐ๊ฒฐ์ ๋จ์ผ ์๋ฒ์์ ์์ง์ผ๋ก ํ์ฅํ ์ ์์ต๋๋ค. REST ๊ธฐ๋ฐ ํต์ ์ ๋น๊ต์ ๋น์ธ์ง๋ง WebSocket ํต์ ์ ์ ๋ ดํฉ๋๋ค.
REST์์ TLS(์ ์ก ๊ณ์ธต ๋ณด์)๋ฅผ ๊ตฌํํ ์ ์์ต๋๊น?
์ฐ๋ฆฌ๋ ํ ์ ์์ต๋๋ค, ์! REST์ ํด๋ผ์ด์ธํธ-์๋ฒ ํต์ ์ TLS๋ฅผ ์ฌ์ฉํ์ฌ ์ํธํ๋๋ฉฐ, ์ด๋ ์ฌ์ฉ์์๊ฒ ์๋ฒ๋ฅผ ํ์ธํ ์ ์๋ ๊ธฐ๋ฅ๋ ์ ๊ณตํฉ๋๋ค. SSL(Secure Socket Layer)์ ๋์ฒดํ๋ฏ๋ก ์ฌ์ฉ์์ ์๋ฒ ๊ฐ์ ๋ณด์ ํต์ ํํ์ ๋๋ค. HTTPS๋ SSL(Secure Socket Layer) ๋ฐ TLS(Transport Layer Security)์ ์ ์๋ํ๋ฏ๋ก RESTful ์น ์๋น์ค๋ฅผ ์์ฑํ ๋ ์ ์ฉํฉ๋๋ค. ์ฌ๊ธฐ์ REST๊ฐ ์ฌ์ฉํ๋ ํ๋กํ ์ฝ์ ์ธก๋ฉด์ ํฌํจ๋๋ค๋ ์ ์ ์ ์ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋ฐ๋ผ์ ์์ ๋ณดํธ๋ REST ํ๋กํ ์ฝ์ ์์กดํฉ๋๋ค.
POST ๋ฐฉ์์ผ๋ก ๋ณด๋ผ ์ ์๋ ์ต๋ ํ์ด๋ก๋ ํฌ๊ธฐ๋ ์ผ๋ง์ ๋๊น?
ํฌ์คํธ ๋ฐฉ์์ผ๋ก ์ ๋ฌํ ์ ์๋ ํ์ด๋ก๋์ ํฌ๊ธฐ๋ ์ด๋ก ์ ์ผ๋ก ์ ํ์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ ํฐ ํ์ด๋ก๋๋ ๋ ๋ง์ ๋์ญํญ์ ์ฌ์ฉํ๊ณ ์ฒ๋ฆฌํ๋ ๋ฐ ๋ ์ค๋ ๊ฑธ๋ฆฌ๋ฏ๋ก ์๋ฒ์ ์๋ต์ฑ์ ์ํฅ์ ๋ฏธ์น๋ค๋ ์ ์ ๊ธฐ์ตํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
JAX-RS API์ ์๋ ์ฃผ์ ์ฃผ์ ๋์ด
- ๊ฒฝ๋ก - REST ๋ฆฌ์์ค์ ์๋ URI(Uniform Resource Identifier) ๊ฒฝ๋ก๋ฅผ ์์ธํ ์ค๋ช ํฉ๋๋ค.
- GET - ์์ฒญ ๋ฐฉ๋ฒ์ ๋ํ ์ด ์ง์ ์๋ HTTP GET์ ํด๋นํฉ๋๋ค. GET ์ฟผ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
- POST - ์์ฒญ ๋ฐฉ๋ฒ์ ๋ํ ์ด ์ง์ ์๋ HTTP POST์ ํด๋นํฉ๋๋ค. POST ๋ฌธ์๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
- PUT - ์์ฒญ ๋ฐฉ๋ฒ์ ๋ํ ์ด ์ง์ ์๋ HTTP PUT ์์ฒญ์ ํด๋นํฉ๋๋ค. PUT ๋ฌธ์๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
- DELETE - HTTP DELETE์ ์ฌ์ฉ๋๋ ์์ฒญ ๋ฐฉ๋ฒ์ ๋ํ ์ง์ ์๋ก ์ ์๋ฉ๋๋ค. DELETE ์์ฒญ์ ์ฒ๋ฆฌํฉ๋๋ค.
- HEAD - ์์ฒญ ๋ฐฉ๋ฒ์ ๋ํ ์ด ์ง์ ์๋ HTTP HEAD์ ํด๋นํฉ๋๋ค. HEAD ๋ฌธ์๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
- PathParam - ๊ฐ๋ฐ์๋ ์ด URI(Uniform Resource Identifier) ๊ฒฝ๋ก ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์์ ํด๋์ค/๋ฉ์๋์ ๋ํ URI์์ ๋งค๊ฐ๋ณ์๋ฅผ ์ถ์ถํ ์ ์์ต๋๋ค.
- QueryParam - ๋ฆฌ์์ค ํด๋์ค/๋ฉ์๋๋ ๊ฐ๋ฐ์๊ฐ ์ด URI(Uniform Resource Identifier) ์ฟผ๋ฆฌ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ URI(Uniform Resource Identifier)์์ ์ถ์ถํ ์ด๋ฌํ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ์์ฑ - ์์ฑ๋์ด ์ฌ์ฉ์์๊ฒ ํ์ ์ผ๋ก ์ ์ก๋๋ MIME ๋ฆฌ์์ค ํ๋ ์ ํ ์ด์ ์ด ์ฌ๊ธฐ์ ์ง์ ๋ฉ๋๋ค.
- ์๋น - ์ฌ์ฉ์๋ก๋ถํฐ ๋ค์ ๋ฐ์ ๋ ์๋ฒ๊ฐ ์๋ฝํ๊ฑฐ๋ ์ฌ์ฉํ MIME ๋ฆฌ์์ค ํ๋ ์ ํ ์ด์ ์ ์์ธํ ์ค๋ช ํฉ๋๋ค.
Spring์์ RestTemplate ์ ์
RESTful ์๋น์ค์ ๋ํ ์ฌ์ฉ์ ์ก์ธ์ค๋ฅผ ์ํ ๊ธฐ๋ณธ ํด๋์ค๋ฅผ RestTemplate์ด๋ผ๊ณ ํฉ๋๋ค. REST ์ ํ์ ํ์ฉํ์ฌ ์๋ฒ์ ํต์ ํฉ๋๋ค. ์ด๊ฒ์ JdbcTemplate ๋ฐ HibernateTemplate๊ณผ ๊ฐ์ด Spring์์ ์ ๊ณตํ๋ ๋ค๋ฅธ ํ ํ๋ฆฟ ์น์ ๊ณผ ๋น๊ตํ ์ ์์ต๋๋ค. RestTemplate์ (Uniform Resource Identifier) URI ํ ํ๋ฆฟ, URI(Uniform Resource Identifier) ๊ฒฝ๋ก ๋งค๊ฐ๋ณ์, ์์ฒญ/์๋ต ์ข ๋ฅ, ์์ฒญ ๊ฐ์ฒด ๋ฑ์ ์ฌ์ฉํ์ฌ ํต์ ํ ์ ์๋ ๊ธฐ๋ฅ์ ๋ฉ์๋์ ์ ๊ณตํฉ๋๋ค. GET๊ณผ ๊ฐ์ HTTP ๋ฉ์๋์ ๋ํ ๋์ ์์ค์ ๊ตฌํ ์ธ๋ถ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค. , POST, PUT ๋ฑ
Spring 4.3์ ์ด ์น์ ์ @GetMapping, PutMapping, @PostMapping ๋ฑ๊ณผ ๊ฐ์ด ์์ฃผ ์ฌ์ฉ๋๋ ์ฃผ์์ ์ ๊ณตํฉ๋๋ค. ๊ทธ ์ ์ Spring์ ํ์ฉ๋๋ ๋ฉ์๋๋ฅผ ์ง์ ํ๊ธฐ ์ํด @RequestMapping ํด์์ ์ ๊ณตํฉ๋๋ค.
@RequestMapping์ ์ฉ๋๋ ๋ฌด์์ ๋๊น?

-
์์ฒญ์ ์ฃผ์์ ์ฌ์ฉํ์ฌ ํน์ ์ฒ๋ฆฌ๊ธฐ ๋ฉ์๋์ ๋งคํ๋ฉ๋๋ค.
-
Dispatcher Servlet์ Spring์์ ๋ค์ด์ค๋ ๋ชจ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ๋ผ์ฐํ ์ ๊ด๋ฆฌํฉ๋๋ค. ์์ฒญ ํธ๋ค๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ์์ฒญ์ ์์ ํ ๋ ์์ฒญ์ ์ฒ๋ฆฌํ ์ปจํธ๋กค๋ฌ๋ฅผ ๋ชจ๋ ๊ฒฐ์ ํฉ๋๋ค. @Controller ์ด๋ ธํ ์ด์ ์ด ์๋ ๋ชจ๋ ํด๋์ค๋ Dispatcher Servlet์ ์ํด ์ค์บ๋ฉ๋๋ค.
์ปจํธ๋กค๋ฌ ๋ฉ์๋ ๋ฐ ํด๋์ค ๋ด๋ถ์ ์ ์๋ @RequestMapping ์ฃผ์์ ์์ฒญ ๋ผ์ฐํ ํ๋ก์ธ์ค์ ํ์์ ์ ๋๋ค.
์น API ๊ฐ๋ฐ ๋๋ ํ ์คํธ๋ฅผ ์ํ ๋๊ตฌ ๋๋ API ๋์ด
Postman, Swagger ๋ฑ๊ณผ ๊ฐ์ ๋ค์ํ ๋๊ตฌ์ ๋์์ผ๋ก RESTful ์น ์๋น์ค๋ฅผ ํ ์คํธํ ์ ์์ต๋๋ค. Postman์๋ ๋์ ์ ์์ฒญ์ ๋ณด๋ด๊ณ , JSON ๋๋ XML๋ก ๋ณํํ ์ ์๋ ์๋ต์ ํ์ํ๊ณ , ์๋ต ํค๋๋ ๋ฌผ๋ก ํค๋ ๋ฐ ์ฟผ๋ฆฌ ๋งค๊ฐ๋ณ์์ ๊ฐ์ ์์ฒญ ๋งค๊ฐ๋ณ์๋ฅผ ๋ถ์ํ๋ ๊ธฐ๋ฅ์ ํฌํจํ์ฌ ๋ง์ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. Postman๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก Swagger๋ ๋์ ์ ๋ฌธ์ํํ๋ ๊ธฐ๋ฅ๋ฟ๋ง ์๋๋ผ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. Jmeter์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ API์ ์ฑ๋ฅ๊ณผ ๋ถํ๋ฅผ ํ ์คํธํ ์๋ ์์ต๋๋ค.
์บ์ฑ์ด๋ ๋ฌด์์ ๋๊น?
์๋ฒ ์๋ต์ด ์บ์๋๋ฉด ๋์ผํ ์๋ต์ ๋ค์ ์์ฑํ ํ์ ์์ด ํ์ํ ๋๋ง๋ค ์๋ก์ด ์ฌ๋ณธ์ ํ์ฉํ ์ ์๋๋ก ์ ์ฅ๋ฉ๋๋ค. ์ด ๊ธฐ์ ์ ์๋ฒ์ ๋ถ๋ด์ ๋์ด์ค ๋ฟ๋ง ์๋๋ผ ์ฑ๋ฅ๊ณผ ํ์ฅ์ฑ์ ํฅ์์ํต๋๋ค. ์๋ต์ ํด๋ผ์ด์ธํธ๊ฐ ์ ์ ๋์๋ง ์บ์ํ ์ ์์ต๋๋ค.
์บ์ฑ ์ ์ฐจ์์ ๋ฆฌ์์ค๋ฅผ ์๋ณํ ์ ์๋๋ก ๋ฆฌ์์ค์ ํค๋์ ๊ฐ๋ตํ ์ค๋ช ์ด ์๋์ ํฌํจ๋์ด ์์ต๋๋ค.
- ๋ฆฌ์์ค๊ฐ ์์ฑ๋ ๋ ์ง ๋ฐ ์๊ฐ
- ์ผ๋ฐ์ ์ผ๋ก ์ต์ ์ ๋ณด๋ฅผ ์ ์งํ๋ ๋ฆฌ์์ค ์ ๋ฐ์ดํธ ๋ ์ง ๋ฐ ์๊ฐ
- ์บ์ ์ ์ด์ฉ ํค๋
- ์บ์๋ ๋ฆฌ์์ค๊ฐ ์๋์ ์ค์งํ๋ ๋ ์ง ๋ฐ ์๊ฐ
- ๋ฆฌ์์ค๋ฅผ ๊ฐ์ ธ์จ ์์ ์ ์์์ ์ ์ค์ ํ๋ ๊ธฐ๊ฐ
REST API๋ฅผ ๋ฐฐ์ฐ๊ธฐ์ ๊ฐ์ฅ ์ข์ ๋ฆฌ์์ค๋ ๋ฌด์์ ๋๊น?
์น์ฌ์ดํธ ๋ฐ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ ์ ์ํ REST API๋ฅผ ๋ฐฐ์ธ ์ ์๋ ๋ง์ ๋ฆฌ์์ค๊ฐ ์์ต๋๋ค. ์์ 5๊ฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
RESTful ์น ์๋น์ค
API๋ฅผ ์ฌ์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์์ํ๋ ค๋ฉด Leonard Richardson์ด ์์ฑํ RESTful Web Services wonder๋ผ๋ ์ด ๊ฐ์ด๋๋ถ์ด ํฐ ์์ฐ์ด ๋ ๊ฒ์ ๋๋ค. ํนํ ์ด๋ณด์์ด๊ณ REST(Representational State Transfer) ์น ์ฌ์ดํธ ์๋น์ค์ ๊ธฐ๋ณธ ์ฌํญ์ ์ดํดํ๋ ค๋ ๊ฒฝ์ฐ์ ๊ทธ๋ ์ต๋๋ค. ์ด ๋ฆฌ์์ค๋ REST(Representational State Transfer) ๊ธฐ๋ฅ๊ณผ ๊ธฐํ ์ฌ๋ฌ ํ์ ์น ๊ด๋ จ ์๋น์ค๋ฅผ ์์ ์ ํจ๊ป ๊ณต๊ฐํ์ต๋๋ค. ํ๋์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ง ์์ผ๋ฏ๋ก RESTful API์ ๋ํ ์ดํด๋ ์ด๋ค ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์๋ ๊ตฌ์๋์ง ์์ต๋๋ค.
REST API ํํ ๋ฆฌ์ผ
REST API Tutorial์ ์ฑ ์ ์ฝ๊ฑฐ๋ ์ฑ ์ ์ฝ๋ ์ฌ๋์ด ์๋ ๊ฒฝ์ฐ REST(Representational State Transfer)๋ฅผ ๋ฐฐ์ธ ์ ์๋ ํ๋ฅญํ ์จ๋ผ์ธ ๋ฆฌ์์ค์ ๋๋ค. ์ด ๋ฆฌ์์ค๋ ๋ชจ๋ ๊ธฐ๋ณธ ์ธก๋ฉด์ ๋ค๋ฃจ๋ REST๋ฅผ ์ฒ์๋ถํฐ ๋๊น์ง ๋ฐฐ์ฐ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ์ด ํํ ๋ฆฌ์ผ์ REST(Representational State Transfer)์ ๋์ ์ผ๋ก ์์ํ์ฌ HTTP ๊ด๋ จ ์ ๋ต ๋ฐ ์ง์ ๋ฑ์ ๊ดํ ์์ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ฆ ๋๋ค.
REST API ๋์์ธ ๋ฃฐ๋ถ
Mark Masse ์ฑ ์ ์ ์๊ฐ REST API๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ ๋์์ด ๋ ๊ฒฝํ๊ณผ ์ ๋ต์ ์ ๋ฌํ๊ธฐ ๋๋ฌธ์ ์ด ์ฑ ์ REST(Representational State Transfer) ์ง์นจ์ ์ํ ํ๋ฅญํ ๋ฆฌ์์ค ์ฑ ์ด๊ธฐ๋ ํฉ๋๋ค. ์ด ๋ฆฌ์์ค์์ ๊ทธ๋ ์ ํ๋ฆฌ์ผ์ด์ URI๋ฅผ ๊ณ ์ํ๋ ๋ฐฉ๋ฒ, HTTP ํค๋๋ฅผ ํตํด ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ๋ฐฉ๋ฒ, ์ฌ์ฉํ ์ ์๋ ๋ฏธ๋์ด ์ ํ์ ๋ํด ๋ ผ์ํ์ต๋๋ค. ๋ํ HTTP์ ์ ์ถ ๋ฐฉ๋ฒ ๋ฐ ์๋ต ์ํ ์ฝ๋๋ฅผ ์ค๊ณํ๋ ๋ฐ ํ์ ์ ์ฐธ์ฌ์ํค๋ ๋ฐฉ๋ฒ์ ๋ํด ์ค๋ช ํฉ๋๋ค.
API ๊ฐ๋ฐ์ ์ฃผ๊ฐ ๋ด์ค๋ ํฐ
API ๊ฐ๋ฐ์ ์ฃผ๊ฐ ๋ด์ค๋ ํฐ๋ผ๋ ๋ฉ์ง ๋ฆฌ์์ค๊ฐ ์์ต๋๋ค. ์น ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐ ๋ชจ๋ฐ์ผ ์ฑ์ ์ํ API ๊ธฐ์ , ๊ตฌ์กฐ, ํ์ฅ ๋ฐ ์ํคํ ์ฒ์ ๊ณ ๋๋ก ์ง์ค๋์ด ์์ด RESTful API ํ์ต์ ์ํ ์ต์ ๋ฆฌ์์ค์ ๋๋ค. ๋ด์ค๋ ํฐ๋ ๊ฐ๋ฐ์, ํ๋ก์ ํธ ๊ด๋ฆฌ์ ๋ฐ ๊ฑด์ถ๊ฐ๋ฅผ ์ํด ํน๋ณํ ์ ์๋์์ต๋๋ค.
์์ฌ
์ด๊ฒ์ Java๋ผ๋ ํ๋์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ๊ฒฝํ์ด ์๋ ์ฌ๋๋ค์ ์ํ ์ด ์ข์ ์คํ ์์ค REST ํ ์คํธ ๋งค์ฒด์ ๋๋ค. ์ด ๋ฆฌ์์ค๋ RESTful API ํ๋ก์ธ์ค๋ฅผ ํ ์คํธํ๊ณ ๊ฒ์ฆํ๋ ์ ์ฐจ๋ฅผ ์ฉ์ดํ๊ฒ ํฉ๋๋ค. REST-Assured๋ ๋ํ ๋ณต์กํ ๋ฐ์์ ํ ์คํธํ๊ธฐ ์ํด ์์ฉ๊ตฌ ์ฝ๋๋ฅผ ๋ง๋ค ํ์์ฑ์ ์์ ๊ณ BDD ๊ตฌ๋ฌธ์ ๋์ต๋๋ค.
๊ฐ๋จํ ๋งํด์
๊ฒฐ๋ก ์ ์ผ๋ก, ์์์ ์ธ๊ธํ ๊ธฐ์ฌ๋ REST API ์ธํฐ๋ทฐ ์ง๋ฌธ์ ๊ณต์ ํฉ๋๋ค. RESTful API ์ง์์ด ํ์ํ ์ ์ฌํ ์ง๋ฌด์ ์ง์ํ๊ฑฐ๋ ์ง์ํ ์ ์ด ์๋ ์ฌ๋๋ค์ ์ํ ๋ชจ๋ REST API ์ธํฐ๋ทฐ ์ง๋ฌธ์ ๋ค๋ฃน๋๋ค. ๋ฉด์ ๊ด์ด ๋ฉด์ ์์ ๊ฐ์ฅ ๋ง์ด ํ๋ ์ง๋ฌธ์ ๋๋ค. ๋ํ ์ต์ข ๋ฉด์ ์ ๋ณด๊ธฐ ์ ์ ์ธ๊ธ๋ ๋ฆฌ์์ค๋ฅผ ํ์ธํ์ญ์์ค.
๋ํ ์น์ฌ์ดํธ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ ๋ชจ๋ฐ์ผ ์ฑ์ ๊ตฌ์ถํ๋ ค๋ ๊ฒฝ์ฐ AppMaster๊ฐ ์ต๊ณ ์ ์ ํ์ด ๋ ์ ์์ต๋๋ค. ๋ชจ๋ ์ข ๋ฅ์ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ฝ๊ฒ ๋ง๋ค ์ ์๋ ์ฝ๋๊ฐ ์๋ ํ๋ซํผ ์ ๋๋ค.umi-doebnigga" data-mce-href="https://appmaster.io/ko/blog/ggeuleoseo-nohgiga-siljero-mueosimyeo-weonhaneun-sayongja-jijeong-sopeuteweoreul-eodneun-de-eoddeohge-doumi-doebnigga"> ๋๋๊ทธ ์ค ๋๋กญ ๋ฐฉ์์ด๋ฉฐ ์ด์ ์ ์ฝ๋ฉ ๊ฒฝํ์ด๋ ์ง์์ด ํ์ํ์ง ์์ต๋๋ค. ์ง๊ธ ๊ฑฐ๋๋ฅผ ํ์ธํ์ญ์์ค.


