[Spring] HTTP 응답 방법과 관련 어노테이션(Annotation)

HTTP 응답 방법 3가지

스프링에서 응답 데이터를 만드는 방법은 크게 3가지가 있습니다.

 

정적 리소스

스프링 부트는 클래스 패스의 아래 디렉토리에 있는 정적 리소스를 제공합니다.

/static , /public , /resources , /META-INF/resources

src/main/resources 리소스를 보관하는 곳이고, 또는 클래스패스의 시작 경로입니다.

 

스프링은 정적 리소스를 담을 다음과 같은 경로를 제공하고, 이 디렉토리에 리소스를 넣어두면 스프링 부트가 정적 리소스로 서비스를 제공합니다.

src/main/resources/static 

 

만약 src/main/resources/static/test/index.html 경로에 파일이 들어있으면 웹 브라우저에서 다음과 같이 실행하면 정정 파일을 볼 수 있습니다. => http://localhost:8080/test/index.html 

 

정적 리소스는 해당 파일을 변경 없이 그대로 서비스하는 것으로 웹 브라우저에 정적인 HTML, CSS, JS를 제공할 때는, 정적 리소스를 사용합니다.

 

뷰 템플릿 사용

뷰 템플릿을 거쳐서 HTML이 생성되고, 뷰가 응답을 만들어서 전달합니다.

일반적으로 HTML을 동적으로 생성하는 용도로 사용하고, 웹 브라우저에 동적인 HTML을 제공할 때는 뷰 템플릿을 사용합니다.

 

스프링 부트는 다음과 같은 기본 뷰 템플릿 경로를 제공합니다.

src/main/resources/templates

 

resources/templates 경로에 있는 동적인 hello.html을 호출하는 방법은 다음과 같습니다. (여기선 타임리프 사용)

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
</head>
<body>
<p th:text="${data}">empty</p>
</body>
</html>

 

컨트롤러에서 /reponse-view 경로로 요청 시 Model객체를 통해hello.html에 있는 ${data} 값을 hello~~~~~~! 로 넘겨주고

hello.html을 반환해 렌더링해줍니다.

@GetMapping("/response-view")
    public String responseViewV2(Model model) {
        model.addAttribute("data", "hello~~~~~~!");
        return "hello";
    }
}

 

HTTP 메시지 사용

HTTP API를 제공하는 경우에는 HTML이 아니라 데이터를 전달해야 하므로, HTTP 메시지 바디에 JSON 같은 형식으로 데이터를 실어 보냅니다.

 

  • String을 반환할 시 return 값을 그대로 Body에 담아 반환하는 방법
@ResponseBody
@GetMapping("/response-body-string")
public String responseBody() {
    return "OK";
}

  • 객체를 반환할 시 객체의 값이 JSON형식으로 반환하는 방법
@ResponseStatus(HttpStatus.OK)
@ResponseBody
@GetMapping("/response-body-json")
public HelloData responseBodyJson() {
  HelloData helloData = new HelloData();
  helloData.setUsername("hyun");
  helloData.setAge(20);
  return helloData;
}

 

@ResponseStatus(HttpStatus.OK)으로 응답시 상태코드도 정할 수 있습니다.


HTTP 응답 관련 어노테이션

@ResponseBody

HTTP의 BODY에 문자 내용을 직접 반환하게 되면 viewResolver 대신에 HttpMessageConverter가 동작하여

반환 값에 따라 다음 객체가 동작하게 됩니다.

반환 타입 동작하는 객체
String StringHttpMessageConverter
객체 MappingJackson2HttpMessageConverter

이 외에도 byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있습니다.

 


@RestController

이름 그대로 Rest API(HTTP API)를 만들 때 사용하는 컨트롤러입니다.

@Controller 어노테이션은 반환 값이 String 이면 View 이름으로 인식해서 뷰를 찾고 뷰가 랜더링 되지만,

@RestController 는 반환 값으로 뷰를 찾는 것이 아니라, 반환 값을 HTTP 메시지 바디에 바로 입력합니다.

@ResponseBody가 적용된 것과 같은데 사실 @RestController 에노테이션 안에 @ResponseBody 가 적용되어 있습니다.

따라서, @Controller 대신에 @RestController 애노테이션을 사용하면, 해당 컨트롤러에 모두  @ResponseBody가 적용되는 효과가 있습니다.

 


HTTP 요청 방법과 관련 어노테이션 보기

 

[Spring] HTTP 요청 방법과 관련 어노테이션(Annotation)

HTTP 요청 방법 3가지 스프링 HTTP 요청 방법 3가지는 다음과 같이 이뤄져있습니다. GET 방식 메시지 바디 없이, URL의 “쿼리 파라미터”를 사용해 데이터를 전달합니다. ( EX : 검색, 필터, 페이징 등

hstory0208.tistory.com