inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

스프링 MVC - 시작하기

스프링 MVC 구조에서 핸들러 어댑터는 어디 있나요?

1142

cjkimhello97

작성한 질문수 10

3

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]

안녕하세요 영한님. 강의 아주 재밌고 유익하게 보고 있습니다. 감사합니다!


16분 25초에 스프링 MVC 구조가 완성되었다고 말씀하셨습니다.

@Controller, @RequestMapping 애노테이션을 사용해서 빈 객체로 등록하고 해당 URL로 요청객체가 들어오면 해당 빈 객체의 process 메서드를 호출하는 과정 즉, 핸들러매핑이 된 것은 이해가 갔습니다.

하지만 핸들러 어댑터 목록을 조회하고 그 어댑터가 핸들러를 지원하는지 확인하는 로직은 구현하지 않으신 것으로 이해했습니다. 심지어 V5처럼 List<MyHandlerAdapters> handlerAdapters를 사용하여 V3, V4 두 버전을 지원하기 위한 과정도 없었기 때문에 ModelAndView 참조타입으로 변환해주는 핸들러어댑터가 필요없다고 생각했습니다. 그럼에도 불구하고 영한님께서 왜 핸들러어댑터 그림을 포함시켜서 스프링 MVC 구조가 만들어졌다고 말씀하셨는지 궁금합니다.

 

 

1.png

spring mvc

답변 3

6

cjkimhello97

스프링 MVC 기본 기능까지 들어보니 자연스럽게 해결이 되었습니다... 답변해주셔서 감사합니다!

제가 깨달은 내용을 다른 분들도 보실 수 있게 정리해보겠습니다.

1. 클라이언트의 요청이 들어오면 DispatcherServlet이 요청을 수신합니다.


2. DispatcherServletHandlerMapping에게 요청을 전달하여 적절한 handler(=controller)를 찾습니다.


3. HandlerMapping은 요청을 기반으로 적절한 handler(=controller)를 찾아 반환합니다.


4. DispatcherServlet은 반환된 handler(=controller)를 실행할 수 있는 적절한 HandlerAdapter에게 전달합니다. 스프링은 HandlerAdapter 인터페이스를 구현한 다양한 클래스들을 갖고 있습니다. 예를 들어 만약 @RequestMapping 애노테이션을 사용하는 handler(=controller)의 경우,  RequestMappingHandlerAdapter에게 전달되고, 만약 @RestController 애노테이션을 사용하는 handler(=controller)의 경우, RequestMappingHandlerAdapter에게 전달됩니다.

 

5. HandlerAdapter 구현체가 handler(=controller)를 실행할 수 있도록 요청 값 변환, 검증, 반환 값 변환 등의 작업을 수행했다면 그 결과를 handler(=controller)에게 하고, handler(=controller)는 비즈니스 로직 수행을 완료하고, 필요한 데이터를 Model에 저장합니다.

 

6. handler(=controller)ModelAndView 객체를 생성하고, ModelModelAndView에 추가합니다.


7. ModelAndView 객체는 ViewResolver에게 전달됩니다.


8. ViewResolver는 논리적인 View(ex. "myForm")를 물리적인 View(ex. "WEB/views/myForm.jsp")로 변환합니다.


9.. 변환된 ViewDispatcherServlet에 반환됩니다.


10. DispatcherServletView를 실행하여 클라이언트에게 응답을 생성합니다.


11. 응답은 클라이언트에게 전송되고, 요청-응답 주기가 완료됩니다.

0

최원호

4번 같은 경우 @RestController 애노테이션을 사용하는 handler(=controller)의 경우, RequestMappingHandlerAdapter에게 전달됩니다.

RequestMappingHandlerAdapter이 아니라 HttpRequestHandlerAdapter이 맞지 않나요?

0

김영한

안녕하세요. cjkimhello97님

이번에 진행한 예제가 스프링 MVC 전체를 모두 구현했다기 보다는 스프링 MVC의 핵심 개념을 이해할 정도로 구현했다고 이해하시면 됩니다^^ (전부다 구현한다면 끝이 없겠지요? ㅎㅎ)

감사합니다.

-2

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴이에요.

핸들러 어댑터는 스프링 MVC의 핵심 구성 요소 중 하나로, 핸들러 메서드에서 필요한 파라미터(argument)를 처리하는 역할을 합니다. 핸들러 어댑터 역시 핸들러 매핑과 함께 DispatcherServlet이 초기화될 때 등록되며, 내부적으로 HandlerAdapter 인터페이스를 구현한 다양한 어댑터 클래스들이 존재합니다.

강의에서는 강의의 주제가 되는 핸들러 매핑에 대한 설명과 함께만 언급하고 넘어갔지만, 실제로는 대부분의 컨트롤러에서 핸들러 어댑터가 사용됩니다. 핸들러 어댑터를 이용하여 파라미터를 처리하는 것으로 Spring에서 Controller를 구현할 수 있습니다. 이러한 이유로 핸들러 어댑터는 스프링 MVC에서 중요한 역할을 담당합니다.

그리고, 질문 내용에서 V3, V4, V5 등의 버전을 언급하신것 같은데요, 해당 내용은 저희가 제공해드리는 강의와는 상관이 없습니다. 따라서 해당 내용에 대해서는 답변을 드리기 어렵습니다.

추가적으로 궁금한 점이 있다면 언제든지 댓글이나 다른 게시물로 문의해주세요. 감사합니다.

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