http status code - GANGNAM-JAVA/JAVA-STUDY GitHub Wiki

HTTP ์ƒํƒœ ์ฝ”๋“œ

1XX Information

์š”์ฒญ์„ ๋ฐ›์•˜์œผ๋ฉฐ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ณ„์† ์ง„ํ–‰

  • 100 Continue
    • ์ง„ํ–‰ ์ค‘์ž„์„ ์˜๋ฏธํ•˜๋Š” ์‘๋‹ต์ฝ”๋“œ
    • ํ˜„์žฌ๊นŒ์ง€์˜ ์ง„ํ–‰์ƒํƒœ์— ๋ฌธ์ œ๊ฐ€ ์—†์œผ๋ฉฐ, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ณ„์†ํ•ด์„œ ์š”์ฒญ์„ ํ•˜๊ฑฐ๋‚˜ ์ด๋ฏธ ์š”์ฒญ์„ ์™„๋ฃŒํ•œ ๊ฒฝ์šฐ์—๋Š” ๋ฌด์‹œํ•ด๋„ ๋˜๋Š” ๊ฒƒ์„ ์•Œ๋ ค์ค€๋‹ค.
  • 101 Switching Protocols
    • ์š”์ฒญ์ž๊ฐ€ ์„œ๋ฒ„์— ํ”„๋กœํ† ์ฝœ ์ „ํ™˜์„ ์š”์ฒญํ–ˆ์œผ๋ฉฐ, ์„œ๋ฒ„์—์„œ ์ด๋ฅผ ์Šน์ธํ•˜๋Š” ์ค‘์„ ์˜๋ฏธํ•จ

2XX Success

์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์„ฑ๊ณต์ ์œผ๋กœ ์ฒ˜๋ฆฌํ–ˆ๋‹ค๋Š” ์˜๋ฏธ

  • 200 OK

    • ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์„œ๋ฒ„๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ–ˆ๋‹ค.
     HTTP/1.1 200 OK
     {
     	"result" : false
     	"status" : 400
     }
    
    • ์ƒํƒœ ์ฝ”๋“œ๋Š” 200(์„ฑ๊ณต)์ธ๋ฐ, body ๋‚ด์šฉ์—” ์‹คํŒจ์— ๊ด€ํ•œ ๋‚ด์šฉ์„ ๋ฆฌํ„ดํ•˜๊ณ  ์žˆ๋‹ค.
    • ๋ชจ๋“  ์‘๋‹ต์„ 200์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  body ๋‚ด์šฉ์œผ๋กœ ์„ฑ๊ณต, ์‹คํŒจ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•˜๋Š” ๊ตฌ์กฐ
    • API๊ฐ€ ์•„๋‹Œ HTML ์›น ํ”„๋กœ์ ํŠธ์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค.
    • ์›น ํ”„๋กœ์ ํŠธ์—์„  ํฌ๊ฒŒ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์œผ๋‚˜ API์—์„  ๋งŽ์ด ์ด์ƒํ•œ ๊ตฌ์กฐ๋‹ค.
    • ์›น์˜ ์„ค๊ณ„๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋งŽ์ด ํ•˜๋Š” ์‹ค์ˆ˜๋‹ค.
  • 201 Created

    • ์„ฑ๊ณต๊ณผ ๋™์‹œ์— ์ƒˆ๋กœ์šด ๋ฆฌ์†Œ์Šค๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ๋‹ค๋Š” ์˜๋ฏธ๋ฅผ ํฌํ•จํ•œ๋‹ค.
     POST /users HTTP/1.1
     Content-Type: application/json
     {
     	"name": "hak"
     }
    
     HTTP/1.1 201 Created
     {
     	"id" : 1,
     	"name" : "hak"
     }
    
    • ๋ฆฌ์†Œ์Šค ์ƒ์„ฑ์— ๋Œ€ํ•ด 200์œผ๋กœ ๋ณด๋‚ด์ค˜๋„ ๋˜์ง€๋งŒ, ๋” ์ •ํ™•ํ•œ ์˜๋ฏธ ์ „๋‹ฌ์„ ์œ„ํ•ด 201 ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ž.
    • Content-Location์„ ์ด์šฉํ•ด ๋ฆฌ์†Œ๊ฐ€ ์ƒ์„ฑ๋œ ์œ„์น˜๋ฅผ ์•Œ๋ ค์ฃผ๋ฉด ๋” ์ข‹๋‹ค.
  • 202 Accepted

    • ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์ด ์ •์ƒ์ ์ด๋‚˜ ์ž‘์—…์„ ์™„๋ฃŒํ•˜๋Š” ๋ฐ์— ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ ค ๋‚˜์ค‘์— ์•Œ๋ ค์ฃผ๊ฒ ๋‹ค๋Š” ์˜๋ฏธ
    • ์š”์ฒญ์˜ ์™„๋ฃŒ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค
      • Callback
      • polling
  • 204 No Content

    • ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์€ ์ •์ƒ์ ์ด๋‚˜, ์ปจํ…์ธ ๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • HTTP Response body๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • ์ž์› ์‚ญ์ œ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์œผ๋‚˜, ํ”ํ•˜์ง€ ์•Š๋‹ค.
     DELETE /users/1 HTTP/1.1
    
     HTTP/1.1 204 No Content
    

