스프링 MVC 기본 기능, HTTP 응답 - 정적 리소스, 뷰 템플릿, HTTP API, 메시지 바디에 직접 입력

2021. 7. 28. 19:36·교육 및 인강/스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

인프런 김영한 님의 스프링 강의이며, 섹션 6 - 스프링 MVC 기본 기능을 정리하는 시간이다.

자세한 설명이 궁금하면 수강을 권장한다.

 

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

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

www.inflearn.com


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

- 정적 리소스 : 웹 브라우저에서 정적인 HTML, css, js

- 뷰 템플릿 사용 :  웹 브라우저에 동적인 HTML 제공

- HTTP 메시지 사용 : HTTP 메시지 바디에 JSON 형식으로 데이터를 전달

 

정적 리소스

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

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

 

정적 리소스 경로

src/main/resources/static

위와 같은 경로에 파일이 있으면 http://localhost:8080/basic/hello-form.html 로 접근이 가능하다.

정적 리소스에 접근이 된다.

 

뷰 템플릿

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

스프링부트는 기본 뷰 템플릿 경로를 제공한다.

 

뷰 템플리 경로 : src/main/resource/templates 

@Controller
public class ResponseViewController {

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

        return mav;
    }

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

        return "response/hello";
    }

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

String을 반환하는 경우 - View or HTTP 메시지

@ResponseBody가 없으면 response/hello로 뷰 리볼버가 실행되어서 뷰를 찾고 렌더링 한다.

만약에 있으면 뷰 리졸버를 건너뛰고 HTTP 메시지 바디에 직접 response/hello 문자가 입력되어 반환된다.

 

@ResponseBody가 없고, 뷰 이름도 반환되지 않는다면?

스프링은 자체적으로 경로로 뷰 템플릿을 찾아서 반환된다. (명시적이 없어 비권장한다) 

경로로 뷰 템플릿이 반환된다.


HTTP 응답 - HTTP API, 메시지 바디에 직접 입력

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

 

@Slf4j
@Controller
public class ResponseBodyController {

    @GetMapping("/response-body-string-v1")
    public void responseBodyV1(HttpServletResponse response) throws IOException {
        response.getWriter().write("ok");
    }

    @GetMapping("/response-body-string-v2")
    public ResponseEntity<String> responseBodyV2() {
        return new ResponseEntity<>("ok", HttpStatus.OK);
    }

    @ResponseBody
    @GetMapping("/response-body-string-v3")
    public String responseBodyV3() {
        return "ok";
    }

    @GetMapping("/response-body-json-v1")
    public ResponseEntity<HelloData> responseBodyJsonV1() {
        HelloData helloData = new HelloData();
        helloData.setAge(20);
        helloData.setUsername("userA");
        return new ResponseEntity<>(helloData, HttpStatus.OK);
    }

    @ResponseStatus(HttpStatus.OK)
    @ResponseBody
    @GetMapping("/response-body-json-v2")
    public HelloData responseBodyJsonV2() {
        HelloData helloData = new HelloData();
        helloData.setAge(20);
        helloData.setUsername("userA");
        return helloData;
    }
}

responseBodyV1 : HttpServletResponse 객체를 통해서 HTTP 메시지 바디에 응답 메시지를 전달한다.

responseBodyV2 : HttpEntity는 HTTP 메시지의 헤더, 바디 정보를 갖는데, 이를 상속받은 ResponseEntity는 HTTP 응답 코드를 설정할 수 있다.

responseBodyV3 : @ResponseBody를 사용하면 HTTP 메시지 컨버터를 통해 HTTP 메시지를 직접 입력한다.

 

responseBodyJsonV1 : ResponseEntity로 반환한다.

responseBodyJsonV2 : @ResponseBody 사용할 경우에 HTTP 응답 코드는 @ResponseStatus로 설정한다.

'교육 및 인강 > 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술' 카테고리의 다른 글

