어 나 갱수.

[Spring Boot] ResponseEntity를 왜 사용하나요 ? 😀 본문

Spring

[Spring Boot] ResponseEntity를 왜 사용하나요 ? 😀

김경수 2024. 3. 1. 13:16
728x90

ResponseEntity란

스프링에서 제공하는 ResponseEntity는 개발자가 직접 반환 데이터와 상태코드를 제어할 수 있는 클래스입니다.

ResponseEntity의 구조를 보면 HttpEntity의 상속을 받고 있고 Object타입의 status만 필드값으로 가지고 있습니다.

 

ResponseEntity는 사용자의 HttpRequest에 대한 응답 데이터를 포함하는 클래스이다.

따라서, HttpStatus, HttpHeader, HttpBody를 포함합니다.

이 말은 ResponseEntity의 가장 큰 특징 중 하나인 상태코드를 직접 제어할 수 있다는 의미입니다.

ResponseEntity 객체

ResponseEntity : HTTP 응답을 만들기 위한 객체

구조

  1. HTTP Body
    payload (실질적으로 반환되는 데이터)
  2. HTTP Headers
    요청 혹은 응답에 대한 요구사항
  3. HTTP Status
    반환에 대한 상태코드

이렇게 ResponseEntity를 사용하게 되면 결과값, 헤더값, 상태코드를 모두 프론트에 한 번에 보내줄 수 있습니다.

 

사용방법

그럼 Spring에서는 ResponseEntity를 어떻게 사용할까 ? 굉장히 간단합니다.

ResponseEntity를 보면 이미 생성자가 다양하게 작성되어 있어 status 값만 넣거나, body만 넣어도 ResponseEntity에서 알아서 생성자를 만들어줍니다.

 

생성자를 통한 ResponseEntity

    @GetMapping("profile")
    fun queryProfile(): ResponseEntity<ProfileHttpResponse> {
        val profileData = queryAccountProfileUseCase.execute()
        val responseData = accountDataMapper.toResponse(profileData)
        return ResponseEntity(responseData, HttpStatus.OK)
    }

 

Builder를 통한 ResponseEntity

ResponseEntity를 사용할때는 생성자보다는 Builder방식을 권장하고 있습니다.

그 이유는 상태코드를 넣을때, 잘못된 숫자를 넣는 실수를 할 수 있기 때문입니다.

    @GetMapping("profile")
    fun queryProfile(): ResponseEntity<ProfileHttpResponse> =
        queryAccountProfileUseCase.execute()
            .let { ResponseEntity.ok(accountDataMapper.toResponse(it)) }
728x90