inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

API

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

해결된 질문

315

양치잘하기

작성한 질문수 67

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이 스트링인지 객체인지 확인 후 어떤 형식으로 반환할지 정해지는것인가요?

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

java spring mvc spring-boot

답변 2

0

김영한

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

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

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

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


    감사합니다.

1

양치잘하기

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

0

인프런 AI 인턴

안녕하세요, 인프런 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 의 전달방식? 에 관해 질문이 있습니다!!와 같이 관련된 글을 참고하시면 도움이 될 것 같습니다.

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

..

0

76

2

Unused property.....

0

102

2

project JDK is misconfigured

0

132

2

외부 API의 ID 타입(String/UUID)과 내부 도메인의 ID 타입(Long)이 불일치할 때의 설계 정석

0

83

2

단위/통합 테스트 버전충돌 문제

0

91

2

❗️springboot 4.0.2 버전 aspectj dependency 설정❗️

0

230

1

왜 컨트롤러는 변한게 없는데 새로 만든 html 파일이 뜨나요?

0

104

2

윈도우 build test오류 질문

1

103

2

테스트 관련 공부에 대한 조언을 얻고 싶습니다

0

101

2

테스트 실행 시 에러 질문

0

292

1

name을 통한 비교와 객체를 통한 비교

0

77

1

빌드 후 libs 없음

1

129

1

윈도우 gradlew.bat 에러

0

168

1

@PostMapping("/members/new")가 동작하지 않습니다

0

90

1

java static class와 kotlin class

0

79

1

스프링 DB연결

0

127

1

소요 시간

0

87

2

ddl.sql에 빨간 밑줄

1

102

2

welcome page 에러

0

183

3

잘 모르겠습니다.

0

164

2

fail을 똑같이 쳤는데 오류가 발생해요

0

157

2

index.html Welcome page

0

125

1

프로젝트 gradle-groovy ?

0

370

1

테스트코드 메서드명 한글

0

202

2