3XX Redirection

  • 300 Multiple Choice

    • ์š”์ฒญ์— ๋Œ€ํ•ด์„œ ํ•˜๋‚˜ ์ด์ƒ์˜ ์‘๋‹ต์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์—์–ธํŠธ ๋˜๋Š” ์‚ฌ์šฉ์ž๋Š” ๊ทธ์ค‘์— ํ•˜๋‚˜๋ฅผ ๋ฐ˜๋“œ์‹œ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‘๋‹ต ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ํ‘œ์ค€ํ™” ๋œ ๋ฐฉ๋ฒ•์€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • 301 Moved Permanently

    • ์ด ์‘๋‹ต ์ฝ”๋“œ๋Š” ์š”์ฒญํ•œ ๋ฆฌ์†Œ์Šค์˜ URI๊ฐ€ ์˜๊ตฌ์ ์œผ๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ์Œ์„ ์˜๋ฏธ
    • Location ํ—ค๋”์— ๋ณ€๊ฒฝ๋œ URL์„ ํฌํ•จํ•ด์•ผ ํ•œ๋‹ค.
  • 302 Found

    • ์ด ์‘๋‹ต ์ฝ”๋“œ๋Š” ์š”์ฒญํ•œ ๋ฆฌ์†Œ์Šค์˜ URI๊ฐ€ ์ผ์‹œ์ ์œผ๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ์Œ์„ ์˜๋ฏธ
    • ์ž„์‹œ ๋ชฉ์ ์œผ๋กœ Location ํ—ค๋”์— ๋ณ€๊ฒฝ๋œ URL์„ ํฌํ•จํ•ด์•ผ ํ•œ๋‹ค.
    • ํด๋ผ์ด์–ธํŠธ๋Š” ์ดํ›„์˜ ์š”์ฒญ๋„ ๋ฐ˜๋“œ์‹œ ์›๋ž˜ URI๋กœ ํ•ด์•ผํ•œ๋‹ค.
    • POST ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ 302๋ฅผ ๋ฐ›์œผ๋ฉด, ํด๋ผ์ด์–ธํŠธ๋Š” Location ํ—ค๋”์— ๋“ค์–ด์žˆ๋Š” ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ URL์„ GET ์š”์ฒญ์œผ๋กœ ๋”ฐ๋ผ๊ฐˆ ๊ฒƒ์ด๋‹ค.
  • 303 See Other

    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋‹ค๋ฅธ URI์—์„œ ๊ฐ€์ ธ์™€์•ผ ํ•œ๋‹ค๊ณ  ๋งํ•ด์ฃผ๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉ
    • ์ฃผ ๋ชฉ์ ์€ POST ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฆฌ์†Œ์Šค์˜ ์œ„์น˜๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ
  • 304 Not Modified

    • ์บ์‹œ๋ฅผ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ
    • ์ด๊ฒƒ์€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์‘๋‹ต์ด ์ˆ˜์ •๋˜์ง€ ์•Š์•˜์Œ์„ ์•Œ๋ ค์ฃผ์–ด ํด๋ผ์ด์–ธํŠธ๋Š” ๊ณ„์†ํ•ด์„œ ์‘๋‹ต์˜ ์บ์‹œ๋œ ๋ฒ„์ „์„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • 305 Use Proxy

    • ๋ฐ˜๋“œ์‹œ ํ”„๋ก์‹œ๋ฅผ ํ†ตํ•ด์„œ ์ ‘์†ํ•ด์•ผ ํ•จ์„ ์•Œ๋ ค์ฃผ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.
    • ํ”„๋ฝ์‹œ์˜ ์œ„์น˜๋Š” Location ํ—ค๋”๋ฅผ ํ†ตํ•ด ์ฃผ์–ด์ง„๋‹ค.
    • ํ”„๋ฝ์‹œ๊ฐ€ ์š”์ฒญ์— ์ž˜๋ชป ๊ฐ„์„ญํ•˜๋ฉด ์˜ค๋™์ž‘ ๋ฐ ๋ณด์•ˆ ๋ฌธ์ œ ์œ ๋ฐœ ๊ฐ€๋Šฅ์„ฑ์œผ๋กœ ์‚ฌ๋ผ์ ธ ๊ฐ€๊ณ  ์žˆ์Œ
  • 306 Unused

    • ํ˜„์žฌ๋Š” ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.
  • 307 Temporary Redirect

    • 302์™€ ๋™์ผ
    • ๊ทธ๋Ÿฌ๋‚˜, ์‚ฌ์šฉ์ž ์—์ด์ „ํŠธ๊ฐ€ ๋ฐ˜๋“œ์‹œ ์‚ฌ์šฉ๋œ HTTP ๋ฉ”์†Œ๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ๋ง์•„์•ผ ํ•˜๋Š” ์ ๋งŒ ๋‹ค๋ฆ„.
      • ์ฒซ ๋ฒˆ์งธ ์š”์ฒญ์— POST๊ฐ€ ์‚ฌ์šฉ๋˜์—ˆ๋‹ค๋ฉด, ๋‘ ๋ฒˆ์งธ ์š”์ฒญ๋„ POST๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
  • ์ฐธ๊ณ )

    • 301 vs 302
      • ๊ฒ€์ƒ‰์—”์ง„ ํฌ๋กค๋Ÿฌ
        • 301์˜ ๊ฒฝ์šฐ ๊ฒ€์ƒ‰์—”์ง„์€ ๊ณผ๊ฑฐ URL์˜ ํŽ˜์ด์ง€๋žญํ‚น๊ณผ ํ‰๊ฐ€์ ์ˆ˜๋ฅผ ์ƒˆ๋กœ์šด URL๋กœ ์ด๋™์‹œํ‚จ๋‹ค.
        • 302์˜ ๊ฒฝ์šฐ ๊ฒ€์ƒ‰์—”์ง„์€ ํŽ˜์ด์ง€๋žญํ‚น์ด๋‚˜ ๋งํฌ์— ๋Œ€ํ•œ ์ ์ˆ˜๋ฅผ ์ƒˆ๋กœ์šด URL๋กœ ์˜ฎ๊ธฐ์ง€ ์•Š์œผ๋ฉฐ ๊ธฐ์กด URL์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€
        • ํ™œ์šฉ ๋ฐฉ๋ฒ•
          • ํ•ด๋‹น ์ œํ’ˆ์ด ๋ณด์œ ํ•œ ์‚ฌ์ดํŠธ๋žญํฌ๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ผ์‹œ์ ์œผ๋กœ ์ œํ’ˆ์ด ํ’ˆ์ ˆ๋์Œ์„ ์•Œ๋ ค์•ผ ํ•  ๋•Œ
            • 301์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ํ˜น์€ ํŽ˜์ด์ง€์˜ content๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฒŒ ๋˜๋ฉด ์‚ฌ์ดํŠธ๋žญํ‚น ์ ์ˆ˜๊ฐ€ ๋‹ฌ๋ผ์ง€๊ฒŒ ๋˜๋‚Ÿ.
            • 302๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒ€์ƒ‰์—”์ง„์€ ์ผ์‹œ์ ์œผ๋กœ ํ•ด๋‹น URL์˜ ์‚ฌ์ดํŠธ๋žญํฌ๋Š” ์œ ์ง€์‹œํ‚ค๊ณ , ์‚ฌ์šฉ์ž๋Š” ์ƒˆ๋กœ์šด URI์˜ content๋ฅผ ๋ณด๊ฒŒ ๋œ๋‹ค.
    • 302 vs 303 vs 307
      • HTTP/1.0์—๋Š” 302 ๋ฐ–์— ์—†์—ˆ๊ณ , ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์š”์ฒญ์— ์ฒ˜์Œ ์š”์ฒญ์˜ HTTP ๋ฉ”์†Œ๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ๋˜์–ด ์žˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ, ๋งŽ์€ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ด ํ‘œ์ค€์„ ๋ฌด์‹œํ–ˆ๊ณ , ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ URL์— ํ•ญ์ƒ GET์„ ์‚ฌ์šฉํ–ˆ๋‹ค.
      • ์ด๋Ÿฌํ•œ ๋ชจํ˜ธํ•จ์„ ์—†์• ๊ธฐ ์œ„ํ•ด HTTP/1.1์— 303๊ณผ 307์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.
      • 303์€ ์ฒ˜์Œ ์š”์ฒญ์ด ์–ด๋–ค ๋ฉ”์†Œ๋“œ๊ฑด ๊ฐ„์— ์ƒˆ URL์— GET ์š”์ฒญ์„ ํ•œ๋‹ค.
      • 307์€ ์ฒ˜์Œ ์š”์ฒญ๊ณผ ๋™์ผํ•œ ๋ฉ”์†Œ๋“œ๋กœ ์ƒˆ URL์— ์š”์ฒญ์„ ํ•œ๋‹ค.

