본문 바로가기
Spring/10. rest-api

ResponseEntity 작성 규칙 + build()가 붙는 경우

by 989898 2025. 3. 17.

📌 ResponseEntity란?

ResponseEntity는 Spring에서 HTTP 응답을 구성할 때 매우 유연하게 사용할 수 있는 클래스입니다. 빌더 패턴 메서드 체이닝을 활용하여 상태 코드, 헤더, 본문 등을 설정할 수 있으며, 다양한 상황에 맞게 응답을 구성할 수 있습니다. 🌟

📌 ResponseEntity 작성 규칙

1️⃣ 기본 구조

ResponseEntity는 다음 세 가지 요소를 설정할 수 있습니다:

  • 🛑 HTTP 상태 코드: 요청 처리 결과를 나타냅니다 (예: 200 OK, 404 Not Found).
  • 📦 응답 본문(body): 클라이언트에게 반환할 데이터입니다.
  • 📜 헤더(headers): 추가적인 메타데이터를 포함합니다.

2️⃣ 주요 작성 방식

(1) 상태 코드와 본문 설정

가장 간단한 형태로 상태 코드와 본문을 설정합니다:

  • ✅ 성공 응답 (200 OK)
return ResponseEntity.ok(user); // 상태 코드 200 + 응답 본문
 
 
  • 🎉 리소스 생성 (201 Created)
return ResponseEntity.status(HttpStatus.CREATED).body(user); // 상태 코드 201 + 응답 본문

 

 
 

(2) 상태 코드만 설정

본문이 필요 없는 경우 .build()를 사용하여 상태 코드만 반환합니다:

  • 🔍 리소스 없음 (404 Not Found)
return ResponseEntity.notFound().build(); // 상태 코드 404 + 본문 없음
 
  • 🧹 리소스 삭제 완료 (204 No Content)
return ResponseEntity.noContent().build(); // 상태 코드 204 + 본문 없음
 
 

(3) 헤더 추가

응답에 헤더를 추가하려면 .headers() 또는 .header() 메서드를 사용합니다:

  • 📜 HttpHeaders 객체 사용
HttpHeaders headers = new HttpHeaders();
headers.add("Custom-Header", "value");
return ResponseEntity.ok()
        .headers(headers)
        .body(user); // 상태 코드 200 + 헤더 + 본문
 
 
  • 🚀 간단한 헤더 추가
return ResponseEntity.ok()
        .header("Custom-Header", "value")
        .body(user); // 상태 코드 200 + 헤더 + 본문
 
 

(4) 빌더 패턴 활용

빌더 패턴을 사용하여 상태 코드, 헤더, 본문을 체이닝 방식으로 조합할 수 있습니다:

  • ✅ 요청 수락 (202 Accepted)
return ResponseEntity.status(HttpStatus.ACCEPTED)
        .header("Custom-Header", "value")
        .body("Request accepted and processing"); // 상태 코드 202 + 헤더 + 본문
 
 

3️⃣ 상황별 작성 규칙

상황메서드 사용 예시
✅ 요청 성공 ResponseEntity.ok(user)
🎉 리소스 생성 ResponseEntity.created(location).body(user)
🧹 리소스 삭제 ResponseEntity.noContent().build()
❌ 잘못된 요청 ResponseEntity.badRequest().body("Invalid request parameter")
🔍 리소스 없음 ResponseEntity.notFound().build()
🛑 서버 오류 ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Server error")
📜 헤더 포함 .header("Custom-Header", "value").body(user)
🚀 비동기 처리 ResponseEntity.accepted().body("Request accepted")
 

4️⃣ 다양한 형태가 존재하는 이유

다양한 작성 방식은 다음과 같은 이유로 존재합니다:

  1. 🌟 유연성: 응답의 구성 요소(상태 코드, 본문, 헤더)를 상황에 맞게 조합할 수 있도록 설계되었습니다.
  2. ⚙️ 빌더 패턴: 메서드 체이닝을 통해 직관적이고 간결한 코드를 작성할 수 있습니다.
  3. ✅ 편의 메서드 제공: ok(), created(), notFound() 등은 자주 사용하는 HTTP 상태 코드를 쉽게 반환하도록 도와줍니다.

📌 결론

