πŸ“Œ κΉ€μ˜ν•œ λ‹˜μ˜ "λͺ¨λ“  개발자λ₯Ό μœ„ν•œ HTTP μ›Ή κΈ°λ³Έ 지식" κ°•μ˜ λ“£κ³  정리

 

πŸ“μƒνƒœμ½”λ“œ λž€?

ν΄λΌμ΄μ–ΈνŠΈκ°€ 보낸 μš”μ²­μ˜ 처리 μƒνƒœλ₯Ό μ‘λ‹΅μ—μ„œ μ•Œλ €μ£ΌλŠ” κΈ°λŠ₯

 

HTTP/1.1 200 OK
Content-Type: application/json
Content-length: 34

{
   "username" : "young",
   "age" : 20
}

 

  • 1xx (Informational) : μš”μ²­μ΄ μˆ˜μ‹ λ˜μ–΄ μ²˜λ¦¬μ€‘
  • 2xx (Successful) : μš”μ²­ 정상 처리
  • 3xx (Redirection) : μš”μ²­μ„ μ™„λ£Œν•˜λ €λ©΄ μΆ”κ°€ 행동이 ν•„μš”
  • 4xx (Client Error) : ν΄λΌμ΄μ–ΈνŠΈ 였λ₯˜, 잘λͺ»λœ 문법 λ“±μœΌλ‘œ μ„œλ²„κ°€ μš”μ²­μ„ μˆ˜ν–‰ν•  수 μ—†μŒ
  • 5xx (Server Error) : μ„œλ²„ 였λ₯˜, μ„œλ²„κ°€ 정상 μš”μ²­μ„ μ²˜λ¦¬ν•˜μ§€ λͺ»ν•¨

처음 λ³΄λŠ” μƒνƒœ μ½”λ“œκ°€ μžˆλ‹€?

ν΄λΌμ΄μ–ΈνŠΈκ°€ 인식할 수 μ—†λŠ” μƒνƒœμ½”λ“œλ₯Ό μ„œλ²„κ°€ λ°˜ν™˜ν•˜κ²Œ 되면 ν΄λΌμ΄μ–ΈνŠΈλŠ” μƒμœ„ μƒνƒœμ½”λ“œλ‘œ 해석해 μ²˜λ¦¬ν•˜κ²Œ λœλ‹€. κ·Έλž˜μ„œ μƒˆλ‘œμš΄ μƒνƒœ μ½”λ“œκ°€ μΆ”κ°€ λ˜λ”λΌλ„ ν΄λΌμ΄μ–ΈνŠΈλ₯Ό λ³€κ²½ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€. (ex. 299 ??? > 2xx (Successful))

 

 

πŸ“1xx (Informational)

거의 μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ μƒλž΅

 

πŸ“2xx - 성곡

ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ„ μ„±κ³΅μ μœΌλ‘œ 처리

  • 200 OK : μš”μ²­ 성곡
  • 201 Created : μš”μ²­ 성곡해 μƒˆλ‘œμš΄ λ¦¬μ†ŒμŠ€κ°€ 생성됨, μƒμ„±λœ λ¦¬μ†ŒμŠ€λŠ” Location 헀더 ν•„λ“œλ‘œ 식별
  • 202 Accepted : μš”μ²­ μ ‘μˆ˜λ˜μ—ˆμœΌλ‚˜ μ²˜λ¦¬λŠ” λ―Έμ™„λ£Œ. 배치 처리 등에 μ‚¬μš©. ex) μ ‘μˆ˜ λ’€ 1μ‹œκ°„ λ’€ 배치 ν”„λ‘œμ„ΈμŠ€κ°€ 처리
  • 204 No Content : μš”μ²­μ„ μ„±κ³΅μ μœΌλ‘œ μˆ˜ν–‰ν–ˆμœΌλ‚˜ 응닡 νŽ˜μ΄λ‘œλ“œ 본문에 보낼 데이터 μ—†μŒ
    • κ²°κ³Ό λ‚΄μš©μ΄ 없어도 204 λ©”μ‹œμ§€(2xx)만으둜 성곡을 인식
    • ex) μ›Ή λ¬Έμ„œ νŽΈμ§‘κΈ°μ˜ save λ²„νŠΌ : λ²„νŠΌ 결과둜 아무 λ‚΄μš© 없어도 λœλ‹€. λ²„νŠΌμ„ λˆŒλŸ¬λ„ 같은 화면을 μœ μ§€ν•΄μ•Ό ν•œλ‹€. λ“œμ˜ 경우

