본문 바로가기
Develop/Spring+JPA

[Spring] HTTP 응답

by 연로그 2021. 8. 11.
반응형

📖 개요

서버에서 응답 데이터를 만드는 방법은 크게 3가지다.

  1. 정적 리소스 (ex: 정적 html, css, js, ...)
  2. 뷰 템플릿 (ex: 동적 html)
  3. HTTP 메시지 

 

 

📕 1. 정적 리소스

정적 리소스는 해당 파일을 변경 없이 그대로 서비스하는 것이다.

 

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

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

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

 

 

📒 2. 뷰 템플릿

뷰 템플릿을 거쳐 html이 생성되고, 뷰가 응답을 만들어 전달한다.

일반적으로 html을 동적으로 생성하는 용도로 사용된다.

스프링 부트의 기본 뷰 템플릿 경로는 아래와 같다.

src/main/resources/templates

 

이제 예제를 통해 뷰 템플릿을 호출해보자.

 

🔻 html 파일

더보기

src/main/resources/templates 하위에 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>

 

Thymeleaf 설정하기 (build.gradle)

타임리프 관련 추가 설정 > https://docs.spring.io/spring-boot/docs/2.4.3/reference/html/appendix-applicationproperties.html#common-application-properties-templating

implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'

 

🍃 ModelAndView를 반환하기

@RequestMapping("/response-view-v1")
public ModelAndView responseViewV1() {
    ModelAndView mav = new ModelAndView("response/hello")
        .addObject("data", "hello!");
    return mav;
}

 

🍃 String을 반환하기

response/hello는 뷰의 논리 이름이다.

뷰의 논리 이름을 반환하면 해당 경로의 뷰 템플릿이 렌더링 된다.

@ResponseBody가 있으면 뷰 리졸버를 실행하지 않고 HTTP 메시지 바디에 직접 response/hello 문자가 입력된다.

@RequestMapping("/response-view-v2")
public String responseViewV2(Model model) {
    model.addAttribute("data", "hello!");
    return "response/hello";	// view 찾기
}

 

❓ 만약 view 이름과 요청 url이 같다면...

더보기

view 이름과 요청 url이 같은 경우에는 아래와 같이 사용할 수 있다.

@RequestMapping("/response/hello")
public void responseViewV3(Model model) {
    model.addAttribute("data", "hello!");
}

@Controller를 사용하며 HTTP 메시지 바디를 처리하는 파라미터(HttpServletResponse, OutputStream 등)가 없을 경우에 발생하는데, 요청 URL을 참고해서 논리 뷰 이름으로 사용한다.

하지만 위 방식은 URL과 논리 뷰 이름이 항상 같지는 않다, 명시성이 떨어진다 등의 문제로 권장되는 방법은 아니다.

 

 

📘 3. HTTP 메시지

HTTP API를 제공하는 경우, html이 아니라 데이터를 전달해야 한다.

HTTP 메시지 바디에 JSON 같은 형식을 이용해 데이터를 넣어 보낸다.

 

HTTP 메시지와 같은 경우에는 이미 요청 데이터 조회할때 다양한 예시를 보았으니 링크로 대체한다.

( > https://yeonyeon.tistory.com/134 )

 

[Spring] http 요청 데이터 조회

📖 개요 클라이언트에서 서버로 요청 데이터를 전달하는 경우는 크게 3가지가 있다. GET - 쿼리 파라미터 (ex: ~~/url?username=yeonLog) POST - html form 태그 HTTP 메시지 바디에 데이터 직접 담기 (ex: json,..

yeonyeon.tistory.com

 


본 게시글은 김영한 님의 '스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술' 강의를 구매 후 정리하기 위한 포스팅입니다.

내용을 임의로 추가, 수정, 삭제한 부분이 많으며 정확한 이해를 위해서 강의를 구매하시는 것을 추천 드립니다.

 

inf.run/B756

 

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의

웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., 원

www.inflearn.com

 

반응형

'Develop > Spring+JPA' 카테고리의 다른 글

[Thymeleaf] 타임리프란? (+기본적인 사용법)  (2) 2021.10.15
[Spring] HTTP 메시지 컨버터  (0) 2021.10.10
[Spring] http 요청 데이터 조회  (0) 2021.08.09
[Spring] 헤더 조회  (0) 2021.07.14
[Spring] 요청 매핑  (0) 2021.06.25