REST ๊ฐ์. ํํธ 1: REST๋ ๋ฌด์์
๋๊น? ์ด ๋ถ๋ถ์์๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ํต์ ์ด ์ด๋ฃจ์ด์ง๋ ๋ฐฉ์์ ๋ํด ์์ธํ ์ค๋ช
ํฉ๋๋ค. ๊ทธ ๊ณผ์ ์์ ์ฐ๋ฆฌ๋ ์๋ก์ด ์ฉ์ด๋ฅผ ๋ฐ๊ฒฌํ๊ณ ์ค๋ช
ํ ๊ฒ์
๋๋ค. ๋ชจ๋ ๊ฒ์ด ๋ช
ํํ์ง ํ์ธํ๊ธฐ ์ํด RESTful ์ ํ๋ฆฌ์ผ์ด์
์ ์๋ก ์ฌ์ฉํ์ฌ ํด๋ผ์ด์ธํธ-์๋ฒ ํต์ ์ ๋ถ์ํฉ๋๋ค. ๊ณ ๊ฐ ๋ฐ ์ฃผ๋ฌธ์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฐ ์ค์ด๋ผ๊ณ ๊ฐ์ ํฉ๋๋ค. ์ฆ, ์ฐ๋ฆฌ ์์คํ
์ ํน์ ์ํฐํฐ์ ๋ํ ์์
์ ์ํํ ์ ์์ต๋๋ค. ์ฆ, ์ํฐํฐ๋ฅผ ์์ฑ, ํธ์ง ๋ฐ ์ญ์ ํ๊ณ ์ํฐํฐ์ ๋ํ ์ ๋ณด๋ฅผ ํ์ํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ํฐํฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๊ณ ๊ฐ (๊ณ ๊ฐ)
- ์ฃผ๋ฌธ(๊ณ ๊ฐ ์ฃผ๋ฌธ)
- ํญ๋ชฉ (์ ํ)
์์ฒญ
ํด๋ผ์ด์ธํธ ์์ฒญ์ ๊ฑฐ์ ํญ์ HTTP ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ฌ ์ด๋ฃจ์ด์ง๋๋ค. ์ผ๋ฐ์ ์ผ๋ก HTTP ์์ฒญ์ ์ฌ๋ฌ ๊ตฌ์ฑ ์์๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.- HTTP ๋ฐฉ์
- ๋จธ๋ฆฌ๊ธ
- URI
- ์์ฒญ ๋ณธ๋ฌธ
URI ๋ฐ ๋ฆฌ์์ค
ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ์ ํตํด ์์ ํ๊ฑฐ๋ ์์ ํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฆฌ์์ค๋ผ๊ณ ํฉ๋๋ค. ํด๋ผ์ด์ธํธ-์๋ฒ ํต์ ์ ๋ฆฌ์์ค ์กฐ์์ ๊ดํ ๊ฒ์ ๋๋ค. REST์์ ๋ฆฌ์์ค๋ ์ด๋ฆ์ ์ง์ ํ ์ ์๋ ๋ชจ๋ ๊ฒ์ ๋๋ค. ์ด๋ค ์๋ฏธ์์ ๊ทธ๊ฒ๋ค์ Java์ ํด๋์ค์ ๊ฐ์ต๋๋ค. Java์์๋ ๋ฌด์์ด๋ ํด๋์ค๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ๋ฐ๋ผ์ REST์์ ๋ฆฌ์์ค๋ ์ฌ์ฉ์, ๋ฌธ์, ๋ณด๊ณ ์, ์ฃผ๋ฌธ ๋ฑ ๋ฌด์์ด๋ ๋ ์ ์์ต๋๋ค. ์ผ๋ถ ์ํฐํฐ์ ์ถ์ํ์ด๊ฑฐ๋ ์ด๋ฏธ์ง, ๋น๋์ค, ์ ๋๋ฉ์ด์ ๋๋ PDF ํ์ผ๊ณผ ๊ฐ์ ํน์ ํญ๋ชฉ์ผ ์ ์์ต๋๋ค. ์ด ์์๋ 3๊ฐ์ ๋ฆฌ์์ค๊ฐ ์์ต๋๋ค.- ๊ณ ๊ฐ (๊ณ ๊ฐ)
- ์ฃผ๋ฌธ(๊ณ ๊ฐ ์ฃผ๋ฌธ)
- ํญ๋ชฉ (์ ํ)
- /customers โ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ๊ณ ๊ฐ์ URI
- /customers/23 โ ํน์ ๊ณ ๊ฐ์ URI, ์ฆ ID=23์ธ ๊ณ ๊ฐ
- /customers/4 โ ํน์ ๊ณ ๊ฐ์ URI, ์ฆ ID๊ฐ 4์ธ ๊ณ ๊ฐ.
- /customers/4/orders โ 4๋ฒ ๊ณ ๊ฐ์ ๋ชจ๋ ์ฃผ๋ฌธ URI
- /customers/1/orders/12 โ 1๋ฒ ๊ณ ๊ฐ์ด ์ฃผ๋ฌธํ 12๋ฒ ์ฃผ๋ฌธ์ URI.
- /customers/1/orders/12/items โ 1๋ฒ ๊ณ ๊ฐ์ด ์ฃผ๋ฌธํ 12๋ฒ ์ฃผ๋ฌธ์ ๋ชจ๋ ์ ํ ๋ชฉ๋ก URI.
HTTP ๋ฐฉ์
HTTP ๋ฉ์๋๋ ๋ฆฌ์์ค์์ ์ํ๋๋ ๊ธฐ๋ณธ ์์ ์ ๋ํ๋ด๋ ๋ชจ๋ ๋ฌธ์(์ ์ด ๋ฌธ์ ๋ฐ ๊ตฌ๋ถ ๊ธฐํธ ์ ์ธ)์ ์ํ์ค์ ๋๋ค. ๋ช ๊ฐ์ง ์ผ๋ฐ์ ์ธ HTTP ๋ฉ์๋๊ฐ ์์ต๋๋ค. RESTful ์๋น์ค์์ ๊ฐ์ฅ ์์ฃผ ์ฌ์ฉ๋๋ ํญ๋ชฉ์ ๋์ดํฉ๋๋ค.- GET โ ํน์ ๋ฆฌ์์ค(ํด๋น ID๋ฅผ ํตํด) ๋๋ ๋ฆฌ์์ค ๋ชจ์์ ๋ํ ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ
- POST โ ์ ๋ฆฌ์์ค ๋ง๋ค๊ธฐ
- PUT โ ๋ฆฌ์์ค ๋ณ๊ฒฝ(ID๋ฅผ ํตํด)
- DELETE โ ๋ฆฌ์์ค ์ญ์ (ID๋ฅผ ํตํด)
ํค๋
์์ฒญ๊ณผ ์๋ต์๋ HTTP ํค๋๊ฐ ํฌํจ๋ฉ๋๋ค. ์์ฒญ(๋๋ ์๋ต)์ ๋ํ ์ถ๊ฐ ์ ๋ณด๋ฅผ ์ ๋ฌํฉ๋๋ค. ํค๋๋ ํค-๊ฐ ์์ ๋๋ค. Wikipedia ์์ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ํค๋ ๋ชฉ๋ก์ ๋ณผ ์ ์์ต๋๋ค . REST์ ๊ฒฝ์ฐ ํด๋ผ์ด์ธํธ๋ ์ข ์ข ์๋ฒ์ ๋ํ ์์ฒญ์ "Accept" ํค๋๋ฅผ ๋ณด๋ ๋๋ค. ์ด ํค๋๋ ํด๋ผ์ด์ธํธ๊ฐ ์๋ต์ ๋ฐ์ ๊ฒ์ผ๋ก ์์ํ๋ ํ์์ ์๋ฒ์ ์๋ ค์ฃผ๋ ๋ฐ ํ์ํฉ๋๋ค. ๋ค์ํ ํ์์ด MIME ์ ํ ๋ชฉ๋ก์ ์ ๊ณต๋ฉ๋๋ค. MIME (Multipurpose Internet Mail Extensions)๋ ์ ๋ณด๋ฅผ ์ธ์ฝ๋ฉํ๊ณ ๋ฉ์์ง๋ฅผ ์ธํฐ๋ท์ ํตํด ๋ณด๋ผ ์ ์๋๋ก ํ์์ ์ง์ ํ๊ธฐ ์ํ ์ฌ์์ ๋๋ค. ๊ฐ MIME ์ ํ์ ์ฌ๋์๋ก ๊ตฌ๋ถ๋ ์ ํ๊ณผ ํ์ ์ ํ์ ๋ ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ๋ค์ํ ์ ํ์ ํ์ผ์ ๋ํ MIME ์ ํ์ ์:- ํ ์คํธ โ ํ ์คํธ/์ผ๋ฐ, ํ ์คํธ/css, ํ ์คํธ/html
- ์ด๋ฏธ์ง โ ์ด๋ฏธ์ง/png, ์ด๋ฏธ์ง/jpeg, ์ด๋ฏธ์ง/gif
- ์ค๋์ค โ ์ค๋์ค/wav, ์ค๋์ค/mpeg
- ๋น๋์ค โ ๋น๋์ค/mp4, ๋น๋์ค/ogg
- ์ ํ๋ฆฌ์ผ์ด์ โ ์ ํ๋ฆฌ์ผ์ด์ /json, ์ ํ๋ฆฌ์ผ์ด์ /pdf, ์ ํ๋ฆฌ์ผ์ด์ /xml, ์ ํ๋ฆฌ์ผ์ด์ /octet-stream
Accept:application/json
์ด ํค๋๋ ํด๋ผ์ด์ธํธ๊ฐ JSON ํ์์ ์๋ต์ ๋ฐ์ ๊ฒ์ผ๋ก ์์ํ๋ค๊ณ ์๋ฒ์ ์๋ฆฝ๋๋ค.
์์ฒญ ๋ณธ๋ฌธ
์ด๊ฒ์ ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก ๋ณด๋ด๋ ๋ฉ์์ง์ ๋๋ค. ์์ฒญ์ ๋ณธ๋ฌธ์ด ์๋์ง ์ฌ๋ถ๋ HTTP ์์ฒญ ์ ํ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. ์๋ฅผ ๋ค์ด GET ๋ฐ DELETE ์์ฒญ์๋ ์ผ๋ฐ์ ์ผ๋ก ์์ฒญ ๋ณธ๋ฌธ์ด ํฌํจ๋์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ PUT ๋ฐ POST ์์ฒญ์ ์์ฒญ์ ๋ชฉ์ ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค. ๊ฒฐ๊ตญ, URL์ ์ ๋ฌ๋ ID๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ฑฐ๋ ์ญ์ ํ๊ธฐ ์ํด ์๋ฒ์ ์ถ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ํ์๊ฐ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ ๋ฆฌ์์ค๋ฅผ ์์ฑํ๋ ค๋ฉด(POST ์์ฒญ์ ํตํด) ๋ฆฌ์์ค๋ฅผ ๋ณด๋ด์ผ ํฉ๋๋ค. ๊ธฐ์กด ๋ฆฌ์์ค๋ฅผ ์์ ํ๋ ๊ฒฝ์ฐ์๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค. REST์์ ์์ฒญ ๋ณธ๋ฌธ์ ๋๋ถ๋ถ XML ๋๋ JSON ํ์์ผ๋ก ์ ์ก๋ฉ๋๋ค. JSON ํ์์ด ๊ฐ์ฅ ์ผ๋ฐ์ ์ ๋๋ค. ์๋ก์ด ๋ฆฌ์์ค๋ฅผ ์์ฑํ๊ธฐ ์ํด ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๊ณ ์ถ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ์์ง ์์ผ์ จ๋ค๋ฉด, ์ฐ๋ฆฌ๋ ๊ณ ๊ฐ ์ฃผ๋ฌธ์ ๊ด๋ฆฌํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ฅผ ๊ณ ๋ คํ์ต๋๋ค. ์๋ก์ด ๊ณ ๊ฐ์ ๋ง๋ค๊ณ ์ถ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ๋น์ฌ์ ๊ฒฝ์ฐ ์ด๋ฆ, ์ด๋ฉ์ผ, ์ ํ๋ฒํธ์ ๊ฐ์ ๊ณ ๊ฐ ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์์ฒญ ๋ณธ๋ฌธ์ ๋ค์ JSON์ด ๋ ์ ์์ต๋๋ค.{
"name" : "Amigo",
"email" : "amigo@jr.com",
"phone" : "+1 (222) 333-4444"
}
์์ฒญ ๋ชจ์ผ๊ธฐ
๊ทธ๋์ ์ฐ๋ฆฌ๋ ํด๋ผ์ด์ธํธ ์์ฒญ์ ๋ฌด์์ด ์๋์ง ์กฐ์ฌํ์ต๋๋ค. ์ด์ ์ค๋ช ๊ณผ ํจ๊ป ์์ฒญ์ ๋ช ๊ฐ์ง ์๋ฅผ ์ ๊ณตํฉ๋๋ค.์๊ตฌ | ์ค๋ช |
---|---|
|
23๋ฒ ๊ณ ๊ฐ์ ๋ํ ์ ๋ณด๋ฅผ JSON ๋๋ XML ํ์์ผ๋ก ๊ฐ์ ธ์ต๋๋ค. |
|
๋ค์ ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ๊ณ ๊ฐ์ ๋ง๋ญ๋๋ค. ์ด๋ฆ โ Amigo ์ด๋ฉ์ผ โ amigo@jr.com ์ ํ ๋ฒํธ โ +1 (222) 333-4444 |
|
๊ณ ๊ฐ ๋ฒํธ 1์ ๋ค์๊ณผ ๊ฐ์ด ํธ์งํฉ๋๋ค. ์ด๋ฆ โ Ben ์ด๋ฉ์ผ โ bigben@jr.com ์ ํ ๋ฒํธ โ +86 (868) 686-8686 |
|
12๋ฒ ๊ณ ๊ฐ์ด ์ฃผ๋ฌธํ 6๋ฒ ์ฃผ๋ฌธ์ ์์คํ ์์ ์ญ์ |
์๋ต
์๋ฒ ์๋ต์ ๋ํด ๋ช ๋ง๋ ํด๋ด ์๋ค. ์๋ต์ ์ผ๋ฐ์ ์ผ๋ก ๋ค์ ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.- ์๋ต ์ฝ๋
- ํค๋
- ์๋ต ๋ณธ๋ฌธ
HTTP ์๋ต ์ฝ๋
HTTP ์๋ต ์ฝ๋๋ฅผ ๋ ์์ธํ ์ดํด๋ณด๊ฒ ์ต๋๋ค. HTTP ์ํ ์ฝ๋๋ HTTP ํ๋กํ ์ฝ์ ํตํด ์ด๋ฃจ์ด์ง ์์ฒญ์ ๋ํ ์๋ฒ ์๋ต์ ์ฒซ ๋ฒ์งธ ๋ผ์ธ์ ์ผ๋ถ์ ๋๋ค. ์ธ ์๋ฆฌ ์ญ์ง์๋ก ๊ตฌ์ฑ๋ ์ ์์ ๋๋ค. ์ฒซ ๋ฒ์งธ ์ซ์๋ ์๋ต ์ํ ์ฝ๋์ ํด๋์ค๋ฅผ ๋ํ๋ ๋๋ค. ์๋ต ์ฝ๋ ๋ค์๋ ์ผ๋ฐ์ ์ผ๋ก ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋ ์์ด ์ค๋ช ๋ฌธ๊ตฌ๊ฐ ์ต๋๋ค. ์ด ๊ตฌ๋ฌธ์ ์ฌ๋์ด ์ฝ์ ์ ์๋ ์๋ต ์ด์ ์ ๋๋ค. ์:- 201 ์์ฑ๋จ
- 401 ๋ฌด๋จ
- 507 ์คํ ๋ฆฌ์ง ๋ถ์กฑ
- 1XX โ ์ ๋ณด ์ ๊ณต
- 2XX โ ์ด ์ฝ๋๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด ์ฑ๊ณต์ ์ผ๋ก ์์ ๋ฐ ์ฒ๋ฆฌ๋์์์ ๋ํ๋ ๋๋ค.
- 3XX โ ์ด ์ฝ๋๋ ํด๋ผ์ด์ธํธ์๊ฒ ์์ ์ ์ฑ๊ณต์ ์ผ๋ก ์๋ฃํ๊ธฐ ์ํด ์ผ๋ฐ์ ์ผ๋ก ๋ค๋ฅธ URI์ ๋ํ ์ถ๊ฐ ์์ฒญ์ ํด์ผ ํจ์ ์๋ฆฝ๋๋ค.
- 4XX โ ํด๋ผ์ด์ธํธ ์ค๋ฅ. ์ด๋ฌํ ์ฝ๋๋ ์๋ชป ๊ตฌ์ฑ๋ ์์ฒญ์ผ๋ก ์ธํด ๋ฐ์ํ ์ ์์ต๋๋ค. ๋ ๋ค๋ฅธ ์๋ ํด๋ผ์ด์ธํธ๊ฐ ์กด์ฌํ์ง ์๋ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ ๋ ๋ฐ์ํ ์ ์๋ ์ ์๋ ค์ง "404 Not Found" ์ฝ๋์ ๋๋ค.
- 5XX โ ์๋ฒ ์ค๋ฅ. ์ด ์ฝ๋๋ ์๋ฒ๊ฐ ์์ ์คํจ์ ๋ํ ์ฑ ์์ด ์๋ ๊ฒฝ์ฐ ํด๋ผ์ด์ธํธ๋ก ๋ฐํ๋ฉ๋๋ค.