πŸ“3xx - λ¦¬λ‹€μ΄λ ‰μ…˜

μš”μ²­μ„ μ™„λ£Œν•˜κΈ° μœ„ν•΄ μœ μ € μ—μ΄μ „νŠΈμ˜ μΆ”κ°€ 쑰치 ν•„μš”

μ›ΉλΈŒλΌμš°μ €λŠ” 3xx 응닡 결과에 Location 헀더가 있으면 ν•΄λ‹Ή μœ„μΉ˜λ‘œ μžλ™ 이동(λ¦¬λ‹€μ΄λ ‰νŠΈ)ν•œλ‹€. 

  • 300 Multiple Choices : μ‚¬μš©μ•ˆν•¨
  • 301 Moved Permanently
  • 302 Found
  • 303 See Other
  • 304 Not Modified
  • 307 Temporary Redirect
  • 308 Permanent Redirect

 

  • λ¦¬λ‹€μ΄λ ‰μ…˜ 흐름

 

  • λ¦¬λ‹€μ΄λ ‰μ…˜μ˜ μ’…λ₯˜
    • 영ꡬ λ¦¬λ‹€μ΄λ ‰μ…˜ - νŠΉμ • λ¦¬μ†ŒμŠ€μ˜ URIκ°€ 영ꡬ적으둜 이동 (ex. /members > /users)
      • μ›λž˜ URL μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©° 검색 μ—”μ§„ λ“±μ—μ„œλ„ 변경을 μΈμ§€ν•œλ‹€.
      • 301 Moved Permanently : λ¦¬λ‹€μ΄λ ‰νŠΈμ‹œ μš”μ²­ λ©”μ„œλ“œκ°€ GET이 될 μˆ˜λ„ 있고, 본문이 제거될 μˆ˜λ„ μžˆλ‹€ (λͺ¨ν˜Έν•¨)
      • 308 Permanent Redirect : 301κ³Ό κΈ°λŠ₯이 κ°™μœΌλ‚˜ 처음의 μš”μ²­ λ©”μ„œλ“œμ™€ 본문이 μœ μ§€ λœλ‹€
    • μΌμ‹œ λ¦¬λ‹€μ΄λ ‰μ…˜ - μΌμ‹œμ μΈ 잠깐 이동 (ex. μ£Όλ¬Έ μ™„λ£Œ ν›„ μ£Όλ¬Έ λ‚΄μ—­ν™”λ©΄μœΌλ‘œ 이동. PRGνŒ¨ν„΄)
      • μ‹€λ¬΄μ—μ„œ 많이 μ‚¬μš©ν•˜λŠ” 방식
      • λ¦¬μ†ŒμŠ€ URIκ°€ μΌμ‹œμ μœΌλ‘œ λ³€κ²½ν•˜κΈ° λ•Œλ¬Έμ— 검색 μ—”μ§„ λ“±μ—μ„œ URL을 λ³€κ²½ν•˜λ©΄ μ•ˆλœλ‹€. 
      • 302 Found : λ¦¬λ‹€μ΄λ ‰νŠΈμ‹œ μš”μ²­ λ©”μ„œλ“œκ°€ GET으둜 λ³€ν•  수 있고, 본문이 제거될 μˆ˜λ„ μžˆλ‹€. λͺ¨ν˜Έν•˜λ‹€.
      • 303 See Other : 302와 κΈ°λŠ₯은 κ°™κ³  λ¦¬λ‹€μ΄λ ‰νŠΈ μš”μ²­ λ©”μ„œλ“œκ°€ GET으둜 λ³€κ²½ (302κ°€ κΈ°λŠ₯ μŠ€νŽ™μ— λŒ€ν•΄ λͺ¨ν˜Έν•œ 뢀뢄이 μžˆλ‹€λ©΄ 303은 ν™•μ‹€ν•˜κ²Œ GET λ©”μ„œλ“œλ‘œ μ‚¬μš©ν•œλ‹€)
      • 307 Temporary Redirect : 302와 κΈ°λŠ₯은 κ°™μœΌλ‚˜ μ²˜μŒμ˜ μš”μ²­ λ©”μ„œλ“œμ™€ 본문이 μœ μ§€ λœλ‹€ (μš”μ²­ λ©”μ„œλ“œ λ³€κ²½ν•˜λ©΄ μ•ˆλ¨) 
      • μΌμ‹œμ  λ¦¬λ‹€μ΄λ ‰μ…˜μ„ μ–Έμ œ μ“ΈκΉŒ?
        PRGνŒ¨ν„΄ (Post Redirect Get) : Post둜 μ£Όλ¬Έ ν›„ μƒˆλ‘œκ³ μΉ¨ν•  경우 주문을 μž¬μš”μ²­ν•˜κ²Œ λ˜μ—¬ 쀑볡 주문이 생길 수 κ°€ μžˆλ‹€. μ΄λ•Œ post둜 μ£Όλ¬Έν•˜κ³  μ£Όλ¬Έ κ²°κ³Ό 화면을 get으둜 λ¦¬λ‹€μ΄λ ‰νŠΈ ν•˜κ²Œλ˜λ©΄ μƒˆλ‘œκ³ μΉ¨ν•΄λ„ κ²°κ³Ό 화면을 getμš”μ²­ν•˜κ²Œ λ˜λ‹ˆ 쀑볡을 ν”Όν•  μˆ˜κ°€ μžˆλ‹€. 
        PRG μ‚¬μš©μ „ μƒˆλ‘œκ³ μΉ¨ν•˜λ©΄ orderκ°€ μž¬μš”μ²­λ˜μ–΄ 5번 λ°œμƒ
         
        PRG μ‚¬μš©ν›„ μƒˆλ‘œκ³ μΉ¨ν•˜λ©΄ ν–ˆμ„ λ•ŒλŠ” μ£Όλ¬Έ κ²°κ³Ό 화면을 GETμš”μ²­ν•˜κ²Œ λ˜μ–΄ 쀑볡 μ£Όλ¬Έ λ°©μ§€
    • 특수 λ¦¬λ‹€μ΄λ ‰μ…˜ - κ²°κ³Ό λŒ€μ‹  μΊμ‹œ  
      • 304 Not Modified
        • ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ λ¦¬μ†ŒμŠ€κ°€ μˆ˜μ •λ˜μ§€ μ•Šμ•˜μœΌλ‹ˆ 둜컬PC μΊμ‹œλ₯Ό μž¬μ‚¬μš©ν•˜λΌλ©° μΊμ‹œλ‘œ λ¦¬λ‹€μ΄λ ‰νŠΈ μ‹œν‚΄.
        • 304 응닡은 응닡에 λ©”μ‹œμ§€ λ°”λ””λ₯Ό ν¬ν•¨ν•˜λ©΄ μ•ˆλœλ‹€(둜컬 μΊμ‹œλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•˜λ―€λ‘œ).  
        • 쑰건뢀 GET, HEAD μš”μ²­μ‹œ μ‚¬μš©

 

