• 티스토리 홈
starryeye
  • 프로필사진
    starryeye
    • 분류 전체보기 (189)
      • C++ (17)
      • Java (24)
      • OOP (5)
      • Spring Reactive Stack (12)
        • Reactive Streams (3)
        • Netty (4)
        • Reactor (1)
        • Webflux (3)
        • DB, Cache 연동 (1)
      • Spring (90)
        • Core (17)
        • MVC (33)
        • Client (2)
        • Security (4)
        • DB, Cache 연동 (33)
      • DataBase (12)
        • RDBMS (2)
        • NoSQL (10)
      • Message Broker (6)
      • Web (4)
      • Network (4)
      • 대규모 시스템 설계 (15)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • Spring MVC 마스터하기 3 (응답 부분)
        2022년 04월 22일
        • starryeye
        • 작성자
        • 2022.04.22.오전00:32
        반응형

        Spring에서는 요청과 마찬가지로 응답을 만드는 방법도 3가지이다.

         

        ㄱ. 정적 리소스 응답 //파일을 그대로 전달

        ㄴ. 뷰 템플릿 사용 //동적인 HTML 응답 (SSR)

        ㄷ. HTTP 메시지 사용 //응답 HTTP Message Body에 직접 데이터 전달

         

         

        ㄱ. 정적 리소스 응답

        정적 리소스의 경로

        -> 스프링 부트는 아래 디렉토리에 있는 정적 리소스를 제공한다.

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

         

         

        ㄴ. 뷰 템플릿 사용한 응답

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

        (뷰 템플릿이 만들 수 있는 모든 것)

         

        <뷰 템플릿의 경로>

        src/main/resources/templates

         

        ModelAndView

        ModelAndView 객체 생성 시, 파라미터는 View name 이다.

        .addObject 메서드로 뷰 템플릿에 전달할 데이터를 attributeName - attributeValue 쌍으로 넣어준다.

        (Thymeleaf에서는 이를 ${data}로 꺼낼 수 있다.

         

        Model

        return type을 String으로 변경하는 순간 data를 전달할 다른 수단이 필요해졌다.

        -> Model //ModelAndView에서 데이터 전달하는 역할만 뺀 것이다.

        .addAttribute 메서드로 뷰 템플릿에 전달할 데이터를 attributeName - attributeValue 쌍으로 넣어준다.

         

        class 레벨에는 @Controller가 있다고 생각해보자.

        컨트롤러 메서드에서 return type이 String이면 이는 뷰의 논리적 이름이다.

        (@ResponseBody, @RestController를 적용하면 응답 HTTP message body에 입력되는 방식으로 적용된다.)

         

         

        ㄷ. HTTP Message Body에 직접 데이터 응답

         

        @RestController

        @RestController는 @Controller와 @ResponseBody를 함께 적용한 것과 동일한 기능을 제공한다.

         

         

        ResponseEntity

        HttpEntity의 자식클래스 이다.

        body에 단순 텍스트를 넣는 예제기 때문에 generic type은 String으로 사용하고 있다.

        응답 상태코드를 지정할 수 있다.

         

        body에 Json을 넣을 경우 객체로 넣고 전달 해준다.

         

        <참고>

        "Spring MVC 마스터하기 예외처리 5" 포스팅을 참고하면

        Map 자료구조를 json으로 변환 하는 예시를 볼 수 있음

         

         

        @ResponseBody

        @ResponseBody가 적용되어있고, return type이 String이면

        응답 HTTP Message Body에 해당 문자열이 직접 넣어진다. (뷰찾기가 아님)

         

        @ResponseBody에 위와 같이 return type을 객체로 하고 객체를 리턴하는 경우도 가능하다.

        @ResponseStatus 에노테이션으로 응답 코드를 설정할 수 있다.

        (에노테이션을 사용하면 동적으로 상태코드를 조절 할 수 없다. 필요하다면 ResponseEntity를 이용하자)

         

         

        반응형

        'Spring > MVC' 카테고리의 다른 글

        Spring MVC Redirect, PRG  (0) 2022.05.06
        Spring MVC 마스터하기 4  (0) 2022.04.24
        Spring MVC 마스터하기 2 (요청 부분)  (0) 2022.04.19
        Spring MVC 마스터하기 1  (0) 2022.04.17
        Servlet + JSP의 MVC 패턴에서 Spring MVC 로 발전하는 모습  (0) 2022.04.05
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바

        단축키

        내 블로그

        내 블로그 - 관리자 홈 전환
        Q
        Q
        새 글 쓰기
        W
        W

        블로그 게시글

        글 수정 (권한 있는 경우)
        E
        E
        댓글 영역으로 이동
        C
        C

        모든 영역

        이 페이지의 URL 복사
        S
        S
        맨 위로 이동
        T
        T
        티스토리 홈 이동
        H
        H
        단축키 안내
        Shift + /
        ⇧ + /

        * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.