ResponseEntity 작성 방식은 크게 두 가지로 나뉩니다:

  1. 단순한 상황에서는 편의 메서드 (ok(), created(), noContent())를 사용하세요. ✅
  2. 복잡한 응답이 필요한 경우 빌더 패턴 (status(), .header(), .body())을 활용하세요. ⚙️

형태가 다양해 보이는 이유는 설계의 유연성을 극대화하기 위함이며, 필요한 요소만 선택적으로 사용하면 됩니다! 🚀


📌 .build()가 붙는 경우란?

.build()는 ResponseEntity를 구성할 때 **응답 본문(body)**이 필요하지 않은 경우에 사용됩니다.

 

즉, HTTP 상태 코드와 헤더만 설정하고 본문은 비우고 싶을 때 주로 활용됩니다. 🚀

📌 .build()가 사용되는 주요 상황

1️⃣ 응답 본문이 필요 없는 경우

  • HTTP 상태 코드만 반환하거나, 추가적인 데이터 없이 요청이 성공했음을 알릴 때 사용합니다.

🧹 예: 204 No Content

리소스를 삭제하거나 요청 처리 후 반환할 데이터가 없을 때 사용합니다.

return ResponseEntity.noContent().build();
 
 
  • 상태 코드: 204 No Content
  • 본문: 없음

2️⃣ 리소스를 찾지 못한 경우

  • 리소스가 존재하지 않을 때 404 Not Found를 반환하며, 추가적인 메시지 없이 상태 코드만 반환할 수 있습니다.

🔍 예: 404 Not Found

return ResponseEntity.notFound().build();
 
 
  • 상태 코드: 404 Not Found
  • 본문: 없음

3️⃣ 헤더만 반환하고 본문이 없는 경우

  • HTTP 응답 헤더를 설정하고, 응답 본문은 비워두고 싶을 때 사용합니다.

📜 예: 특정 헤더와 함께 200 OK 반환

HttpHeaders headers = new HttpHeaders();
headers.add("Custom-Header", "value");

return ResponseEntity.ok()
        .headers(headers)
        .build();
 
 
  • 상태 코드: 200 OK
  • 본문: 없음
  • 헤더: Custom-Header: value

4️⃣ 커스텀 상태 코드만 반환하는 경우

  • 특정 상태 코드를 직접 설정하고, 본문 없이 반환할 때 .status()와 .build()를 조합합니다.

✅ 예: 202 Accepted (본문 없음)

return ResponseEntity.status(HttpStatus.ACCEPTED).build();
 
 
  • 상태 코드: 202 Accepted
  • 본문: 없음

📌 왜 .build()를 사용하는가?

1. 🌟 응답 본문이 필요 없는 경우 명확하게 의도를 표현하기 위해

  • 본문이 없다는 것을 명시적으로 나타내며, 불필요한 데이터 전송을 방지합니다.

2. ⚙️ 빌더 패턴의 마지막 단계로 호출

  • .build()는 빌더 패턴의 마지막 단계로, 응답 객체를 완성하기 위해 호출됩니다.

3. 🚫 불필요한 null 반환 방지

  • 명시적으로 "본문 없음"을 나타내기 위해 .build()를 사용하여 빈 응답을 생성합니다.

📌 결론

.build()는 다음과 같은 상황에서 활용됩니다:

  1. 🧹 상태 코드만 반환 (예: 204 No Content, 404 Not Found).
  2. 📜 헤더만 포함된 응답 (본문 없음).
  3. ✅ 커스텀 상태 코드와 함께 빈 응답 생성.

.body()와 .build()의 차이는 단순히 "본문의 유무"에 있습니다:

  • .body(): 데이터를 포함한 응답 생성.
  • .build(): 데이터를 포함하지 않는 빈 응답 생성.

.build()는 응답 본문이 필요하지 않은 상황에서 최종적으로 ResponseEntity 객체를 생성하기 위한 필수적인 메서드입니다! 🚀

'Spring > 10. rest-api' 카테고리의 다른 글

FeignClient  (0) 2025.03.17
RestControllerAdvice란?  (0) 2025.03.17
ResponseEntity의 메서드들  (0) 2025.03.16
@PathVariable / @RequesteBody / @RequestParam  (0) 2025.03.16
REST API 예제  (0) 2025.03.14