πŸ“4xx (Client Error)

ν΄λΌμ΄μ–ΈνŠΈ 였λ₯˜

  • ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ— 잘λͺ»λœ λ¬Έλ²•λ“±μœΌλ‘œ μ„œλ²„κ°€ μš”μ²­μ„ μˆ˜ν–‰ν•  수 없을 λ•Œ
  • 였λ₯˜μ˜ 원인이 ν΄λΌμ΄μ–ΈνŠΈμ— 있음
  • β—ν΄λΌμ΄μ–ΈνŠΈκ°€ 이미 잘λͺ»λœ μš”μ²­μ΄λ‚˜ 데이터λ₯Ό 보내고 μžˆμ–΄ λ˜‘κ°™μ€ μž¬μ‹œλ„λŠ” λͺ‡λ²ˆμ„ 해도 μ‹€νŒ¨ν•  수 밖에 μ—†λ‹€. (볡ꡬ λΆˆκ°€λŠ₯)

 

  • 400 Bad Request : ν΄λΌμ΄μ–ΈνŠΈκ°€ 잘λͺ»λœ μš”μ²­μ„ ν•΄μ„œ μ„œλ²„κ°€ μš”μ²­μ„ μ²˜λ¦¬ν•  수 μ—†μŒ. μš”μ²­ κ²€ν† ν•˜μ—¬ λ‹€μ‹œ 보내야 함
  • 401 Unauthorized : ν΄λΌμ΄μ–ΈνŠΈκ°€ ν•΄λ‹Ή λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ 인증이 ν•„μš”.
    • 인증(Authentication) λ˜μ§€ μ•ŠμŒ
    • 401 였λ₯˜ λ°œμƒμ‹œ 응닡에 WWW-Authenticate 헀더와 ν•¨κ»˜ 인증 방법 μ„€λͺ…을 보낸닀. 
    • μ°Έκ³ 
      • 인증 (Authentication): 본인이 λˆ„κ΅¬μΈμ§€ 확인
      • 인가 (Authorization): κΆŒν•œλΆ€μ—¬ (인증이 μžˆμ–΄μ•Ό 인가가 μžˆλ‹€)
  • 403 Forbidden : μ„œλ²„ μš”μ²­ μ΄ν•΄ν–ˆμ§€λ§Œ 승인 κ±°λΆ€, 주둜 인증 자격 증λͺ…은 μžˆμœΌλ‚˜ μ ‘κ·Ό κΆŒν•œμ΄ μ—†λŠ” 경우
  • 404 Not Found : μš”μ²­ λ¦¬μ†ŒμŠ€κ°€ μ„œλ²„μ— μ—†μ–΄ λ¦¬μ†ŒμŠ€ 찾을 수 μ—†μŒ λ˜λŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ κΆŒν•œμ΄ λΆ€μ‘±ν•œ λ¦¬μ†ŒμŠ€μ— μ ‘κ·Ό μ‹œλ„ ν–ˆμ„ λ•Œ λ¦¬μ†ŒμŠ€λ₯Ό 숨기고자 ν•˜λ©΄ μ‚¬μš©

 

