1 ) 응답 데이터
- Server에서 Client로 Data를 전달하는 방법은 정적리소스, View Template, HTTP Message Body 세가지 방법이 존재
- 정적리소스
- 정적인 HTML, CSS, JS, Image 등을 변경 없이 그대로 반환한다.
- View Template
- SSR(Server Side Rendering)을 사용할 때 View가 반환된다.
- HTTP Message Body
- 응답 데이터를 직접 Message Body에 담아 반환한다.
- 정적 리소스 - 웹 애플리케이션에서 변하지 않는 파일들을 의미한다. 예를 들어 HTML, CSS, JavaScript, 이미지 파일들 등이 정적 리소스에 해당된다.
- Spring boot의 정적 리소스 경로 ( 아래 경로들에 정적 리소스가 존재하면 서버에서 별도의 처리없이 파일 그대로 반환)
- /static
- /public
- /META-INF/resources
- src/main/resources
- /static
- /static 대신에 /public 혹은 /META-INF/resources도 사용 가능하다.
- Spring boot의 정적 리소스 경로 ( 아래 경로들에 정적 리소스가 존재하면 서버에서 별도의 처리없이 파일 그대로 반환)
- View Template
- View Template은 Model을 참고하여 HTML 등이 동적으로 만들어지고 Client에 응답된다.
- Spring Boot는 기본적으로 View Template 경로를 설정한다.
- build.gradle에 Thymeleaf 의존성을 추가하면 ThymeleafViewResolver와 필요한 Spring Bean들이 자동으로 등록된다.
- HTTP Message Body
- HttpServletResponse 사용
- Response Body에 data 라는 문자열이 입력되어 응답된다.
- 기존 Servlet을 다룰 때 코드와 형태가 같다.
- HttpServletResponse 사용
@Controller
public class ResponseBodyController {
@GetMapping("/v1/response-body")
public void responseBodyV1(
HttpServletResponse response
) throws IOException {
response.getWriter().write("data");
}
}
2. ResponseEntity<> 사용
@GetMapping("/v2/response-body")
public ResponseEntity<String> responseBodyV2() {
return new ResponseEntity<>("data", HttpStatus.OK);
}
- Response Body에 Data라는 문자열과 HttpStatus.OK에 해당하는 상태 코드를 반환한다.
- ResponseEntity는 HttpEntity를 상속받았다.
- HttpEntity는 HTTP Message의 Header, Body 모두 가지고 있다
3. @ResponseBody(TEXT, JSON) 사용
@Data
@NoArgsConstructor // 기본 생성자
@AllArgsConstructor // 전체 필드를 인자로 가진 생성자
public class Tutor {
private String name;
private int age;
}
// TEXT 데이터 통신
@ResponseBody
@GetMapping("/v3/response-body-text")
public String responseBodyText() {
return "data"; // HTTP Message Body에 "data"
}
- View를 사용하는 것이 아닌 HTTP Message Converter를 통해 HTTP Message Body를 직접 입력할 수 있다. -> ResponseEntity와 같음.
- @ResponseStatus를 사용하여 상태 코드를 지정할 수 있다.
4. ResponseEntity<Object>(JSON)
@ResponseBody
@GetMapping("/v5/response-body")
public ResponseEntity<Tutor> responseBody() {
Tutor tutor = new Tutor("wonuk", 100);
return new ResponseEntity<>(tutor, HttpStatus.OK);
}
- ResponseEntity<> 두번째 파라미터에 Enum을 사용하여 상태 코드를 바꿀 수 있다.
- HTTP Message Converter를 통해서 JSON 형태로 변환되어 반환된다.
- 동적으로 응답 코드를 변경할 수 있다.
@ResponseBody
@GetMapping("/v5/response-body")
public ResponseEntity<Tutor> responseBody() {
Tutor tutor = new Tutor("wonuk", 100);
if (조건) {
return new ResponseEntity<>(tutor, HttpStatus.OK);
} else {
return new ResponseEntity<>(tutor, HttpStatus.BAD_REQUEST);
}
}
- HttpEntity를 상속받았다.
'TIL > Spring' 카테고리의 다른 글
TIL 2024-11-13 (Spring 숙련 - 2주차) (1) | 2024.11.13 |
---|---|
TIL 2024-11-12 (Spring 숙련 - 1주차) (0) | 2024.11.12 |
TIL 2024-11-06 (Spring 입문 - 요청 데이터) (0) | 2024.11.06 |
TIL 2024-11-05 (Spring 입문 - Spring Annotation, Mapping) (0) | 2024.11.05 |
TIL 2024-11-04 (Spring 입문 - MVC) (1) | 2024.11.04 |