ResponseEntity? + Http Status

초코파이·2021년 4월 5일
0

ResponseEntity는 왜 쓰는지, 어떻게 쓰는지 궁금해서 찾아봤다.

ResponseEntity

그러니까 반환값에 상태코드와 응답 메세지를 주고 싶을 때 사용되는 게 ResponseEntity Class이다. HttpEntity를 상속받고 HttpHeader와 body를 가질 수 있고, void 대신 반환할 수 있다.

왜 상태 코드를?

  • 클라이언트는 HTTP 상태 코드를 확인하여 요청의 성공과 실패를 확인할 수 있다.
  • 우리가 상태 코드를 적절하게 반환해주지 않으면 클라이언트는 혼란스러울 것이다.
  • 실제 서비스에서는 200뿐만 아니라 다른 상태 코드도 반환할 수 있어야 한다. 클라이언트에게 어떤 상태인지 알려주기 위해서라고 생각하자.
  • 이런 이유때문에 상태 코드는 필수적으로 리턴해 주는 게 좋다.

사용 방법

return new ResponseEntity<>("success", HttpStatus.OK);
// 단순한 메세지와 상태코드 리턴
HttpHeaders headers = new HttpHeaders();
headers.add("TOKEN","XXXXXX");
return new ResponseEntity<>("Custom header set", headers, HttpStatus.OK);
// header와 상태코드 리턴
Message message = Messgae.builder() // Messgae 객체는 직접 만든 거.
    .message1("첫번째 메세지")
    .message2("두번째 메세지")
    .build();  
return new ResponseEntity<>(message, HttpStatus.INTERNAL_SERVER_ERROR);
// 메세지와 상태코드 리턴

ResponseEntity 정적 메소드를 통해 간단히 응답할 수도 있다.

return ResponseEntity.ok();
return ResponseEntity.status(HttpStatus.OK).header("Custom-Header","foo").body("Custom header set");

참고: https://www.baeldung.com/spring-response-entity

Http Status Code

HTTP 요청이 성공했는지 실패했는지를 서버에서 알려주는 코드이다.

2XX Success

2XX 번대의 상태 코드는 서버가 클라이언트의 요청을 성공적으로 처리했다는 뜻이다.

200 OK

클라이언트의 요청을 서버가 정상적으로 처리했다.

201 Created

클라이언트의 요청을 서버가 정상적으로 처리했고 새로운 리소스가 생겼다. (post, put ect)

202 Accepted

클라이언트의 요청은 정상적이나, 서버가 아직 요청을 완료하지 못했다.

4XX Clinet errors

4XX의 상태 코드들을 클라이언트의 요청이 유효하지 않아 서버가 해당 요청을 수행하지 않았다는 의미이다. 유효성 검증을 통해 유효하지 않다고 응답하는데 유효성 검증 없이 진행하면 5XX 서버 오류가 발생할 수 있기 때문에 사전에 막는 게 좋다.

400 Bad Request

클라이언트의 요청이 유효하지 않아 더 이상 작업을 진행하지 않는 경우이다. 400 오류 발생시 에러 이유를 명시해주는 게 좋다.

401 Unatuthorized
authorized: 인정받은, 권한을 부여받은

401은 비인증이다. 클라이언트가 권한이 없기 때문에 작업을 진행할 수 없는 경우이다.

로그인이 필요합니다: 인증이 안된 상황. 서버 입장에서 현재 사용자가 누군지 모르기때문에 접근을 차단한 것이다.

403 Forbidden
forbidden: 금지된

클라이언트가 권한이 없기 때문에 작업을 진행할 수 없는 경우이다.

level 10부터 다운받을 수 있습니다. : 권한이 없는 경우. 서버 입장에서 현재 요청자가 누군지 알지만, 해당 사용자는 요청한 자원에 접근할 권한이 없다고 판단하여 접근을 차단한 것이다.

404 Not Found

클라이언트가 요청한 자원이 존재하지 않는다.

경로가 존재하지 않거나 자원이 존재하지 않을때 응답한다. 특히 자원이 존재하지 않을 경우 5xx 오류로 이어질 수 있기 때문에 404 상태코드로 응답해야 한다.

5XX Server errors

서버오류로 인해 요청을 수행할 수 없다는 의미다. 보통 유효하지 않은 요청을 사전에 처리하지 않은 경우(4XX)에 많이 발생한다.

profile
열심히 흡수하기

0개의 댓글