🌲 RestController 와 Controller 의 차이

2023. 8. 3. 20:57· Spring/🌲 Spring
목차
  1. Reference

1. @Controller

Spring MVC 의 대표 어노테이션 Controller 는 View 를 반환하기 위해 사용하는 어노테이션이다

 

순서

  1. Clinet 는 URI 형식으로 웹 서비스에 요청을 보낸다
  2. DispatcherServlet이 요청을 처리할 대상을 찾는다(존재의 유무)
  3. HandlerAdapter를 통해 요청을 위임하게 되고 그 요청은 Controller 로 가게 되는것이다.
  4. Controller 는 요청을 처리한 후에 ViewName 을 반환하게 된다
  5. DispatcherServlet은 ViewResolver를 통해 ViewName에 해당하는 View를 찾아 사용자에게 반환한다
  6. View 네임을 통해 결과적으로 ViewResolver 에서 이름을 통해 렌더링 되면서 사용자에게 화면을 보여주게 된다.

그렇다면 한가지 궁금한게 생긴다. 근데 과연 Controller 는 그저 View 찾아주는 역할에 불과할까? Data는 다루지 못하는 걸까? 결과부터 말하자면 당연히 가능하다 다만 한가지 더 추가해주어야 하는 길이 있는데 바로 @ResponseBody가 메소드에 추가되어야 한다. 이로 인해 JSON의 형태로 데이터를 반환하게 되는것이다.

 

 

위와 크게 다르지 않지만 6번을 보면 조금 다른걸 알수가 있다. View를 통해 ViewResolver 를 사용하는 대신에 HttpMessageConverter가 동작하기 시작한다. 여기엔 다양한 Converter가 존재하는데 반환되는 데이터에 따라 사용하는 Converter가 결정된다

단순 문자열일 경우 : StringHttpMessageConverter

객체인 경우 : MappingJackson2HttpMessageConverter

이런식으로 데이터의 경우에 따라 다양한 Converter가 동작하는 것이다.

 

보이는것과 같이 ResponseEntity로 감싸서 데이터를 반환하게 된다 또 반환한 데이터를 JSON으로 만들어주기 위해 @ResponseBody 어노테이션을 사용해 묶어준다.

그렇다면 이제 또 다시 고민하게 된다 그럼 Data 만 전송하면 되는 상황에서 모든 메소드에 ResponseBody를 붙여야할까? 이마저도 귀찮다 한번에 붙여버리게 된 RestController 에 대해 알아보자

 

2. @RestController

RestController 는 이름만 봐도 감이 오겠지만 ResponseBody와 Controller 의 기능을 합쳐놓은 것으로 해당 클래스의 모든 메소드가 JSON의 형태인 객체로 반환한다면 사용하면 된다. 이건 과정을 설명하기엔 위에 Data를 다루는 Controller 와 너무 비슷하다 때문에 코드만 보고 확인해보자

 

 

RestController 하나로 어노테이션이 정리가 되었다는 사실을 알수 있다.

 

 

 

Reference

https://mangkyu.tistory.com/49

 

[Spring] @Controller와 @RestController 차이

Spring에서 컨트롤러를 지정해주기 위한 어노테이션은 @Controller와 @RestController가 있습니다. 전통적인 Spring MVC의 컨트롤러인 @Controller와 Restuful 웹서비스의 컨트롤러인 @RestController의 주요한 차이점

mangkyu.tistory.com

 

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

🌲 Entity 와 DTO 의 차이  (0) 2023.08.03
🌲 @NoArgsConstructor 와 @AllArgsConstructor 그리고 @RequiredArgsConstructor  (0) 2023.08.03
🌲 Request 와 Response  (0) 2023.08.03
🌲 개발자가 서비스를 주고 받을 때 고민하는 3가지(feat. SSR, CSR)  (0) 2023.08.01
🌲 서블릿(Servlet)  (0) 2023.08.01
  1. Reference
'Spring/🌲 Spring' 카테고리의 다른 글
  • 🌲 Entity 와 DTO 의 차이
  • 🌲 @NoArgsConstructor 와 @AllArgsConstructor 그리고 @RequiredArgsConstructor
  • 🌲 Request 와 Response
  • 🌲 개발자가 서비스를 주고 받을 때 고민하는 3가지(feat. SSR, CSR)
늦은산책
늦은산책
늦은산책
중얼중얼블로그
늦은산책
전체
오늘
어제
  • 분류 전체보기
    • 오류 모음집
    • CS
      • 💾 자료구조
      • 👫🏼 정렬
      • 🖥 네트워크
      • 💻 운영체제
      • 💾 DB
      • 🌌 알고리즘
      • 📝 언어
    • 테스트
    • Git 초보에게 필요한 Git bash사용법
    • 프로젝트
      • 팀 프로젝트
      • 개인 프로젝트
      • 항해99 개인 프로젝트
      • 스위프 프로젝트(Lit Map)
    • Java
      • 객체 지향
    • Spring
      • 🌲 Spring
      • 👨‍💻 SpringSecurity
      • 🌵 JPA
    • MSA
      • MSA 강좌 - 이도원 강사님
    • Docker(도커)
    • 코딩테스트
      • 🧮 프로그래머스
      • 🎲 백준
    • 항해99
      • 🕛 1주차
      • 🕐 2주차
      • 🕑 3주차
      • 🕒 4주차
    • AWS
    • CI와CD

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • couchcoding
  • 카우치코딩
  • 카우치코딩_팀프로젝트
  • 취리코
  • 개발자취업
  • 개발자포트폴리오
  • 개발자이력서
  • 취업리부트코스
  • 코딩테스트
  • 항해99
  • 카우치코딩_포트폴리오_멘토링
  • 개발자취준
  • 개발자포토폴리오

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
늦은산책
🌲 RestController 와 Controller 의 차이
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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