inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

단순하고 실용적인 컨트롤러 - v4

ControllerV4가 이해가 안됩니다.

575

blackhole124

작성한 질문수 60

0

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

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

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

[질문 내용]
여기에 질문 내용을 남겨주세요.스크린샷 2024-01-06 오후 9.50.29.png"MemberFormControllerV4에서 모델을 생성할 필요가 없다. 왜냐하면 프론트 컨트롤러에서 모델을 다 만들어서 넘겨준다." 라고 강사님께서 말씀하셨습니다. 그 이후에 ,

FrontControllerServletV4에서 아래와 같이 작성하면서

model을 넘겨줬습니다.

질문 1.이때, paramMap이랑 model이 의미하는게 무엇인가요?

질문 2.또한, 강사님께서 말씀하신 모델을 각 컨트롤러에서 만들지 않고 FrontControllerServletV4로 넘겨주는 이유는 무엇인가요?

 

스크린샷 2024-01-06 오후 10.04.27.png

스크린샷 2024-01-06 오후 9.52.06.png그리고 여기서는 "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(데이터)를 이용하여 웹 페이지 화면에 보여줌

스크린샷 2024-01-06 오후 9.54.42.png

spring mvc

답변 2

0

David

안녕하세요. blackhole124님, 공식 서포터즈 David입니다.

  1. paramMap은 요청 파라미터 정보이고, model은 뷰에서 사용되어질 데이터입니다.

  2. paramMap과 model은 컨트롤러라면 모두 사용되는 것들인데 모든 컨트롤러에서 생성할 필요없기 때문입니다. 프론트 컨트롤러에서 생성한 뒤, 각 요청을 처리할 컨트롤러에 넘겨주면 생성 포인트가 프론트 컨트롤러 한 곳으로 집중되어 유지보수 하기 좋습니다.

  3. model에 멤버와 관련된 정보(예: age)를 넣어주었고 이를 프론트 컨트롤러에서 뷰와 함께 처리할 것이기 때문에 굳이 ModelView를 만들고, ModelView로부터 model을 가져와 넣을 필요가 없습니다. 다 프론트 컨트롤러에 위임합니다.

위 내용은 모두 강의에서 설명하고 있습니다. 혹시 많이 헷갈리신다면 반복 수강하길 권장드립니다🙂

감사합니다.

0

인프런 AI 인턴

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

blackhole124님, 스프링 MVC에 관한 깊이있는 질문 감사드립니다.

질문 1에 대한 답변입니다. paramMap은 HTTP 요청과 함께 전달되는 파라미터들의 맵입니다. 즉, 클라이언트가 서버로 데이터를 보낼 때, 그 데이터를 키와 값의 쌍으로 가지고 있는 맵이라고 생각하시면 됩니다. model은 컨트롤러가 작업을 처리하면서 결과물을 담는 객체로, 뷰에 전달될 데이터를 포함하고 있습니다.

질문 2에 대한 답변입니다. 모델을 각 컨트롤러에서 만들지 않고 FrontControllerServletV4로 넘겨주는 이유는 중복 코드를 제거하고, 프론트 컨트롤러가 요청에 대한 공통 처리를 책임지게 하기 위함입니다. 즉, 모든 컨트롤러에서 모델을 새로 생성하는 대신 프론트 컨트롤러가 모델 객체를 생성하여 각 컨트롤러에 넘겨주어, 컨트롤러는 비즈니스 로직에만 집중할 수 있게 됩니다.

질문 3에 대한 답변입니다. “ModelView를 따로 만들어 줄 필요는 없고”는, 각 컨트롤러에서 ModelView 객체를 생성하여 반환할 필요 없이, 프론트 컨트롤러에서 model을 생성하여 넘겨주고, 컨트롤러는 처리 결과를 model에 담아 뷰 이름만 반환하면 된다는 의미입니다. 이렇게 하면 뷰를 선택하는 일과 모델을 구성하는 일이 분리되어 컨트롤러의 책임이 단순해지고, 중복을 제거할 수 있습니다.

blackhole124님의 이해하신 내용은 맞습니다. FrontControllerServletV4에서 모델 객체를 생성하고, 이를 각 컨트롤러에 넘겨줌으로써 각 컨트롤러는 비즈니스 로직을 수행하고 그 결과를 모델에 담은 다음, 결과를 보여줄 뷰의 이름을 반환합니다. 이후 프론트 컨트롤러에서 뷰 리졸버를 통해 실제 뷰 객체로 변환하고, 렌더링을 담당하는 render 메소드를 호출하여 클라이언트에게 HTML 응답을 제공합니다.

도움이 되셨길 바랍니다. 스프링 MVC 학습에 더 깊은 인사이트를 얻으시길 응원하겠습니다!

servlet과 container에 대한 질문입니다

0

25

1

api를 어느 컨트롤러에 작성해야하는지는 어떤 기준으로 해야하나요?

0

64

1

jsp 의존성 수정 요청

0

78

2

요즘 웹 서버가 주로 사용되는 이유는 SPA 구조 때문일까요 ?

0

143

1

save() 메서드 문의

0

67

1

절대 경로로 templates/basic 하위 파일 열면 css 적용 안되는 현상

0

101

1

request-body-json

0

83

2

MVC 패턴의 적용 단위

0

97

1

RequestMapping을 이용한 핸들러, 어댑터

0

119

2

save 후 결과화면

0

89

2

jsp를 이용한 view

0

97

1

application.properties에 debug 추가해도 결과가 똑같습니다.

0

178

1

수업 코드 제공 관련 문의

0

97

2

RequestMappingHandlerAdapter의 Controller 호출 과정

0

100

3

파일 오픈 시

0

70

1

스프링 배치 관련

0

78

1

@RequestParam의 defaultValue가 blank 값도 처리하는 지 여부

0

112

1

postman으로 /request-body-json-v1 호출시 500 error

0

95

1

프론트엔드와 백엔드의 mvc, rest api에 대한 질문

0

79

1

모델의 역할과 계층 분리에 대한 이해 차이 + 추가질문

0

111

1

console log 출력 관련 질문입니다.

0

75

1

애플리케이션이 실행 되지 않습니다 ㅠㅠㅠ

0

139

1

html 변경하는 부분 적용 문제

0

103

1

한글 깨짐

0

76

2