πŸ“5xx (Server Error)

μ„œλ²„ 였λ₯˜

  • 였λ₯˜μ˜ 원인이 μ„œλ²„μ— 있음
  • μ„œλ²„μ— λ¬Έμ œκ°€ μžˆμ–΄ μž¬μ‹œλ„ν•˜λ©΄ 성곡 ν•  μˆ˜λ„ μžˆλ‹€. (볡ꡬ λ“±μœΌλ‘œ μƒνƒœκ°€ λ³€ν•˜μ—¬)

 

  • 500 Internal Server Error : μ„œλ²„ λ‚΄λΆ€ 문제둜 였λ₯˜ λ°œμƒ, μ„œλ²„μ—μ„œ λ°œμƒν•œ μ—λŸ¬κ°€ μ• λ§€ν•œ 경우 500으둜
  • 503 Service Unavailavle : μ„œλΉ„μŠ€ 이용 λΆˆκ°€. μΌμ‹œμ  κ³ΌλΆ€ν™”λ‚˜ μ˜ˆμ •λœ μž‘μ—…μœΌλ‘œ μš”μ²­μ„ μ²˜λ¦¬ν•  수 없을 경우λ₯Ό λ§ν•œλ‹€. Retry-After 헀더 ν•„λ“œλ‘œ 볡ꡬ μ‹œκΈ°λ₯Ό μ•Œ 수 μžˆλ‹€.

 

λ“€μ–΄μ˜¨ 데이터 값에 λŒ€ν•œ μ˜ˆμ™Έλ₯Ό 500μ²˜λ¦¬ν•˜λ©΄ μ•ˆλœλ‹€. λ“€μ–΄μ˜¨ λ°μ΄ν„°μ˜ 문제고 λ‘œμ§μƒμœΌλ‘œλŠ” 정상 μž‘μ—…λœ 것이기 λ•Œλ¬Έ. λ”°λΌμ„œ ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„μ—μ„œ λ°œμƒν•œ 였λ₯˜λ₯Ό λͺ…ν™•ν•˜κ²Œ ꡬ뢄할 쀄 μ•Œμ•„μ•Όν•œλ‹€.

+ Recent posts