작성
·
453
·
수정됨
0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
여기에 질문 내용을 남겨주세요."MemberFormControllerV4에서 모델을 생성할 필요가 없다. 왜냐하면 프론트 컨트롤러에서 모델을 다 만들어서 넘겨준다." 라고 강사님께서 말씀하셨습니다. 그 이후에 ,
FrontControllerServletV4에서 아래와 같이 작성하면서
model을 넘겨줬습니다.
질문 1.이때, paramMap이랑 model이 의미하는게 무엇인가요?
질문 2.또한, 강사님께서 말씀하신 모델을 각 컨트롤러에서 만들지 않고 FrontControllerServletV4로 넘겨주는 이유는 무엇인가요?
그리고 여기서는 "ModelView를 따로 만들어 줄 필요는 없고 파라미터에서 username과 age를 받아서 그냥 member에 넣어주면 된다" 라고 말씀하셨습니다.
질문 3"ModelView를 따로 만들어 줄 필요는 없고"가 무슨 의미인지 잘 이해가 안됩니다.
Model을 FrontControllerServletV4에서 만들어 넘겨주기 때문에 model을 따로 생성하지 않아도 되고, view를 return해준다라고 이해하면 옳게 이해한 것인가요?
우선 저는 아래와 같이 이해를 했습니다.
1.컨트롤러 조회 => 어떤 비지니스 로직을 수행할 것인지에 따라 Controller 선택
2.호출(paramMap,model) => 선택된 Controller에게 paramMap(=url)과 model(= DB, 데이터를 저장해두는 저장소 객체)를 넘겨주고, 비지니스 로직을 수행함
3.ViewName 반환 => 비지니스 로직을 수행하고, 보여줄 웹 페이지 화면의 url의 논리 주소를 넘겨줌
4,5,6번 => viewName에 맵핑이 되는 view를 반환하고, model(데이터)를 이용하여 웹 페이지 화면에 보여줌
답변 2
0
안녕하세요. blackhole124님, 공식 서포터즈 David입니다.
paramMap은 요청 파라미터 정보이고, model은 뷰에서 사용되어질 데이터입니다.
paramMap과 model은 컨트롤러라면 모두 사용되는 것들인데 모든 컨트롤러에서 생성할 필요없기 때문입니다. 프론트 컨트롤러에서 생성한 뒤, 각 요청을 처리할 컨트롤러에 넘겨주면 생성 포인트가 프론트 컨트롤러 한 곳으로 집중되어 유지보수 하기 좋습니다.
model에 멤버와 관련된 정보(예: age)를 넣어주었고 이를 프론트 컨트롤러에서 뷰와 함께 처리할 것이기 때문에 굳이 ModelView를 만들고, ModelView로부터 model을 가져와 넣을 필요가 없습니다. 다 프론트 컨트롤러에 위임합니다.
위 내용은 모두 강의에서 설명하고 있습니다. 혹시 많이 헷갈리신다면 반복 수강하길 권장드립니다🙂
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
blackhole124님, 스프링 MVC에 관한 깊이있는 질문 감사드립니다.
질문 1에 대한 답변입니다. paramMap
은 HTTP 요청과 함께 전달되는 파라미터들의 맵입니다. 즉, 클라이언트가 서버로 데이터를 보낼 때, 그 데이터를 키와 값의 쌍으로 가지고 있는 맵이라고 생각하시면 됩니다. model
은 컨트롤러가 작업을 처리하면서 결과물을 담는 객체로, 뷰에 전달될 데이터를 포함하고 있습니다.
질문 2에 대한 답변입니다. 모델을 각 컨트롤러에서 만들지 않고 FrontControllerServletV4로 넘겨주는 이유는 중복 코드를 제거하고, 프론트 컨트롤러가 요청에 대한 공통 처리를 책임지게 하기 위함입니다. 즉, 모든 컨트롤러에서 모델을 새로 생성하는 대신 프론트 컨트롤러가 모델 객체를 생성하여 각 컨트롤러에 넘겨주어, 컨트롤러는 비즈니스 로직에만 집중할 수 있게 됩니다.
질문 3에 대한 답변입니다. “ModelView를 따로 만들어 줄 필요는 없고”는, 각 컨트롤러에서 ModelView 객체를 생성하여 반환할 필요 없이, 프론트 컨트롤러에서 model
을 생성하여 넘겨주고, 컨트롤러는 처리 결과를 model
에 담아 뷰 이름만 반환하면 된다는 의미입니다. 이렇게 하면 뷰를 선택하는 일과 모델을 구성하는 일이 분리되어 컨트롤러의 책임이 단순해지고, 중복을 제거할 수 있습니다.
blackhole124님의 이해하신 내용은 맞습니다. FrontControllerServletV4에서 모델 객체를 생성하고, 이를 각 컨트롤러에 넘겨줌으로써 각 컨트롤러는 비즈니스 로직을 수행하고 그 결과를 모델에 담은 다음, 결과를 보여줄 뷰의 이름을 반환합니다. 이후 프론트 컨트롤러에서 뷰 리졸버를 통해 실제 뷰 객체로 변환하고, 렌더링을 담당하는 render
메소드를 호출하여 클라이언트에게 HTML 응답을 제공합니다.
도움이 되셨길 바랍니다. 스프링 MVC 학습에 더 깊은 인사이트를 얻으시길 응원하겠습니다!