• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

controller restcontroller

24.03.28 04:13 작성 조회수 125

0

선생님 안녕하세요. 거의 다 완강하고 나서 문득 든 생각이 있습니다. 저희 도서 관리 프로젝트에서 controller를 안쓰고 restcontroller을 사용한 이유가 궁금합니다

일단 제가 구글링을 해보았을때,

controller은 반환 값이 string이면 뷰를 찾고 렌더링 한다고 나와있으며 restcontroller은 @Requestbody + @controller이며 뷰를 찾는게 아니라 http메세지 바디에 바로 입력한다고 찾아보았습니다. 저는 프론트엔드에게 데이터를 주려면 모델에 담아서 보내야 하는 것으로 이해하고 있는데 그러면 controller을 쓰는 것이 맞지 않나 의문점이 들었습니다. 여기서 더 해답을 찾지 못하겠어서 질문글을 남겼습니다.

감사합[니다.

답변 3

·

답변을 작성해보세요.

0

안녕하세요, 민석님! 🙂 현재 @Controller vs @RestController 라는 주제를 가지고 추가 영상을 준비하고 있는데요! 영상 제작은 시간이 조금 걸릴 것 같아 빠르게 결론부터 말씀드려보도록 하겠습니다.

 

restcontroller은 @Requestbody + @controller이며 뷰를 찾는게 아니라 http메세지 바디에 바로 입력한다고 찾아보았습니다.

맞습니다! 👍 정확히는 @ResponseBody + @Controller 이고 이는 @RestController 어노테이션을 타고 들어가면 확인할 수 있습니다. 이는 Controller가 기본적으로 view를 찾으려고 하는 것과 다르게, Controller 안의 메소드의 결과를 HTTP 응답 Body에 담을 수 있게끔 처리해줍니다.

image

저는 프론트엔드에게 데이터를 주려면 모델에 담아서 보내야 하는 것으로 이해하고 있는데 그러면 controller을 쓰는 것이 맞지 않나 의문점이 들었습니다.

이 부분이 약간 다릅니다! 프론트에게 데이터를 주려면, 우리는 무조건 HTTP 응답 Body를 사용해야만 합니다.

단지, 그 응답 Body에 JSON과 같은 데이터가 담겨 있을 수도 있고, 아니면 HTML와 같은 페이지가 담겨있을 수도 있습니다.

 

모델에 담아서 데이터를 보내는 경우는, 서버가 페이지를 반환하려고 하는데 (즉, View를 사용하려고 하는데), 그 페이지를 동적으로 생성하기 위한 경우입니다. 즉 바꿔 말하면 서버가 페이지를 반환할게 아니라, JSON 같은 데이터를 반환할거라면, View도 사용하지 않고 Model도 사용하지 않습니다.

 

이런 내용은 CSR, SSR 개념에서도 찾아볼 수 있습니다.image과거에는 스프링이 직접 페이지를 반환하는 SSR을 사용했기 때문에 (JSP, thymeleaf 같은 템플릿 엔진이 대표적인 기술입니다) Model과 View를 사용했으나 요즘에는 화면을 react.js 혹은 vue.js 같은 기술로 개발하고, 서버는 데이터만 전달하기 때문에 이 강의에서도 데이터를 전달하는 예제를 다루고 있고, @RestController 를 사용하고 있다고 이해해주시면 될 것 같습니다.

 

답변이 도움이 되었으면 좋겠습니다.

추가적인 영상이 올라오면 다시 한 번 댓글 남기도록 하겠습니다. 감사합니다! 🙏

김민석님의 프로필

김민석

질문자

2024.04.01

감사합니다 선생님 혹시 공부 방향성에 대한 질문도 여쭤보고 싶은데, 비공개 글이 안되어서 실례가 안된다면 이메일이나 오픈 카톡으로 여쭤볼 수 있을까요

안녕하세요 민석님! 🙂 이메일은 choi-0202@naver.com 입니다.

다만, 제가 개인적으로는 공부방향성이나 1:1 상담 등을 진행하고 있지 않아 관련한 내용은 답변 드리기 어려울 수 있어, 미리 양해 말씀 드립니다. <인프런 워밍업 클럽 스터디>와 같은 프로그램을 통해서는 진행하는 경우도 있습니다. 감사합니다. 🙏

0

안녕하세요 민석님! 🙂 좋은 질문 감사드립니다! 👍

 

맞아요! 강의에서 @Controller 를 직접 다루지는 않았지만

조금 더 공부하를 하다보면, @Controller@RestController가 어떻게 다른지? 무엇을 왜 사용하는지 헷갈리기 마련이죠! 😢

 

이 부분은 글로만 말씀드리기에는 조금 애매한 부분들이 있어, 별도의 영상으로 설명드리도록 하겠습니다.

가능한 빠른 시간 안에 준비해서 말씀드려 볼게요! 감사합니다. 🙏

김민석님의 프로필

김민석

질문자

2024.03.29

감사합니다:)

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.03.28

안녕하세요, 인프런 AI 인턴입니다.

김민석님의 질문에 대해서는, @Controller@RestController의 차이와 사용 상황에 대해 명확하게 다룬 기존의 답변을 찾았습니다.

@RequestMapping 활용 질문에서 @Controller@RestController에 대한 토론이 이루어졌습니다. 이 질문에서는 @Controller의 사용보다는 @RequestMapping에 대한 특정 사용 사례를 논의했지만, 해당 답변에서 @Controller@RestController의 사용 상황과 차이점에 대해서도 언급하고 있습니다.

질문자님의 경우, 프론트엔드에 데이터를 제공하는 상황에서 @RestController를 사용한 이유에 대한 궁금증이 있습니다. @RestController@Controller@ResponseBody를 합친 것으로, HTTP의 Body에 직접 데이터를 반환합니다. 이는 주로 API를 통해 데이터를 JSON이나 XML 형태로 클라이언트(예: 프론트엔드)에게 보내고자 할 때 사용됩니다.

@Controller는 주로 뷰 페이지를 반환하는 데 사용되며, @RestController는 RESTful 웹 서비스를 구현할 때 주로 사용됩니다. 강의에서 @RestController를 선택한 이유는, 도서 관리 프로젝트에서 REST API를 통해 데이터를 프론트엔드에게 전달하는 설계를 따르기 때문일 수 있습니다. 이러한 설계 방식은 요즘 웹 개발에서 매우 일반적이며, 프론트엔드와 백엔드가 분리된 구조에서는 REST API를 통한 데이터 교환 방식이 자주 사용됩니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.