์ธํฐ๋ท์ ์ฐ๊ฒฐ๋ ์ปดํจํฐ๋ฅผ ํตํด ์ฌ๋๋ค์ด ์ ๋ณด๋ฅผ ๊ณต์ ํ ์ ์๋ ์ ๋ณด ๊ณต๊ฐ์ ์๋ฏธํฉ๋๋ค.
ex) web site, API, UserInterface(Chrome,Safari ๋ฑ)
URI (Uniform Resource Identifier)
//
HTTP(Hypertext Transfer Protocol)
์น์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ๋ฐ ์ฌ์ฉ๋๋ ํ๋กํ ์ฝ์ ๋๋ค. www์ ๊ธฐ๋ฐ์ด๋ฉฐ ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ์ ํต์ ์ ํ์ฉํฉ๋๋ค. GET,POST,PUT,DELETE... ๋ฑ์ ์ฌ์ฉํฉ๋๋ค.
HTML(Hypertext Markup Language)
์น ํ์ด์ค๋ฅผ ๋ง๋๋ ๋ฐ ์ฌ์ฉ๋๋ ํ์ค ๋งํฌ์ ์ธ์ด์ ๋๋ค. text,image,link ๋ฑ์ ํฌํจํ์ฌ ์นํ์ด์ง์ ๊ตฌ์กฐ์ ์ปจํ ์ธ ๋ฅผ ์ ๊ณตํฉ๋๋ค. HTML๋ฌธ์๋ ์น ๋ธ๋ผ์ฐ์ ์์ ํด์๋์ด ์ฌ์ฉ์๊ฐ ๋ณผ ์ ์๋๋ก ์๊ฐ์ ์ผ๋ก ํํ๋ฉ๋๋ค.
REST(Representational State Transfer : ์์์ ์ํ ์ ๋ฌ) - ๋คํธ์ํฌ ์ํคํ ์ฒ
REST๋ ์น ์๋น์ค๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํ ์ํคํ ์ฒ ์ ํ์ ๋๋ค. REST API๋ ์๋ก ๋ค๋ฅธ ์ํํธ์จ์ด ์์คํ ์ด ํ์ค HTTP ๋ฉ์๋ ๋ฐ ์๋ํฌ์ธํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ธํฐ๋ท์ ํตํด ๋ฐ์ดํฐ๋ฅผ ํต์ ํ๊ณ ๊ตํํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
URL์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ์ ์์ธ์คํ๊ณ ์กฐ์ํ๋ฏ๋ก ๊ฐ๋ฐ์๊ฐ ํ์ฅ,์ ์ง,๊ด๋ฆฌ ๊ฐ๋ฅํ ์น ์๋น์ค๋ฅผ ๊ฐ๋จํ๊ณ ์ ์ฐํ๊ฒ ๊ตฌ์ถํ ์ ์์ต๋๋ค. ์น์ฑ, ์ฑ์ ๊ตฌ์ถํ๊ณ ๋ค์ํ ์์คํ ์ ํตํฉํ๊ณ ํ ์คํธ ๋ฐ ์ ๋ฐ์ดํธ๊ฐ ์ฌ์ ๊ฐ๋ฐ ํ์ ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค.
RESTํ API๋ ๋ค์๊ณผ ๊ฐ์ ์กฐ๊ฑด์ ๋ง์กฑํด์ผ ํฉ๋๋ค.
์ธํฐํ์ด์ค์ ์ผ๊ด์ฑ์ด ์ ์ง์ผ์ก๋์ง ๋ฐ๋ผ, REST๋ฅผ ์ ์ฌ์ฉํ๋์ง ํ๋จํ ์ ์์ต๋๋ค.
1. ์์์ ์๋ณ
์น ๊ธฐ๋ฐ์ REST์์๋ ๋ฆฌ์์ค ์ ๊ทผํ ๋ URI๋ฅผ ์ฌ์ฉํฉ๋๋ค.
**ex) https://www.naver.com/user/999
์ฌ๊ธฐ์ Resource : user, ์๋ณ์ : 999์ ๊ฐ์ ์ ๋ณด๊ฐ ๋ด๊ฒจ์๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
2. ๋ฉ์์ง๋ฅผ ํตํ ๋ฆฌ์์ค ์กฐ์
Web์์๋ ๋ค์ํ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค. ์ด๋ ํ ํ์ ์ ๋ฐ์ดํฐ์ธ์ง ์ ๋ฌ ํ๊ธฐ ์ํด HTTP Header๋ถ๋ถ์ content-type์ ํตํด ๋ฐ์ดํฐ์ ํ์ ์ ์ง์ ํ ์ ์์ต๋๋ค. ๋ํ ๋ฆฌ์์ค ์กฐ์์ ์ํด ๋ฐ์ดํฐ ์ ์ฒด๋ฅผ ํฌํจํ์ง ์๊ณ ์ด๋ฅผ ๋ฉ์์ง๋ก ์ ๋ฌํฉ๋๋ค.
HTTP๋ฉ์์ง๋ head, body๋ก ์ด๋ฃจ์ด์ ธ์์ต๋๋ค. ์ฃผ๋ก ๋ด์ฉ์ body์ ์์ต๋๋ค.
ex) ์ ์ ์ id๋ฅผ ํด๋ผ์ด์ธํธ์ ์ฃผ๊ณ ๋ฐ์ ๋, ์๋ฒ์ ๋ฆฌ์์ค ๋ณ๊ฒฝ์ผ๋ก ๊ธฐ์กด id๋ผ๋ ์ ๋ณด๋ฅผ userId, clientId ๋ฑ์ผ๋ก ๋ฐ๋๊ฒ ๋๋ค๋ฉด ์๋ฌ๊ฐ ๋๊ฒ ๋ฉ๋๋ค.
์์์ ๋์จ ๋ด์ฉ์ ๋ฐฉ์ง ํ๊ธฐ ์ํด ๋ฉ์์ง ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ผ๋ฉฐ, client-server๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ํ์ฅํ ์ ์๋๋ก ํฉ๋๋ค.
3. ์๊ธฐ์์ ์ ๋ฉ์์ง
์์ฒญํ๋ ๋ฐ์ดํฐ๊ฐ ์ด๋ป๊ฒ ์ฒ๋ฆฌ ๋์ด์ ธ์ผ ํ๋์ง ์ถฉ๋ถํ ๋ฐ์ดํฐ๋ฅผ ํฌํจ ํ ์ ์์ด์ผ ํฉ๋๋ค. HTTP๊ธฐ๋ฐ์ REST์์๋ HTTP Method์ Header ์ ๋ณด, URI์ ํฌํจ๋๋ ์ ๋ณด๋ก ํํํ ์ ์์ต๋๋ค.
GET : {{BASEURL}}/user/100 -> ์ ์ ์ ์ ๋ณด ์์ฒญ
POST : {{BASEURL}}/user/create -> ์ ์ ์ ๋ณด ์์ฑ
PUT : {{BASEURL}}/user/100 -> ์ ์ ์ ๋ณด ์์
DELETE : {{BASEURL}}/user/100 -> ์ ์ ์ ๋ณด ์ญ์
URI(Uniform Resource Identifier)
์น์์ ๋ฆฌ์์ค๋ฅผ ์๋ณํ๊ณ ์ฐพ๋๋ฐ ์ฌ์ฉ๋๋ ๋ฌธ์์ด์ ๋๋ค. ๋ฆฌ์์ค๋ฅผ ๊ณ ์ ํ๊ฒ ์๋ณํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. URI๋ ์น ๋ธ๋ผ์ฐ์ , ๊ฒ์์์ง ๋ฑ ์ํํธ์จ์ด ์์ฉํ๋ก๊ทธ๋จ์์ ์น์ ๋ฆฌ์์ค๋ฅผ ์ฐพ๊ณ ์ก์ธ์ค ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. -> ์ธํฐ๋ท์์ ํน์ ์์์ ๋ํ๋ด๋ ์ฃผ์ ๊ฐ์ด๋ฉฐ ํด๋น ๊ฐ์ ์ ์ผํฉ๋๋ค.
์์ฒญ -> {{baseurl}}/resource/100
์๋ต -> recipe.pdf
๋ฆฌ์์ค ์๋ณ์-> ํน์ ์ฌ์ดํธ, ๋์์ ๋ชฉ๋ก ๋ฑ ๋ชจ๋ ์ ๋ณด์ ์ ๊ทผ ํ ์ ์๋ ์ ๋ณด
URL(Uniform Resource Locator)
์ธํฐ๋ท ์์์์ ์์, ํน์ ํ์ผ์ด ์ด๋์ ์์นํ๋์ง ์๋ณํ๋ ์ฃผ์์
๋๋ค.
์์ฒญ : {{baseurl}}/recipe.pdf
๐ฅ ์ง์ผ์ผ ํ ๊ฒ ๋๋ฌด ๋ง์๋ฐ??
์๊ฐํด ๋ดค๋๋ ๋ด๋ถ์ ์๋ ๋ก์ง์ ๊ดํ ๊ฒ๊ณผ ์์ ์ฌ์ฉํ๋ ๊ฒ๋ค์ด ๋๋ถ๋ถ์ด๋ผ ํฌ๊ฒ ์ด๋ ค์ด ๊ฒ์ ์์ด๋ณด์ธ๋ค.
HTTP(Hyper Text Transfer Protocol) ๋ก ์น์์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ํ๋กํ ์ฝ์ ๋๋ค. ์ค์ ๋ก๋ HTML,XML,JSON,Image,Voice,Video,JS,PDF ๋ฑ๋ฑ ๋ค์ํ ์ปดํจํฐ์์ ๋ค๋ฃฐ ์ ์๋ ๊ฒ์ ๋ชจ๋ ์ ์ก ๊ฐ๋ฅํฉ๋๋ค. HTTP๋ TCP๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ REST์ ํน์ง์ ๋ชจ๋ ๊ตฌํํ๊ณ ์๋ Web๊ธฐ๋ฐ ํ๋กํ ์ฝ ์ ๋๋ค.
HTTP๋ ๋ฐ๋์ request๋ฅผ ์ฃผ๊ณ response๋ฅผ ๋ฐ๋ ํต์ ๋ฐฉ๋ฒ ์ ๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์์ฒญ ๋ฉ์ธ์ง๋ฅผ ์์ฑํ๊ณ ์๋ต์ ๋๊ธฐํฉ๋๋ค. ์๋ฒ๋ ์์ฒญ์ ๋๊ธฐํ๊ณ ์๋ค๊ฐ ์์ฒญ์ ๋ฐ๊ณ ์ฒ๋ฆฌ๋ฅผ ํ ์ดํ์ ์๋ต ๋ฉ์ธ์ง๋ฅผ ์ก์ ํฉ๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ ์๋ต ๋ฉ์ธ์ง๋ฅผ ์์ ํ๋ฉด์ ํต์ ์ ๋ง์นฉ๋๋ค.
์์ฒญ๋๊ธฐ ๋ฐ ์๋ต ๋๊ธฐ์ ๊ณผ์ ์์ ์ผ์ ๊ธฐ๊ฐ ๋์ ๋ต์ด ์์ผ๋ฉด ๋๊ธฐ๋ฅผ ๋ง์นฉ๋๋ค.
์ญํ | CRUD | ๋ฉฑ๋ฑ์ฑ | ์์ ์ฑ | PathVariable | QueryParameter | body | |
---|---|---|---|---|---|---|---|
GET | ๋ฆฌ์์ค ์ฝ๊ธฐ | R | O | O | O | O | X |
POST | ๋ฆฌ์์ค ์์ฑ,์ถ๊ฐ | C | X | X | O | D | O |
PUT | ๋ฆฌ์์ค ์์ฑ, ๊ฐฑ์ | C,U | O | X | O | D | O |
DELETE | ๋ฆฌ์์ค ์ญ์ | D | O | X | O | O | X |
1xx -> ์ฒ๋ฆฌ๊ฐ ๊ณ์ ๋๋ ์ํ. ํด๋ผ์ด์ธํธ๋ ์์ฒญ์ ๊ณ์ ํ๊ฑฐ๋ ์ฌ์์ฒญ ์๊ตฌ
2xx -> ์ฑ๊ณต
3xx -> ๋ค๋ฅธ ๋ฆฌ์์ค๋ก ๋ฆฌ๋ค์ด๋ ํธ -> Response์ ์๋ก์ด ์ฃผ์๋ก ๋ค์ ์์ฒญ ์๊ตฌ
4xx -> client error -> client์ธก์ ์๋ชป๋ ์์ฒญ ๋ฐ ํ๊ฒฝ
5xx -> ์๋ฒ ์ฒ๋ฆฌ์ค ์๋ฌ๊ฐ ๋ฐ์ํ ์ํ์ด๋ฉฐ ์๋ฒ db๊ตฌ์กฐ์๋ฌ ๋ฑ์ ์ด์ ์ธ ๊ฒฝ์ฐ์ ๋ฐ์