SWM-99-degree / jariBean

SWM 14th JariBean Project
0 stars 1 forks source link

bug <κΉ€μƒν˜„ #226> modify the http status code in the response #227

Closed isayaksh closed 11 months ago

isayaksh commented 11 months ago

πŸ›  Http Status code 204에 λŒ€ν•œ κ°œλ…κ³Ό μ‚¬μš©λ°©λ²•

Http Status code 204

HTTP μƒνƒœ μ½”λ“œ 204 "No Content"λŠ” μ„œλ²„μ—μ„œ 성곡적인 μš”μ²­μ„ μ²˜λ¦¬ν–ˆμ§€λ§Œ μ‘λ‹΅μœΌλ‘œ λ³Έλ¬Έ (response body)을 λ°˜ν™˜ν•˜μ§€ μ•ŠμŒμ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
이것은 λͺ…μ‹œμ μœΌλ‘œ 응닡 본문이 λΉ„μ–΄μžˆμŒμ„ μ˜λ―Έν•˜λ©°, ν΄λΌμ΄μ–ΈνŠΈλŠ” μ‘λ‹΅μ—μ„œ μ–΄λ– ν•œ 데이터도 받지 μ•ŠλŠ”λ‹€λŠ” 것을 κΈ°λŒ€ν•©λ‹ˆλ‹€.

λ”°λΌμ„œ HTTP μƒνƒœ μ½”λ“œ 204λ₯Ό μ‚¬μš©ν•˜λŠ” 경우, μ„œλ²„λŠ” 응닡에 데이터λ₯Ό ν¬ν•¨ν•΄μ„œλŠ” μ•ˆλ©λ‹ˆλ‹€.
λ§Œμ•½ μ„œλ²„κ°€ μ–΄λ–€ 데이터λ₯Ό 전달해야 ν•œλ‹€λ©΄, λ‹€λ₯Έ μƒνƒœ μ½”λ“œ (예: 200 OK)λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

ChatGPT에 Http Status Code 204에 λŒ€ν•œ 질문의 응닡이닀. λ‚΄μš©μ„ 보면 ν΄λΌμ΄μ–ΈνŠΈλŠ” μ‘λ‹΅μ—μ„œ μ–΄λ– ν•œ 데이터도 받지 μ•ŠλŠ” 것을 κΈ°λŒ€ν•˜κ³  HTTP μƒνƒœ μ½”λ“œ 204λ₯Ό μ‚¬μš©ν•˜λŠ” 경우, μ„œλ²„λŠ” 응닡에 데이터λ₯Ό ν¬ν•¨ν•΄μ„œλŠ” μ•ˆλ©λ‹ˆλ‹€. λΌλŠ” 것을 μ•Œ 수 있고, μš°λ¦¬κ°€ 204λ₯Ό μ‚¬μš©ν•˜λŠ” κ²½μš°λŠ” λ‹€μŒκ³Ό 같은 μƒν™©μ—μ„œ μ μš©ν•΄μ•Ό μ˜¬λ°”λ₯΄κ²Œ Http Status codeλ₯Ό μ‚¬μš©ν–ˆλ‹€κ³  λ³Ό 수 μžˆλ‹€.

Http Status Code 204 μ‚¬μš© μ˜ˆμ‹œ

  1. μš”μ²­μ΄ μ„±κ³΅μ μœΌλ‘œ μ²˜λ¦¬λ˜μ—ˆμ§€λ§Œ μ‘λ‹΅μœΌλ‘œ 데이터λ₯Ό λ°˜ν™˜ν•  ν•„μš”κ°€ μ—†λŠ” 경우: 예λ₯Ό λ“€μ–΄, ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ— λ¦¬μ†ŒμŠ€μ˜ μ—…λ°μ΄νŠΈλ₯Ό μš”μ²­ν•˜κ³ , μ„œλ²„λŠ” λ¦¬μ†ŒμŠ€κ°€ μ—…λ°μ΄νŠΈλ˜μ—ˆμŒμ„ ν™•μΈν•˜κ³  μΆ”κ°€ 데이터λ₯Ό λ°˜ν™˜ν•˜μ§€ μ•ŠλŠ” κ²½μš°μ— μ‚¬μš©λœλ‹€. ν΄λΌμ΄μ–ΈνŠΈλŠ” λ‹¨μˆœνžˆ μš”μ²­μ˜ 성곡을 ν™•μΈν•˜κ³  μΆ”κ°€ 정보λ₯Ό 받을 ν•„μš”κ°€ 없을 λ•Œ μœ μš©ν•˜λ‹€.

  2. DELETE μš”μ²­μ˜ 성곡: ν΄λΌμ΄μ–ΈνŠΈκ°€ DELETE μš”μ²­μ„ 보내어 λ¦¬μ†ŒμŠ€λ₯Ό μ‚­μ œν•˜κ³ , λ¦¬μ†ŒμŠ€κ°€ μ„±κ³΅μ μœΌλ‘œ μ‚­μ œλœ κ²½μš°μ— 204 μƒνƒœ μ½”λ“œλ₯Ό μ‚¬μš©ν•œλ‹€. μ‚­μ œ 후에 μ‚­μ œλœ λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ μΆ”κ°€ 정보λ₯Ό λ°˜ν™˜ν•  ν•„μš”κ°€ μ—†λŠ” κ²½μš°μ— μ‚¬μš©ν•œλ‹€.

  3. PUT λ˜λŠ” PATCH μš”μ²­μ˜ 성곡: ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ— λ¦¬μ†ŒμŠ€λ₯Ό μ—…λ°μ΄νŠΈν•˜λŠ” PUT λ˜λŠ” PATCH μš”μ²­μ„ 보내고, μ—…λ°μ΄νŠΈκ°€ μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œλ˜μ—ˆμ„ λ•Œ 204λ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€. μ—…λ°μ΄νŠΈ μž‘μ—… μžμ²΄κ°€ 성곡이며 μΆ”κ°€ 데이터가 ν•„μš”ν•˜μ§€ μ•Šμ„ λ•Œ μœ μš©ν•˜λ‹€.

  4. HEAD μš”μ²­: HEAD μš”μ²­μ€ GET μš”μ²­κ³Ό μœ μ‚¬ν•˜μ§€λ§Œ 응닡에 본문이 μ—†λŠ” κ²½μš°μ— μ‚¬μš©λœλ‹€. λ”°λΌμ„œ 204 No Content μƒνƒœ μ½”λ“œκ°€ μ‚¬μš©λ  수 μžˆλ‹€.