4XX Client error

ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์ด ์œ ํšจํ•˜์ง€ ์•Š์•„ ์„œ๋ฒ„๊ฐ€ ํ•ด๋‹น ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์•˜๋‹ค๋Š” ์˜๋ฏธ

  • 400 Bad Request

    • API ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ๋ฐ”๋กœ ์ž‘์—…์„ ์ง„ํ–‰ํ•˜์ง€ ์•Š๊ณ  ์š”์ฒญ์ด ์„œ๋ฒ„๊ฐ€ ์ •์˜ํ•œ ์œ ํšจ์„ฑ์— ๋งž๋Š”์ง€ ํ™•์ธ ํ›„ ์ง„ํ–‰ํ•œ๋‹ค.

    • ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‚ฌ์ „ ์œ ํšจ์„ฑ ๊ฒ€์ฆ ์ž‘์—…์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

      • ํ•„์ˆ˜ ์—ฌ๋ถ€
      • ์œ ํšจ ์—ฌ๋ถ€
        • ๋ฒ”์œ„
        • ํŒจํ„ด
        • โ€ฆ
    • ๋Œ€๋ถ€๋ถ„์˜ API๋Š” ์‚ฌ์ „์— ์œ ํšจ์„ฑ ๊ฒ€์ฆ์„ ํ†ตํ•ด 400 ์ƒํƒœ ์ฝ”๋“œ๋กœ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์œ ํšจํ•˜์ง€ ์•Š์€ ์š”์ฒญ์ž„์„ ์‘๋‹ตํ•œ๋‹ค.
      (์œ ํšจ์„ฑ ๊ฒ€์ฆ ์—†์ด ์ง„ํ–‰ํ•˜๋ฉด 5xx ์„œ๋ฒ„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋Œ€๋ถ€๋ถ„ ์‚ฌ์ „์— ๋ง‰๋Š” ๋กœ์ง์„ ์ถ”๊ฐ€ํ•œ๋‹ค.)

     HTTP/1.1 400 Bad Request
     {
     	"errors": {
     		"message": "'name'(body) must be String, input 'name': 123",
     			"detail": [
     			{
     				"location": "body",
     				"param": "name",
     				"value": 123,
     				"error": "TypeError",
     				"msg": "must be String"
     			}
     			]
     	}
     }
    
    • ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์œ„์น˜(path, query, body), ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๊ฐ’, ์—๋Ÿฌ ์ด์œ ๋ฅผ ๊ผญ ๋ช…์‹œํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
  • 401 Unauthorized

    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ถŒํ•œ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ž‘์—…์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ
    • ์ธ์ฆ์ด ์•„์ง ์•ˆ ๋˜์–ด ๊ถŒํ•œ์ด ์—†๋Š” ์ƒํƒœ (E.g. ๋กœ๊ทธ์ธ์ด ์•ˆ ๋œ ์ƒํƒœ)
  • 403 Forbidden

    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ถŒํ•œ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ž‘์—…์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ
    • ์ธ์ฆ๋˜์—ˆ์ง€๋งŒ ์š”๊ตฌ๋˜๋Š” ๊ถŒํ•œ๋ณด๋‹ค ๋‚ฎ์€ ๊ฒฝ์šฐ (E.g. ๊ด€๋ฆฌ์ž๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ)
    • 401๊ณผ์˜ ์ฐจ์ด์ (https://stackoverflow.com/a/28672217)
  • 404 Not Found

    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญํ•œ ์ž์›์ด ์กด์žฌํ•˜์ง€ ์•Š๋‹ค.
    • ๋ธŒ๋ผ์šฐ์ €(ํด๋ผ์ด์–ธํŠธ) ์ž…์žฅ์—์„  ์ž์›์ด ๊ณง ์›น ํŽ˜์ด์ง€ ๊ฒฝ๋กœ์ด๊ณ , ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ๋กœ(์ž์›)๋ฅผ ์š”์ฒญํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— 404 ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ์‘๋‹ต๋ฐ›๋Š”๋‹ค.
    • REST API์—์„  ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ์—์„œ 404 ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ์‘๋‹ตํ•œ๋‹ค.
      • ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ
      • ์ž์›์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ
        • ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•˜๋”๋ผ๋„ ์ž์›์˜ ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ์‚ฌ์ „์— ํ™•์ธํ•ด์•ผ ์˜ค๋ฅ˜๋ฅผ ๋ฏธ๋ฆฌ ์ฐจ๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค.
  • 405 Method Not Allowed

    • REST API์—์„œ HTTP Method๋Š” 4๊ฐ€์ง€(POST, GET, PUT, DELETE)๊ฐ€ ์žˆ๋‹ค.
    • ์ž์›(URI)์€ ์กด์žฌํ•˜์ง€๋งŒ, ํ•ด๋‹น ์ž์›์ด ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋ฉ”์†Œ๋“œ์ผ ๋•Œ ์‘๋‹ตํ•˜๋Š” ์ƒํƒœ ์ฝ”๋“œ
    • HTTP OPTIONS Method๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด HTTP Response header์˜ Allow์— ํ•ด๋‹น ์ž์›์˜ ์ง€์› ๋ฉ”์†Œ๋“œ ๋ฆฌ์ŠคํŠธ๋ฅผ ์‘๋‹ต ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
      • ์™„์„ฑ๋„ ๋†’์€ API๋ฅผ ์œ„ํ•ด OPTIONS Method๋ฅผ ์ œ๊ณตํ•˜๊ธฐ๋ฅผ ์ถ”์ฒœํ•œ๋‹ค.
       OPTIONS /users/1 HTTP/1.1
      
       HTTP/1.1 200 OK
       Allow: GET,PUT,DELETE,OPTIONS,HEAD
      
      • ์ฐธ๊ณ )
        • POST /users/:id๋Š” GET, PUT, DELETE ๋ฉ”์†Œ๋“œ๋Š” ํ—ˆ์šฉ๋˜๋‚˜ POST๋Š” ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.
        • GET, PUT, DELETE์˜ ๊ฒฝ์šฐ id 1์˜ ์‚ฌ์šฉ์ž๊ฐ€ ์—†๋‹ค๋ฉด 404๋กœ ์‘๋‹ตํ•œ๋‹ค.
         GET /users/1 HTTP/1.1
        
         HTTP/1.1 404 Not Found
        
        • POST์˜ ๊ฒฝ์šฐ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋ฉ”์†Œ๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์— 405๋กœ ์‘๋‹ตํ•˜๋Š” ๊ฒƒ์ด ์˜ณ์€ ๋ฐฉ๋ฒ•์ด๋‹ค.
         POST /users/1 HTTP/1.1
        
         HTTP/1.1 405 Method Not Allowed
         Allow: GET,PUT,DELETE,OPTIONS,HEAD
        
  • 409 Conflict

    • ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์ด ์„œ๋ฒ„์˜ ์ƒํƒœ์™€ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ

    • ์ถฉ๋Œ์€ ๋งค์šฐ ์ถ”์ƒ์ ์ด์–ด์„œ ์ •์˜ํ•˜๊ธฐ ๋‚˜๋ฆ„์ด๋‹ค.

    • 400, 401, 403, 404, 405 ์ƒํƒœ ์ฝ”๋“œ์— ์†ํ•˜๊ธฐ ๋ชจํ˜ธํ•œ ์˜ค๋ฅ˜๋“ค์„ 409๋กœ ์‘๋‹ตํ•  ์ˆ˜ ์žˆ๋‹ค.

      • ์‘๋‹ต ์‹œ ์˜ค๋ฅ˜์˜ ์›์ธ์„ ์•Œ๋ ค์•ผ ํ•œ๋‹ค. ์ถ”๊ฐ€์ ์œผ๋กœ, HATEOAS๋ฅผ ์ด์šฉํ•ด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋‹ค์Œ ์ƒํƒœ๋กœ ์ „์ด๋  ์ˆ˜ ์žˆ๋Š” ๋งํฌ๋ฅผ ํ•จ๊ป˜ ์‘๋‹ตํ•˜๋ฉด ์ข‹๋‹ค.
       HTTP/1.1 409 Conflict
       {
       	"message" : "First, delete posts"
       	"links": [
       		{
       			"rel": "posts.delete",
       			"method": "DELETE",
       			"href": "https://api.rest.com/v1/users/1/posts"
       		},
       	]
       }
      
  • 429 Too Many Requests

    • ํด๋ผ์ด์–ธํŠน๋ผ ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ ๋„ˆ๋ฌด ๋งŽ์€ ์š”์ฒญ์„ ๋ณด๋‚ธ ๊ฒฝ์šฐ
    • DoS, Brute-force attack ๋“ฑ์˜ ๋น„์ •์ƒ์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ ์ž์›์„ ์š”์ฒญํ•˜๋Š” ๊ฒฝ์šฐ ์‘๋‹ตํ•œ๋‹ค.
    • ์„œ๋ฒ„๊ฐ€ ๊ฐ๋‹นํ•˜๊ธฐ ํž˜๋“  ์š”์ฒญ์ด ๊ณ„์† ๋“ค์–ด์˜ค๋ฉด ์„œ๋ฒ„๋Š” ๋‹ค๋ฅธ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•  ๊ฒƒ์ด๋‹ค.
    • ํ•ด๋‹น ์ƒํƒœ ์ฝ”๋“œ๋Š” HTTP header์˜ Retry-After(๋‹จ์œ„ : sec)์™€ ํ•จ๊ป˜ ์ผ์ • ์‹œ๊ฐ„ ๋’ค ์š”์ฒญํ•  ๊ฒƒ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์ด๋‹ค.
     HTTP/1.1 429 Too Many Requests
     Retry-After: 3600
    

