WEEK 5-6: Spring 응답 데이터

ensalada.de.pollo·2025년 5월 11일

be

목록 보기
20/44

정적 리소스

정적 리소스라는 것은 HTML, CSS, JS, 이미지 등과 같이 서버에서 별도의 처리 없이 그대로 반환되는 파일을 의미합니다.

Spring Boot에서는 아래 경로에 위치한 파일들을 정적 리소스로 인식하여 반환합니다.

  • /static
  • /public
  • /META-INF/resources

예를 들어서, src/main/resources/static/hello/world.html이라는 파일이 있으면, localhost:8080/hello/world.html로 접근할 수 있습니다.

View Template(SSR)

서버에서 동적으로 HTML을 생성하여 반환합니다. Spring에서는 Thymeleaf, JSP 등의 템플릿 엔진을 통해 View Template을 작성할 수 있습니다.

컨트롤러에서 @Controller와 함께 메서드가 문자열을 반환하면 Spring은 View Resolver를 통해 해당 이름의 템플릿 파일을 찾아서 렌더링 합니다.

@Controller
public class ViewTemplateController {
	@RequestMapping("/response-view")
    public Stirng responseView(Model model) {
    	model.addAttribute("data", "test");
        return "thymeleaf-view"; // templates/thymeleaft-view.html
    }
}

기본적으로 SpringBoot는 src/main/resources/templates 경로를 View Template 폴더로 사용합니다.

HTTP Message Body

HTTP Message Body는 데이터를 직접 응답 본문에 담아서 반환하는 방식입니다.

컨트롤러에서 @ResponseBody를 사용하거나 @RestController를 사용하면 반환 값이 HTTP Message Body에 직접 들어갑니다.

@Controller
public class ViewController {
	@ResponseBody
    @RequestMapping("/resopnse-body")
    public String responseBody() {
    	return "thymeleaft-view"; // 문자열이 그대로 HTTP Response Body에 들어감
    }
}

JSON 응답이 필요한 경우 DTO 객체를 반환하면 Spring이 자동으로 Json으로 변환해줍니다.

HttpServletResponse

Servlet 프로그래밍과 동일하게 HttpServletResponse의 getWriter().write()를 통해 response body에 직접 데이터를 넣습니다.
가장 저 수준의 방식으로, HttpStatus, header 등도 직접 설정해야 합니다.

@Controller
public class ResponseBodyController {
	@GetMapping("/response-body")
    public void responseBody(HttpServletResponse response) throws IOException {
    	response.getWriter().write("data");
    }
}

ResponseEntity<T>

ResponseEntity는 HttpStatus, header, body를 모두 제어할 수 있는 대표적인 응답 객체입니다. body에 데이터를 담아 반환할 수 있고, 상태 코드도 원하는 대로 지정할 수 있습니다.

@GetMapping("/response-body")
public ResponseEntity<String> responseBody() {
	return new ResponseEntity<>("data", HttpStatus.OK);
}

객체를 반환하게 되면 자동으로 JSON 변환됩니다.

@GetMapping("/response-body")
public ResponseEntity<Tutor> responseBody() {
	Tutor tutor = new Tutor("철수", 100);
    return new ResponseEntity<>(tutor, HttpStatus.OK);
}

@ResponseBody

@ResponseBody를 메서드에 붙이면 반환값이 View 이름이 아니라 HTTP 메시지 바디에 직접 들어가게 됩니다.

반환 타입이 String이면 text, 객체라면 JSON 등으로 자동 변환됩니다.

@ResponseBody
@GetMapping("/response-body-text")
public String responseBodyText() {
	return "data";
}
@ResponseBody
@GetMapping("/response-body-json")
public Tutor responseBodyJson() {
	Tutor tutor = new Tutor("철수", 100);
    return tutor;
}

@ResponseStatus

@ResponseStatus(HttpStatus.000)을 함께 사용하면 HttpStatus도 지정할 수 있습니다. 단, 동적으로 HttpStatus를 변경하는 것은 불가능합니다.

@ResponseStatus(HttpStatus.OK)
@ResponseBody
@GetMapping("/response-body")
public Tutor responseBody() {
	Tutor tutor = new Tutor("철수", 100);
   	return tutor;
}

@RestController

@ConTroller + @ResponseBody의 조합입니다. 모든 메서드의 반환 값이 HTTP body에 직접 들어가게 됩니다.

자료 및 코드 출처: 스파르타 코딩클럽

0개의 댓글