스프링 MVC 기본 기능 - HTTP 메시지 컨버터, 요청 매핑 핸들러 어댑터 구조  (0) 2021.08.03
스프링 MVC 기본 기능, HTTP 요청 메시지 - 단순 텍스트, JSON  (0) 2021.07.20
스프링 MVC 기본 기능, HTTP 요청 - 기본, 헤더 조회, 파라미터  (0) 2021.07.20
스프링 MVC 기본 기능 - 로깅 알아보기, 요청 매핑, API 예시  (0) 2021.07.19
스프링 MVC 이해 - 시작하기, 컨트롤러 통합, 실용적인 방식  (0) 2021.07.19
'교육 및 인강/스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술' 카테고리의 다른 글
  • 스프링 MVC 기본 기능 - HTTP 메시지 컨버터, 요청 매핑 핸들러 어댑터 구조
  • 스프링 MVC 기본 기능, HTTP 요청 메시지 - 단순 텍스트, JSON
  • 스프링 MVC 기본 기능, HTTP 요청 - 기본, 헤더 조회, 파라미터
  • 스프링 MVC 기본 기능 - 로깅 알아보기, 요청 매핑, API 예시
loop-study
loop-study
오늘도 공부하자
  • loop-study
    개발 공부할래?
    loop-study
  • 전체
    오늘
    어제
    • 분류 전체보기 (187)
      • 목표 및 회고 (26)
      • 세미나 & 워크샵 (1)
      • 교육 및 인강 (67)
        • TDD, Clean Code with Java (5)
        • ATDD, 클린 코드 with Spring (6)
        • DDD 세레나데 (3)
        • 인프라 공방 (6)
        • 이규원의 현실 세상의 TDD (19)
        • 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 (18)
        • 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 (0)
        • 모든 개발자를 위한 HTTP 웹 기본 지식 - 김영한 (8)
        • 코딩으로 학습하는 GoF의 디자인 패턴 (1)
        • 스프링 시큐리티 완전정복 6.x (1)
      • 서적 (62)
        • 객체지향의 사실과 오해 (1)
        • 객체지향과 디자인패턴 (7)
        • 만들면서 배우는 클린 아키텍처 (3)
        • 테스트 주도 개발로 배우는 객체 지향 설계와 실천 (1)
        • 오브젝트: 코드로 이해하는 객체지향 설계 (17)
        • 리팩토링 : 코드 구조를 체계적으로 개선하여 효율적인 리팩터링 구현하기 (0)
        • 토비의 스프링 (3)
        • 엔터프라이즈 애플리케이션 아키텍처 패턴 (9)
        • 개발자의 글쓰기 (1)
        • 소프트웨어 장인 (17)
        • Real MySQL 8.0 (2)
        • JVM 밑바닥까지 파헤치기 (0)
      • 개발 & 방법론 (29)
        • Java (13)
        • TDD (5)
        • ATDD (3)
        • DDD (6)
        • 인프라 (2)
        • SQL (0)
      • 개인이야기 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • 백엔드 로드맵
  • 인기 글

  • 태그

    ATDD
    백기선
    java
    자바
    인프라공방
    study
    TDD
    조영호
    이규원
    모든 개발자를 위한 HTTP 웹 기본 지식
    Patterns of Enterprise Application Architecture
    엔터프라이즈 애플리케이션 아키텍처 패턴
    객체지향
    Test Driven Development
    현실세상의 TDD
    김영한
    DDD 세레나데
    마틴 파울러
    fastcampus
    nextstep
    오브젝트
    JUnit
    넥스트스탭
    인프런
    테스트 주도 개발
    추상화
    스프링
    스터디
    장인정신
    소프트웨어 장인
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
loop-study
스프링 MVC 기본 기능, HTTP 응답 - 정적 리소스, 뷰 템플릿, HTTP API, 메시지 바디에 직접 입력
상단으로

티스토리툴바