์์ฝ :
์ํ ์ฝ๋๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ ์ฒ๋ฆฌ ์ํ๋ฅผ ํ์ํ๋ฉฐ ์ฃผ๋ก 1xx(Informational), 2xx(Successful), 3xx(Redirection), 4xx(Client Error), 5xx(Server Error)๋ก ๋ถ๋ฅ๋๋ค. ๋ชจ๋ฅด๋ ์ํ ์ฝ๋๋ ์์ ์นดํ ๊ณ ๋ฆฌ๋ก ์ฒ๋ฆฌ๋๋ฉฐ, ํด๋ผ์ด์ธํธ๋ ์๋ก์ด ์ํ ์ฝ๋ ์ถ๊ฐ์๋ ๋ณ๊ฒฝ ์์ด ๋์ํ ์ ์๋ค. ์ด ๊ตฌ๋ถ์ ์์ฒญ ๋ฐ ์๋ต์ ์ํ๋ฅผ ๋ช ํํ ์ ๋ฌํ๊ณ ์ดํดํ๊ธฐ ์ฝ๊ฒ ๋์์ค๋ค.
์ฌ์ง ๋ฐ ๊ฐ์ ์ถ์ฒ : ๋ชจ๋ ๊ฐ๋ฐ์๋ฅผ ์ํ HTTP ์น ๊ธฐ๋ณธ ์ง์
- ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ธ ์์ฒญ์ ์ฒ๋ฆฌ ์ํ๋ฅผ ์๋ต์์ ์๋ ค์ฃผ๋ ๊ธฐ๋ฅ
- 1xx (Informational): ์์ฒญ์ด ์์ ๋์ด ์ฒ๋ฆฌ์ค(๊ฑฐ์ ์ฌ์ฉ X)
- 2xx (Successful): ์์ฒญ ์ ์ ์ฒ๋ฆฌ
- 3xx (Redirection): ์์ฒญ์ ์๋ฃํ๋ ค๋ฉด ์ถ๊ฐ ํ๋์ด ํ์
- 4xx (Client Error): ํด๋ผ์ด์ธํธ ์ค๋ฅ, ์๋ชป๋ ๋ฌธ๋ฒ๋ฑ์ผ๋ก ์๋ฒ๊ฐ ์์ฒญ์ ์ํํ ์ ์์
- 5xx (Server Error): ์๋ฒ ์ค๋ฅ, ์๋ฒ๊ฐ ์ ์ ์์ฒญ์ ์ฒ๋ฆฌํ์ง ๋ชปํจ
- ํด๋ผ์ด์ธํธ๊ฐ ์ธ์ํ ์ ์๋ ์ํ์ฝ๋๋ฅผ ์๋ฒ๊ฐ ๋ฐํํ๋ฉด?
- ํด๋ผ์ด์ธํธ๋ ์์ ์ํ์ฝ๋๋ก ํด์ํด์ ์ฒ๋ฆฌ
- ๋ฏธ๋์ ์๋ก์ด ์ํ ์ฝ๋๊ฐ ์ถ๊ฐ๋์ด๋ ํด๋ผ์ด์ธํธ๋ฅผ ๋ณ๊ฒฝํ์ง ์์๋ ๋จ
- ์)
- 299 ??? -> 2xx (Successful)
- 451 ??? -> 4xx (Client Error)
- 599 ??? -> 5xx (Server Error)
ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌ
- ์์ฒญ ์ฑ๊ณต
- ์์ฒญ ์ฑ๊ณตํด์ ์๋ก์ด ๋ฆฌ์์ค ์์ฑ๋จ
- ์์ฒญ์ด ์ ์๋์์ผ๋ ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋์ง ์์์
- ๋ฐฐ์น ์ฒ๋ฆฌ ๊ฐ์ ๊ณณ์์ ์ฌ์ฉ
- ์) ์์ฒญ ์ ์ ํ 1์๊ฐ ๋ค์ ๋ฐฐ์น ํ๋ก์ธ์ค๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํจ
- ์ ์ฌ์ฉ X
- ์๋ฒ๊ฐ ์์ฒญ์ ์ฑ๊ณต์ ์ผ๋ก ์ํํ์ง๋ง, ์๋ต ํ์ด๋ก๋ ๋ณธ๋ฌธ์ ๋ณด๋ผ ๋ฐ์ดํฐ๊ฐ ์์
- ์) ์น ๋ฌธ์ ํธ์ง๊ธฐ์์ save ๋ฒํผ
- save ๋ฒํผ์ ๊ฒฐ๊ณผ๋ก ์๋ฌด ๋ด์ฉ์ด ์์ด๋ ๋๋ค.
- save ๋ฒํผ์ ๋๋ฌ๋ ๊ฐ์ ํ๋ฉด์ ์ ์งํด์ผ ํ๋ค.
- ๊ฒฐ๊ณผ ๋ด์ฉ์ด ์์ด๋ 204 ๋ฉ์์ง(2xx)๋ง์ผ๋ก ์ฑ๊ณต์ ์ธ์ํ ์ ์๋ค.
- ์์ฒญ์ ์๋ฃํ๊ธฐ ์ํด ์ ์ ์์ด์ ํธ(=์น ๋ธ๋ผ์ฐ์ )์ ์ถ๊ฐ ์กฐ์น ํ์
- ์น ๋ธ๋ผ์ฐ์ ๋ 3xx ์๋ต์ ๊ฒฐ๊ณผ์ Location ํค๋๊ฐ ์์ผ๋ฉด, Location ์์น๋ก ์๋ ์ด๋(๋ฆฌ๋ค์ด๋ ํธ)
- ์๊ตฌ ๋ฆฌ๋ค์ด๋ ์ : ํน์ ๋ฆฌ์์ค์ URI๊ฐ ์๊ตฌ์ ์ผ๋ก ์ด๋
- ์) /members -> /users
- ์) /event -> /new-event
- ์ผ์ ๋ฆฌ๋ค์ด๋ ์ : ์ผ์์ ์ธ ๋ณ๊ฒฝ
- ์ฃผ๋ฌธ ์๋ฃ ํ ์ฃผ๋ฌธ ๋ด์ญ ํ๋ฉด์ผ๋ก ์ด๋
- PRG: Post/Redirect/Get
- ํน์ ๋ฆฌ๋ค์ด๋ ์
- ๊ฒฐ๊ณผ ๋์ ์บ์๋ฅผ ์ฌ์ฉ
- ๋ฆฌ์์ค์ URI๊ฐ ์๊ตฌ์ ์ผ๋ก ์ด๋
- ์๋์ URL๋ฅผ ์ฌ์ฉX, ๊ฒ์ ์์ง ๋ฑ์์๋ ๋ณ๊ฒฝ ์ธ์ง
- ๋ฆฌ๋ค์ด๋ ํธ์ ์์ฒญ ๋ฉ์๋๊ฐ
GET์ผ๋ก ๋ณํ๊ณ , ๋ณธ๋ฌธ์ด ์ ๊ฑฐ๋ ์ ์์(MAY) - ์์ ์๋ก์ด ์ด๋ฒคํธ ํ์ด์ง(๋ฉ์ธ์ง ์ ๊ฑฐ๋ก ์ธํด)
- 301๊ณผ ๊ธฐ๋ฅ์ ๊ฐ์
- ๋ฆฌ๋ค์ด๋ ํธ์ ์์ฒญ ๋ฉ์๋์ ๋ณธ๋ฌธ ์ ์ง(์ฒ์ POST๋ฅผ ๋ณด๋ด๋ฉด ๋ฆฌ๋ค์ด๋ ํธ๋ POST ์ ์ง)
- ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ
- ๋ฆฌ์์ค์ URI๊ฐ ์ผ์์ ์ผ๋ก ๋ณ๊ฒฝ
- ์ค๋๋ฐ๋ก ๋ค์ด์์ผ ํ๋ค.
- ๋ฐ๋ผ์ ๊ฒ์ ์์ง ๋ฑ์์ URL์ ๋ณ๊ฒฝํ๋ฉด ์๋จ
- ๋ฆฌ๋ค์ด๋ ํธ์ ์์ฒญ ๋ฉ์๋๊ฐ
GET์ผ๋ก ๋ณํ๊ณ , ๋ณธ๋ฌธ์ด ์ ๊ฑฐ๋ ์ ์์(MAY) - ๋๋ถ๋ถ ๋ฐ๋์ง๋ง ์๋ง๋ผ์ ํ์ค์น๋ ์์
- 302์ ๊ธฐ๋ฅ์ ๊ฐ์
- ๋ฆฌ๋ค์ด๋ ํธ์ ์์ฒญ ๋ฉ์๋์
๋ณธ๋ฌธ ์ ์ง(์์ฒญ ๋ฉ์๋๋ฅผ ๋ณ๊ฒฝํ๋ฉด ์๋๋ค. MUST NOT)
- 302์ ๊ธฐ๋ฅ์ ๊ฐ์
- ๋ฆฌ๋ค์ด๋ ํธ์ ์์ฒญ ๋ฉ์๋๊ฐ GET์ผ๋ก ๋ณ๊ฒฝ
- POST๋ก ์ฃผ๋ฌธํ์ ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ์๋ก๊ณ ์นจํ๋ฉด?
- ์๋ก๊ณ ์นจ์ ๋ค์ ์์ฒญ
- ์ค๋ณต ์ฃผ๋ฌธ์ด ๋ ์ ์๋ค,
- ์๋ก๊ณ ์นจ์ ํ๋ฉด ์ค๋ณต์ฃผ๋ฌธ์ด ๋์ด๋ฒ๋ฆผ
- ์๋ก๊ณ ์นจ : ์น๋ธ๋ผ์ฐ์ ๊ฐ ํธ์คํธ์ ๋ง์ง๋ง ์์ฒญ์ ๋ค์ ํ ๋ฒ ์ํํ๊ธฐ์ POST๋ก ํ ๋ฒ ๋ ์ํํ๋ฉฐ ์ค๋ณต์ฃผ๋ฌธ์ด ๋์ด๋ฒ
- POST๋ก ์ฃผ๋ฌธํ์ ์๋ก ๊ณ ์นจ์ผ๋ก ์ธํ ์ค๋ณต ์ฃผ๋ฌธ ๋ฐฉ์ง
- URL์ด POST๋ก ์ฃผ๋ฌธํ์ ์ฃผ๋ฌธ ๊ฒฐ๊ณผ ํ๋ฉด์ GET ๋ฉ์๋๋ก ๋ฆฌ๋ค์ด๋ ํธ
- ์๋ก๊ณ ์นจํด๋ ๊ฒฐ๊ณผ ํ๋ฉด์
GET์ผ๋ก ์กฐํ - ์ค๋ณต ์ฃผ๋ฌธ ๋์ ์ ๊ฒฐ๊ณผ ํ๋ฉด๋ง
GET์ผ๋ก ๋ค์ ์์ฒญ - ์๋ฒ์ ๋ถ๋ด๋ ์ค์ด๋ฆ(๋ฌผ๋ก ์๋ฒ๋ ๊ฐ์ ์ฃผ๋ฌธ๋ฒํธ ์๋๊ฒ ๋ง์์ผ )
- 302 Found -> GET์ผ๋ก ๋ณํ ์ ์์
- 307 Temporary Redirect -> ๋ฉ์๋๊ฐ ๋ณํ๋ฉด ์๋จ
- 303 See Other -> ๋ฉ์๋๊ฐ GET์ผ๋ก ๋ณ๊ฒฝ
- ์ฒ์ 302 ์คํ์ ์๋๋ HTTP ๋ฉ์๋๋ฅผ ์ ์งํ๋ ๊ฒ
- ๊ทธ๋ฐ๋ฐ ์น ๋ธ๋ผ์ฐ์ ๋ค์ด ๋๋ถ๋ถ GET์ผ๋ก ๋ฐ๊พธ์ด๋ฒ๋ฆผ**(์ผ๋ถ๋ ๋ค๋ฅด๊ฒ ๋์)**
- ๊ทธ๋์ ๋ชจํธํ 302๋ฅผ ๋์ ํ๋ ๋ช ํํ 307, 303์ด ๋ฑ์ฅํจ(301 ๋์์ผ๋ก 308๋ ๋ฑ์ฅ)
- 307, 303์ ๊ถ์ฅํ์ง๋ง ํ์ค์ ์ผ๋ก ์ด๋ฏธ ๋ง์ ์ ํ๋ฆฌ์ผ์ด์
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด
302๋ฅผ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ฌ์ฉ - ์๋ ๋ฆฌ๋ค์ด๋ ์ ์์ GET์ผ๋ก ๋ณํด๋ ๋๋ฉด ๊ทธ๋ฅ 302๋ฅผ ์ฌ์ฉํด๋ ํฐ ๋ฌธ์ ์์
- 300 Multiple Choices: ์์ด๋ค.
- 304 Not Modified
- ์บ์๋ฅผ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ
- ํด๋ผ์ด์ธํธ์๊ฒ ๋ฆฌ์์ค๊ฐ ์์ ๋์ง ์์์์ ์๋ ค์ค๋ค. ๋ฐ๋ผ์ ํด๋ผ์ด์ธํธ๋ ๋ก์ปฌPC์ ์ ์ฅ๋ ์บ์๋ฅผ ์ฌ์ฌ์ฉํ๋ค. (์บ์๋ก ๋ฆฌ๋ค์ด๋ ํธ ํ๋ค.)
- ๋ง์ด ์ฌ์ฉํ๋ค.
- 304 ์๋ต์ ์๋ต์ ๋ฉ์์ง ๋ฐ๋๋ฅผ ํฌํจํ๋ฉด ์๋๋ค. (๋ก์ปฌ ์บ์๋ฅผ ์ฌ์ฉํด์ผ ํ๋ฏ๋ก)
- ์กฐ๊ฑด๋ถ GET, HEAD ์์ฒญ์ ์ฌ์ฉ
- ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์๋ชป๋ ๋ฌธ๋ฒ๋ฑ์ผ๋ก ์๋ฒ๊ฐ ์์ฒญ์ ์ํํ ์ ์์
- ์ค๋ฅ์ ์์ธ์ด
ํด๋ผ์ด์ธํธ์ ์์ - ์ค์! ํด๋ผ์ด์ธํธ๊ฐ ์ด๋ฏธ ์๋ชป๋ ์์ฒญ, ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ณ ์๊ธฐ ๋๋ฌธ์, ๋๊ฐ์ ์ฌ์๋๊ฐ ์ค ํจํจ
- ํด๋ผ์ด์ธํธ๊ฐ ์๋ชป๋ ์์ฒญ์ ํด์ ์๋ฒ๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์์
- ์์ฒญ ๊ตฌ๋ฌธ, ๋ฉ์์ง ๋ฑ๋ฑ ์ค๋ฅ
- ํด๋ผ์ด์ธํธ๋ ์์ฒญ ๋ด์ฉ์ ๋ค์ ๊ฒํ ํ๊ณ , ๋ณด๋ด์ผํจ
- ์) ์์ฒญ ํ๋ผ๋ฏธํฐ๊ฐ ์๋ชป๋๊ฑฐ๋, API ์คํ์ด ๋ง์ง ์์ ๋(๋ฐฑ์๋์์ ๋ง์์ค์ผ ํด๋ผ์ด์ธํธ ๊ฐ๋ฐ์๊ฐ ์ ์ ์๊ฒ ๋จ)
- ํด๋ผ์ด์ธํธ๊ฐ ํด๋น ๋ฆฌ์์ค์ ๋ํ
์ธ์ฆ์ด ํ์ํจ - ์ธ์ฆ(Authentication) ๋์ง ์์
- 401 ์ค๋ฅ ๋ฐ์์ ์๋ต์ WWW-Authenticate ํค๋์ ํจ๊ป ์ธ์ฆ ๋ฐฉ๋ฒ์ ์ค๋ช
- ์ฐธ๊ณ
์ธ์ฆ(Authentication): ๋ณธ์ธ์ด ๋๊ตฌ์ธ์ง ํ์ธ, (๋ก๊ทธ์ธ)์ธ๊ฐ(Authorization): ๊ถํ๋ถ์ฌ (ADMIN ๊ถํ์ฒ๋ผ ํน์ ๋ฆฌ์์ค์ ์ ๊ทผํ ์ ์๋ ๊ถํ, ์ธ์ฆ์ด ์์ด์ผ ์ธ๊ฐ๊ฐ ์์)- ์ค๋ฅ ๋ฉ์์ง๊ฐ Unauthorized ์ด์ง๋ง ์ธ์ฆ ๋์ง ์์ (์ด๋ฆ์ด ์์ฌ์)
- ์๋ฒ๊ฐ ์์ฒญ์ ์ดํดํ์ง๋ง ์น์ธ์ ๊ฑฐ๋ถํจ
- ์ฃผ๋ก ์ธ์ฆ ์๊ฒฉ ์ฆ๋ช ์ ์์ง๋ง, ์ ๊ทผ ๊ถํ์ด ๋ถ์ถฉ๋ถํ ๊ฒฝ์ฐ
- ์) ์ด๋๋ฏผ ๋ฑ๊ธ์ด ์๋ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ์ ํ์ง๋ง, ์ด๋๋ฏผ ๋ฑ๊ธ์ ๋ฆฌ์์ค์ ์ ๊ทผํ๋ ๊ฒฝ์ฐ
- ์์ฒญ ๋ฆฌ์์ค๋ฅผ ์ฐพ์ ์ ์์
- ์์ฒญ ๋ฆฌ์์ค๊ฐ ์๋ฒ์ ์์
- ๋๋ ํด๋ผ์ด์ธํธ๊ฐ ๊ถํ์ด ๋ถ์กฑํ ๋ฆฌ์์ค์ ์ ๊ทผํ ๋ ํด๋น ๋ฆฌ์์ค๋ฅผ ์จ๊ธฐ๊ณ ์ถ์ ๋
- ์๋ฒ ๋ฌธ์ ๋ก ์ค๋ฅ ๋ฐ์
- ์๋ฒ์ ๋ฌธ์ ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ฌ์๋ ํ๋ฉด ์ฑ๊ณตํ ์๋ ์์(๋ณต๊ตฌ๊ฐ ๋๊ฑฐ๋ ๋ฑ๋ฑ)
- ์๋ฒ ๋ฌธ์ ๋ก ์ค๋ฅ ๋ฐ์, ์ ๋งคํ๋ฉด 500 ์ค๋ฅ
- ์๋ฒ ๋ด๋ถ ๋ฌธ์ ๋ก ์ค๋ฅ ๋ฐ์
- ์ ๋งคํ๋ฉด 500 ์ค๋ฅ
- nullpointexception
- ์๋ฒ๊ฐ ์ผ์์ ์ธ ๊ณผ๋ถํ ๋๋ ์์ ๋ ์์ ์ผ๋ก ์ ์ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์์
- Retry-After ํค๋ ํ๋๋ก ์ผ๋ง๋ค์ ๋ณต๊ตฌ๋๋์ง ๋ณด๋ผ ์๋ ์์