5XX Server error

ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์€ ์œ ํšจํ•˜์—ฌ ์ž‘์—…์„ ์ง„ํ–‰ํ–ˆ๊ณ , ๋„์ค‘์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ.
API ์„œ๋ฒ„์˜ ์‘๋‹ต์—์„œ 5XX ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค.
๋ณดํ†ต ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ์œ ํšจํ•˜์ง€ ์•Š์€ ์š”์ฒญ(400)์„ ์‚ฌ์ „ ์ฒ˜๋ฆฌ๋ฅผ ์•ˆ ํ•œ ๊ฒฝ์šฐ์— ๋งŽ์ด ๋ฐœ์ƒํ•œ๋‹ค.

  • 500 Internal Server Error

    • ๊ฐœ๋ฐœ์ž์˜ ์‹ค์ˆ˜๋กœ ๋ฐœ์ƒํ•  ์—ฌ์ง€๊ฐ€ ํฌ๋‹ค.
    • 4XX ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ์š”์ฒญ์— ๋Œ€ํ•ด ์‚ฌ์ „ ์ž‘์—…์„ ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ
      • ํŒŒ๋ผ๋ฏธํ„ฐ ํ•„์ˆ˜ ๊ฐ’, ์œ ํšจ์„ฑ ํ™•์ธ ์—†์ด ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ง„ํ–‰
      • ์™ธ๋ถ€ API์—์„œ ๋ฐ›์€ ๊ฐ์ฒด๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š๊ณ  ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ง„ํ–‰
  • 502 Bad Gateway

    • ๊ฒŒ์ดํŠธ์›จ์ด๊ฐ€, ์—ฐ๊ฒฐ๋œ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์ž˜๋ชป๋œ ์‘๋‹ต์„ ๋ฐ›์•˜์„ ๋•Œ ์‚ฌ์šฉ
  • 503 Service Unavailable

    • ํ˜„์žฌ ์„œ๋ฒ„๊ฐ€ ์œ ์ง€๋ณด์ˆ˜ ๋˜๋Š” ๊ณผ๋ถ€ํ•˜ ๋“ฑ์˜ ์ด์œ ๋กœ ์ผ์‹œ์ ์ธ ์‚ฌ์šฉ ๋ถˆ๊ฐ€ํ•จ์„ ์˜๋ฏธ
  • 504 Gateway Timeout

    • ๊ฒŒ์ดํŠธ์›จ์ด๊ฐ€, ์—ฐ๊ฒฐ๋œ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์‘๋‹ต์„ ๋ฐ›์„ ์ˆ˜ ์—†์—ˆ์„ ๋•Œ ์‚ฌ์šฉ
  • 505 HTTP Version Not Supported

    • HTTP ๋ฒ„์ „์„ ์„œ๋ฒ„๊ฐ€ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋‹ค.
    • ๋ธŒ๋ผ์šฐ์ €๋Š” ์„œ๋ฒ„๊ฐ€ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•œ HTTP ๋ฒ„์ „์„ ์ž๋™์œผ๋กœ ์„ ํƒํ•˜๋ฏ€๋กœ, ์™ ๋งŒํ•ด์„œ๋Š” ๋ณผ์ˆ˜ ์—†๋Š” ์˜ค๋ฅ˜์ด๋‹ค.
  • 511 Network Authentication Required

    • ์‚ฌ์šฉ์ž๊ฐ€ ๋„คํŠธ์›Œํฌ ์—‘์„ธ์Šค ๊ถŒํ•œ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์— ์‚ฌ์šฉ(๋ณดํ†ต ๋กœ๊ทธ์ธ)
  • References