HTTP #7 ์ํ์ฝ๋ (200,300,400,500)
by JiwonDev# HTTP์ ์ํ์ฝ๋
HTTP ์๋ต ๋ฉ์์ง ์ฒซ ์ค(Start-Line) ํค๋์๋ ์ํ์ฝ๋๊ฐ ํฌํจ๋์ด ์๋ค.
HTTP ์ฝ๋๋ฅผ ์ถ๊ฐํด์ ์ฌ์ฉํ๋๋ผ๋ ์์๋ฆฌ (2XX, 4XX)๋ ๋ฐ๋์ง ์์ผ๋ฏ๋ก, ๋ง์ฝ ํด๋ผ์ด์ธํธ์์ ์๋ต์ฝ๋๋ฅผ ์ ํํ๊ฒ ๋ชจ๋ฅด๋๋ผ๋ ์ถ๊ฐ์ ์ธ ํ๋์ด ํ์ํ๊ฑด์ง ํ์ธํ ์ ์๋ค.
๋ค๋ง ๋ชจ๋ HTTP ์ํ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ ๊ฑด ์๋๋ค. ๋ฌด์์ ์ฝ๋๋ฅผ ๋ง์ด ์ฌ์ฉํด๋ด์ผ ํด๋ผ์ด์ธํธ์์ ์ฒ๋ฆฌํ๊ธฐ๋ ํ๋ค๊ณ ๊ตณ์ด ๊ทธ๋ ๊ฒ ํ ์ด์ ๋ ์๊ธฐ ๋๋ฌธ์ด๋ค.
โ ์ค์ ์๋น์ค์์ ์ฌ์ฉํ ๋งํ ์ฝ๋๋ง ๋น ๋ฅด๊ฒ ์์๋ณด๋๋ก ํ์. ์๋ ๋ฒํธ๋ ์์ด๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
# ์ฑ๊ณต 2XX
์ฑ๊ณต์ ํ์ ์์ 200๋ง ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ๋ง๋ค. ๊ทธ ์ธ์๋ 201, 204 ์ ๋๋ง ์์ฃผ ์ฌ์ฉํ๋ ํธ์ด๋ค.
- [200 OK] ์ฑ๊ณต์ ์๋ฏธํ๋ค. ์๋ต์ ๋ฐํ๋ฐ์ผ๋ฉด ๋๋ค.
- [201 Created] ์์ฒญ์ ์ฑ๊ณตํด์ ์๋ก์ด ๋ฆฌ์์ค๊ฐ ์์ฑ๋์์์ ์๋ ค์ค๋ค.
โก 200๊ณผ ๋ค๋ฅธ์ ์, Location ํค๋๋ฅผ ์ฌ์ฉํด์ ์์ฑ๋ ๋ฆฌ์์ค์ URI๋ฅผ ์ ๊ณตํด์ค๋ค.
- [202 Accepted] ์์ฒญ์ ์ ์๋ ์ฑ๊ณตํ๊ณ , ์ฒ๋ฆฌ๋ฅผ ๋์ค์ ํ๋ ๊ฒฝ์ฐ. ๋ค๋ง ๊ฑฐ์ ์ฌ์ฉํ์ง๋ ์๋ ์ฝ๋์ด๋ค.
- [204 No Content] ์๋ฒ๊ฐ ์์ฒญ์ ์ฑ๊ณตํ์ง๋ง, ์๋ต ๋ณธ๋ฌธ์ ๋ณด๋ผ ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ค.
# ๋ฆฌ๋ค์ด๋ ํธ 3XX
์์ฒญ์ ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌํ๊ณ , ์๋ฃํ๊ธฐ ์ํด ํด๋ผ์ด์ธํธ์ ์ถ๊ฐ์ ์ธ ์กฐ์น(๋ฆฌ๋ค์ด๋ ํธ)๊ฐ ํ์ํ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ค.
โก ์น ๋ธ๋ผ์ฐ์ ๋ 3xx ์๋ต ๊ฒฐ๊ณผ์ [Location ํค๋]๊ฐ ์๋ค๋ฉด Location์ ์๋ URI ์์น๋ก ๋ฆฌ๋ค์ด๋ ํธ ์ํจ๋ค.
์ฐธ๊ณ ๋ก ๋ฆฌ๋ค์ด๋ ์ ์๋ 3๊ฐ์ง ์ข ๋ฅ๊ฐ ์๋ค.
- ์๊ตฌ ๋ฆฌ๋ค์ด๋ ์ - URI๊ฐ ์๊ตฌ์ ์ผ๋ก ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ค. ๊ฒ์ ์์ง์์๋ ๋ณ๊ฒฝ์ ์ธ์งํ๋ค.
- ์ผ์ ๋ฆฌ๋ค์ด๋ ์ - ํ์๊ฐ์ ํ ํ๋ฉด ์ด๋์ด ํ์ํ ๋์ฒ๋ผ ๋จ์ํ ๋ฆฌ๋ค์ด๋ ์ ์ ์๋ฏธํ๋ค.
- ํน์ ๋ฆฌ๋ค์ด๋ ์ - ๊ฒฐ๊ณผ ๋์ ์บ์๋ฅผ ์ฌ์ฉํ๋๋ก ๋ฆฌ๋ค์ด๋ ํธ ํ๋ค. (์๋ฒ ์๋ต ๊ฒฐ๊ณผ๊ฐ ๊ฐ์๋ฐ ๋ ์์ฒญํ ๊ฒฝ์ฐ)
@ ์๊ตฌ ๋ฆฌ๋ค์ด๋ ์ - [301 Moved Permanently], [308 Permanent Redirect]
- ๋ ๋ค ์๊ตฌ ๋ฆฌ๋ค์ด๋ ์ ์ผ๋ก, ๋ณ๊ฒฝ๋๊ธฐ ์ URI๋ฅผ ํธ์ถํ์ ๋ ์ฌ์ฉํ๋ ์๋ต์ฝ๋์ด๋ค.
- ์ฌ๋ฐ๋ ์ ์ ๊ธฐ์กด์ HTTP ์คํ์ 308๋ง ์์์ผ๋, ๋๋ถ๋ถ์ ์น ๋ธ๋ผ์ฐ์ ๊ฐ 301์ฒ๋ผ ๋์ํด์ ์คํ์ด ์ถ๊ฐ๋์๋ค.
โก ๊ทธ๋์ ํ์ํ๋ค๋ฉด 301์ ์ฌ์ฉํ์ง, 308์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ์๋ค. ์ด์ ๋ HTTP์ ์์ ์ฑ, ๋ฉฑ๋ฑ์ฑ์ ์๊ฐํด๋ณด์.
๐ [301 Moved Permanently]์ ๋ฆฌ๋ค์ด๋ ํธ์ ์์ฒญ ๋ฉ์๋๊ฐ GET์ผ๋ก ๋ณํ๊ณ , ๋ณธ๋ฌธ์ด ์ ๊ฑฐ๋ ์ ์๋ค.
๐ [308 Permanent Redirect]์ ๊ธฐ์กด์ ์์ฒญ ๋ฉ์๋์ ๋ณธ๋ฌธ์ ๊ทธ๋๋ก ์ ์งํ ์ํ๋ก ๋ฆฌ๋ค์ด๋ ํธ ์ํจ๋ค.
@ ์ผ์ ๋ฆฌ๋ค์ด๋ ์ - [302 Found], [307 Temporary Redirect], [303 See Other]
- ํ์๊ฐ์ ํ ํ๋ฉด์ ํ์ฒ๋ผ, ํ๋ฒํ ๋ฆฌ๋ค์ด๋ ์ ์ ์๋ฏธํ๋ค.
- ๊ธฐ์กด์๋ 302๋ง ์กด์ฌํ์ผ๋ ์น ๋ธ๋ผ์ฐ์ ์์ 303, 307์ฒ๋ผ ์ฌ์ฉํด์ ์คํ์ ์ถ๊ฐํ์๋ค.
โก ์๊ตฌ ๋ฆฌ๋ค์ด๋ ์ ์ 301๋ง ์ฌ์ฉํ์ง๋ง, ์ผ์ ๋ฆฌ๋ค์ด๋ ์ ์ ๊ทธ๋ฅ 302๋ฅผ ์ฐ๋ ๊ฒฝ์ฐ๋ ์๋ค.
์ฐธ๊ณ ๋ก ๋ธ๋ผ์ฐ์ ํ์ฌ๋ค์ด ์์์น์ธ๊ฒ ์๋๋ผ, HTTP ์คํ์ ์์ธํ๊ฒ ์ ์ง ์์๊ธฐ ๋๋ฌธ์ ์ผ์ด๋ ๋ฌธ์ ์ด๋ค.
๐ [302 Found] ๋ฆฌ๋ค์ด๋ ํธ ์์ฒญ ๋ฉ์๋๊ฐ GET์ผ๋ก ๋ณํ๊ณ , ๋ณธ๋ฌธ์ด ์ ๊ฑฐ๋ ์ ์๋ค. (๊ฑฐ์ ๋๋ถ๋ถ 303์ฒ๋ผ ๋์ํ๋ค.)
๐ [303 See Other] ๋ฆฌ๋ค์ด๋ ํธ์ ์์ฒญ ๋ฉ์๋๊ฐ GET์ผ๋ก ๋ณ๊ฒฝ๋๋ค. ๋ณธ๋ฌธ๋ ์์ด์ง๋ค.
๐ [307 Temporary Redirect] ๋ฆฌ๋ค์ด๋ ํธ์ ์์ฒญ ๋ฉ์๋์ ๋ณธ๋ฌธ์ด ์ ์ง๋๋ค.
303, 307๋ง ์ฌ์ฉํ๋๊ฑธ ๊ถ์ฅํ์ง๋ง, ํ์ค์ ์ผ๋ก ์น์๋น์ค์์ 302๊ฐ ๋ง์ด ์ฐ์ด๊ณ ์๊ธฐ์ ์ฌ์ฉํด๋ ํฐ ์๊ด์ ์๋ค.
- ์๋ก๊ณ ์นจ์ ๋๋ ์ ๋ POST ์์ฒญ์ด ์ค๋ณต ๋ฐ์ํ์ง ์๋๋ก PRG( Post->Redirect->Get )๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ค.
โก [POST๋ฅผ ๋ณด๋ด๋ ์ฃผ๋ฌธ์ ๋ ฅ]์์ [GET์ ๋ณด๋ด๋ ์ฃผ๋ฌธ์ ๋ ฅ์๋ฃ]๋ก ๋ฆฌ๋ค์ด๋ ํธ ์์ผ๋ฒ๋ฆฌ๋ ๊ฒ์ด๋ค.
@ ํน์ ๋ฆฌ๋ค์ด๋ ์ - [304 Not Modified]
- ์บ์๋ฅผ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๋ค. ์กฐ๊ฑด๋ถ GET, HEAD๋ฅผ ๊ตฌํํ ์ ์๋ค.
- ํด๋ผ์ด์ธํธ์๊ฒ ๋ฆฌ์์ค๊ฐ ์์ ๋์ง ์์์์ ์๋ ค์ค๋ค. ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๋ฉด ๋ก์ปฌPC์ ์บ์๋ก ๋ฆฌ๋ค์ด๋ ํธ ํ๋ค.
- ๊ทธ๋์ 304 Not Modified๋ ์๋ต์ ๋ฉ์์ง ๋ฐ๋๋ฅผ ํฌํจํ๋ฉด ์๋๋ค.
# ํด๋ผ์ด์ธํธ ์ค๋ฅ 4XX
ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด ์๋ชป๋์ด ์๋ฒ๊ฐ ์ฒ๋ฆฌํ ์ ์์์ ์๋ฏธํ๋ค.
์ค๋ฅ์ ์์ธ์ด ํด๋ผ์ด์ธํธ์ ์๋ค. ์ฆ ์์ฒญ์ ํ๋ฒ ๋ ๋ณด๋ธ๋ค๊ณ ํ๋ค ์ค๋ฅ ๋ณต๊ตฌ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค. ๊ณ์ ๊ฑฐ๋ถํ๋ค.
- [400 Bad Request] ํด๋ผ์ด์ธํธ๊ฐ ์๋ชป๋ ์์ฒญ์ ํ ๊ฒฝ์ฐ. ํ๋ผ๋ฏธํฐ๋ ๋ฉ์์ง์ ๊ฐ์ด ์ด์ํ ๊ฒฝ์ฐ
โก ์๋ฒ์์๋ ์ด๋ฐ ๊ฒฝ์ฐ 5XX์๋ฌ๊ฐ ์๋ 4XX์๋ฌ๊ฐ ๋์ค๋๋ก ๋ช ํํ๊ฒ ์์ธ์ฒ๋ฆฌ๋ฅผ ํด์ค์ผํ๋ค. - [401 Unauthorized] ํด๋ผ์ด์ธํธ๊ฐ ์ธ์ฆ๋์ง ์์ ์ฒ๋ฆฌ๊ฐ ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ ๋ฐ์ํ๋ค.
โก ์ด๋ฆ์ ์ธ๊ฐ๋ก ์ ํ์์ง๋ง, ์ฌ์ค 401์ ์ธ์ฆ(Authentication)์ ์ฌ์ฉ๋๋ค. ๋ก๊ทธ์ธ์ด ์๋ ๊ฒฝ์ฐ
- [403 Forbidden] ์๋ฒ๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์์ง๋ง, ๊ถํ์ด ์์ด ์ฒ๋ฆฌ๋ฅผ ๊ฑฐ๋ถํ๋ ๊ฒฝ์ฐ
โก ์ด ๋ฉ์๋๋ฅผ ์ธ๊ฐ(Authorization)์ผ๋ก ์ฌ์ฉํ๋ฉด ๋๋ค. ๋ณธ์ธํ์ธ์ ๋์์ง๋ง ๊ถํ ์์ - [404 Not Found] ์ค๋ช
์ด ํ์ํ๊ฐ? ์๋ฒ๋ ๋ฉ์ฉกํ์ง๋ง ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ ๋ฆฌ์์ค๊ฐ ์๋ ๊ฒฝ์ฐ ๋ฐ์ํ๋ค.
โก ๋๋ ๋ณด์์ ์ํด [403 Forbidden]๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ๋ณด์ฌ์ฃผ๊ณ ์ถ์ง ์์๊ฒฝ์ฐ, 404๋ก ๋์ฒดํ๊ธฐ๋ ํ๋ค.
# ์๋ฒ ์ค๋ฅ 5XX
์๋ฒ ์์ฒด๊ฐ ์๋ต์ด ์๊ฑฐ๋, ์๋ฒ์์ ์ฒ๋ฆฌ ๋์ค ์ค๋ฅ(Exception๋ฑ)์ด ๋ฐ์ํ ๊ฒฝ์ฐ ๋ฐํํ๋ ์ฝ๋์ด๋ค.
์๋ฒ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ์ ๋ถ 500์ ๋ฐํํ๋ ๋ฐ, ํด๋ผ์ด์ธํธ ์ค๋ฅ์ธ ๊ฒฝ์ฐ ์์ธ์ฒ๋ฆฌ๋ฅผ ํ์ฌ 400์ผ๋ก ๋ฐ๊ฟ์ฃผ์ด์ผํ๋ค.
- [500 Internal Server Error] ์๋ฒ์์ ์ค๋ฅ๊ฐ ๋ฐ์. ๋ฐฑ์๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด 500 ์ค๋ฅ๋ก ์ฒ๋ฆฌํ๋ฉด ๋๋ค.
- [503 Service Unavailable] ์๋ฒ๋ค์ด, ์๋ฒ์ ์ค๋ฅ๊ฐ ๋ ๊ฒ์ด ์๋๋ผ ์ผ๋ถ๋ก ์๋ฒ๋ฅผ ๊บผ๋๋๊ฒฝ์ฐ ์ฌ์ฉํ๋ค.
โก ์์ ๋ ์์ ์ด ์์ด ์๋ฒ๋ฅผ ๋ ๊ฒฝ์ฐ Retry-After ํค๋ ํ๋๋ก ๋ณต๊ตฌ์๊ฐ์ ๋ณด๋ด์ฃผ๊ธฐ๋ ํ๋ค.
โ ์๋ฒ ์ค๋ฅ๋ ์ ๋ง ์๋ฒ๊ฐ ๋์ํ์ง ์๋ ๊ฒฝ์ฐ๋ฅผ ์๋ฏธํ๋ค. ์๋น์ค์ ์์ธ ์ผ์ด์ค๊ฐ ์๋๋ค.
์) ์์ก์ด 0์์ด๋ผ ์ถ๊ธ์ด ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ, 400์ผ๋ก ํด๊ฒฐํด์ผํ๋ค. ์ด๋ ์ค๋ฅ๊ฐ ์๋๋ผ ๋น์ฆ๋์ค ๋ก์ง์ ์ผ๋ถ์ด๋ค.
์) ๋ก๊ทธ์ธ์ด ์๋์ด ์ ๊ทผ๋ถ๊ฐ๋ฅํ๋ค๋ฉด 401๋ก, ๋ก๊ทธ์ธ์ ๋์์ง๋ง ์ ๊ทผ ๊ถํ์ด ์๋ค๋ฉด 403, 404๋ก ์ฒ๋ฆฌํ๋ค.
'๐๊ธฐ๋ณธ ์ง์ > ์น ๊ธฐ๋ณธ์ง์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
HTTP #9 ์ธ์ -์ฟ ํค, JWTํ ํฐ (0) | 2021.09.06 |
---|---|
HTTP #8 ํค๋ (์์ฒญํค๋, ์๋ตํค๋, ์ฟ ํค, ์บ์, ํ๋ก์) (0) | 2021.09.06 |
HTTP #6 ๊ธฐ๋ณธ์ ์ธ API ์ค๊ณ (0) | 2021.09.06 |
HTTP #5 ์์ฒญ ๋ฉ์๋ (0) | 2021.09.06 |
HTTP #4 ํน์ง๊ณผ ๋ฉ์์ง ๊ตฌ์กฐ (0) | 2021.07.18 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
JiwonDev
JiwonDev