인프런 커뮤니티 질문&답변

양치잘하기님의 프로필 이미지

작성한 질문수

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

API

Mvc방식에서 메서드의 파라미터에 Model model을 사용하는 이유가 무엇인가요? 그리고 api방식에서의 질문이 있습니다.

해결된 질문

작성

·

226

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]

뒷 내용이 어려워서 다시 복습하는중인데 파라미터에 Model model을 사용하는 이유가 궁금합니다. 파라미터로 받지 않고 메서드 내부에서

Model model;

model.addAttribute(모델데이타, value); 이렇게 사용할 수 는 없는건가요?

그리고 api통신에서 어노테이션에 @ResponseBody를 확인하면 html로 반환하지 않는다고 인식 후 return이 스트링인지 객체인지 확인 후 어떤 형식으로 반환할지 정해지는것인가요?

객체를 반환할 때 서버에 반환하던 웹 브라우저에 반환하던 스프링은 누구에게 반환을 하는건지 몰라도 되는것인가요? 예를 들면 현 강의에서는 웹 브라우저에 반환을 하였지만 리액트를 이용할 때는 노드환경(노드환경을 서버로 이해하였습니다.)에 반환을 하는 방식인데 스프링은 요청한 주체와 반환되는 값이 어디로 가는지는 알 필요가 없는건가요?

답변 2

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 양치잘하기님

AI 인턴의 답변에 추가로 답변을 달아드릴게요.

  1. Model model이 사용되는 정확한 이유는 이후 강의인 스프링 MVC 1편에서 자세히 설명드리고 있습니다. 이 부분을 다시 한번 복습하시는 것을 권장드려요.

  2. 네 스프링 입장에서는 누구에게 반환하는지 몰라도 됩니다. 다만 이런 부분은 스프링 컨트롤러에서 HTTP 요청 헤더를 통해서 구분해서 처리할 수는 있습니다.


    감사합니다.

감사합니다 다시 복습하면서 이해하겠습니다

0

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

양치잘하기님, 스프링 MVC에서 Model 객체를 메서드 파라미터로 사용하는 이유와 API 통신에서 @ResponseBody 어노테이션의 역할에 대한 궁금증을 해결해드리기 위해, 관련된 내용을 찾아보았습니다.

MVC에서의 Model 사용

Model 객체를 메서드 파라미터로 받는 것은 스프링 MVC가 제공하는 기능 중 하나입니다. 이를 통해 개발자는 컨트롤러에서 뷰로 전달할 데이터를 Model 객체에 담아서 넘겨주게 됩니다. 메서드 내부에서 Model 객체를 직접 생성하는 것은 스프링의 MVC 패턴과 맞지 않으며, 스프링이 제공하는 요청-응답 생명주기와 맞지 않습니다. 전달하고자 하는 데이터를 addAttribute 메소드를 통해 Model에 추가하면, 이 Model은 뷰에서 데이터를 참조할 수 있게 됩니다. Model이 생략되는 이유가 궁금합니다.에서 언급된 것처럼, 만약 뷰에서 사용할 데이터가 없다면 Model을 생략할 수 있습니다.

@ResponseBody 어노테이션과 API 통신

@ResponseBody 어노테이션은 스프링 MVC에서 컨트롤러 메소드의 반환값을 HTTP 응답 본문(Body)에 직접 쓰도록 지정합니다. 이 어노테이션을 사용하면 스프링은 메소드에서 반환하는 값을 HTTP 응답 본문에 직접 넣어서 반환하게 됩니다. 반환 값이 문자열인 경우 그대로 HTTP 응답 본문에 넣어 반환하고, 객체인 경우 일반적으로 JSON 형태로 변환하여 반환합니다. 스프링 프레임워크는 내부적으로 HttpMessageConverter를 사용하여 객체를 JSON으로 변환합니다. API 방식에서 스프링은 요청이 온 주체가 웹 브라우저인지, 다른 서버인지 구분하지 않습니다. @ResponseBody를 사용하는 API 메소드는 단순히 요청에 대한 응답 데이터를 생성해서 반환할 뿐, 요청한 주체가 누구인지는 중요하지 않습니다. 따라서 리액트 같은 클라이언트 또는 다른 서버 모두에 데이터를 제공할 수 있습니다.

양치잘하기님의 질문에 대해 더 자세한 내용은 model 의 전달방식? 에 관해 질문이 있습니다!!와 같이 관련된 글을 참고하시면 도움이 될 것 같습니다.

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