HTTP μƒνƒœ μ½”λ“œ 204λŠ” μš”μ²­μ˜ 성곡을 λ‚˜νƒ€λ‚΄κ³ , μΆ”κ°€ μ •λ³΄λ‚˜ 데이터가 ν•„μš”ν•˜μ§€ μ•Šμ„ λ•Œ μ‚¬μš©λœλ‹€. ν΄λΌμ΄μ–ΈνŠΈκ°€ μš”μ²­μ„ μ΄ν•΄ν•˜κ³  μ²˜λ¦¬ν–ˆμ§€λ§Œ 응닡 본문을 κΈ°λŒ€ν•˜μ§€ μ•Šμ„ λ•Œ μ‚¬μš©ν•˜λŠ” 것이 μ’‹λ‹€.

πŸ”₯ ν”„λ‘œμ νŠΈμ— 적용

ν˜„μž¬ μ‚¬μš©μžμ˜ 카페 맀μž₯ μ˜ˆμ•½ 내역을 μ‘°νšŒν•  λ•Œ μ˜ˆμ•½ 내역이 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ Http Status Code에 204λ₯Ό λ‹΄μ•„ μ „μ†‘ν•˜κ³  μžˆλ‹€.

getNearestReserved method

// 정보가 μ—†λ‹€λ©΄ null κ°’μœΌλ‘œ λ°˜ν™˜ν•˜λ©°, μ˜ˆμ™Έμ²˜λ¦¬λ‘œ 204λ₯Ό 보냄
if (reserved == null) {
    throw new CustomNoContentException("μ˜ˆμ•½μ΄ μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.");
}

CustomNoContentExceptionHandler

@ExceptionHandler(CustomNoContentException.class)
public ResponseEntity<?> apiException(CustomNoContentException e) {
    log.error(e.getMessage());
    return new ResponseEntity<>(new ResponseDto<>(-1, e.getMessage(), null), HttpStatus.NO_CONTENT);
}

CustomNoContentExceptionHandlerμ—μ„œλŠ” λΆ„λͺ… ResponseBodyλ₯Ό λ‹΄μ•„μ„œ μ „μ†‘ν•˜λ„λ‘ μ„€μ •λ˜μ–΄ μžˆμ§€λ§Œ, 응닡 κ²°κ³ΌλŠ” λ‹€μŒκ³Ό κ°™λ‹€.

{{server}}/api/home/reserve μš”μ²­μ— λŒ€ν•œ 응닡

image

Response Body의 λͺ¨λ“  λ‚΄μš©μ΄ μ‚­μ œλ˜μ–΄ μžˆλ‹€. λ§Œμ•½ ν˜„μž¬ Response의 Http Status Codeκ°€ 204(NO_CONTENT)일 경우 SpringMVCμ—μ„œ μžλ™μœΌλ‘œ Body의 λ‚΄μš©μ„ μ‚­μ œν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

λ”°λΌμ„œ μ˜ˆμ•½ 내역이 μ‘΄μž¬ν•˜μ§€ μ•Šμ•„λ„ Response Bodyκ°€ λˆ„λ½λ˜μ§€ μ•Šλ„λ‘ ν•˜κΈ° μœ„ν•΄μ„œλŠ” Http Status Codeλ₯Ό 200(OK)으둜 μˆ˜μ •ν•˜λŠ” 것이 μ˜¬λ°”λ₯Έ μ‚¬μš©λ²•μ΄μ§€ μ•Šμ„κΉŒ μƒκ°ν•œλ‹€.