작성
·
12
·
수정됨
0
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)
[질문 대상]
영상 기준:03:00 ~
pdf 기준:6.스프링 MVC - 기본 기능.pdf
의 p.48
RequestMappingHandlerAdapter 동작 방식 그림
[질문 내용]
안녕하세요, 영한님.
제가 가진 '호출'이라는 행위의 동작 방식과 강의(영상 또는 pdf)에서 설명해주신 방식에 괴리가 있어 둘 중 어떤 방식이 적절한 것인지 질문드립니다.
제가 이해한 방식(방식1)
RequestMappingHandlerAdapter
(이하 핸들러 어댑터)는 Controller
(이하 컨트롤러)를 실행(호출)해야 한다.
그런데 클라이언트에게 받은 데이터를 그대로 넘기면 컨트롤러가 받아야 되는 파라미터에 맞지 않는다. 따라서 ArgumentResolver
(이하 리졸버)를 호출해서 파라미터에 맞게 변환(빨강, 파랑)해달라고 한다.
핸들러 어댑터는 리졸버로부터 변환된 빨강, 파랑을 받았다.
핸들러 어댑터는 빨강, 파랑을 넘기며 컨트롤러를 호출한다.
강의에서 설명한 방식(방식2)
핸들러 어댑터는 컨트롤러를 호출하기 전, 리졸버에게 빨강, 파랑 파라미터를 요청한다.
(리졸버가 작업 모두 완료했다고 가정) 핸들러 어댑터가 컨트롤러를 호출한다. 이때 리졸버가 빨강, 파랑을 컨트롤러에게 넘겨준다.
-> 이 부분이 '컨트롤러 호출은 핸들러 어댑터가 하는데 중간에 리졸버가 껴서 파라미터만 넘겨준다'로 받아들여지는데 제가 기존에 알고 있던 '호출' 메커니즘과는 다르다고 생각되어서요.
제가 영한님이 말씀하신 흐름 자체를 잘못 이해한 건지, 아니면 방식1이 적절한 것인지 질문드립니다!
관련 그림
답변 3
0
질문을 남기면서 생각을 정리하고, 해당 부분 영상을 다시 돌려보니 영한님께서도 방식2가 아니라 방식1로 설명을 하셨다는 판단이 드네요!
처음에 리졸버 -> 컨트롤러로 가는 점선 화살표로 인해 헷갈렸습니다.
0
글을 다 작성하고 나니 새로운 흐름(방식3)도 생각이 드는데요.
방식3
(이 강의 이전 그림 기반의 흐름) 핸들러 어댑터 -> 컨트롤러 호출
(현재 흐름) 핸들러 어댑터 -> 리졸버 -> 컨트롤러 . 이렇게 중간에 리졸버를 껴서 호출
방식1, 2, 3 중에 어떤 것이 적절한 흐름인지 궁금하네요 ㅠ
0
안녕하세요, 인프런 AI 인턴입니다. dev.rudevico 님의 질문에 답변드립니다.
RequestMappingHandlerAdapter
호출 과정:RequestMappingHandlerAdapter
는 요청을 처리하는 중요한 책임을 맡고 있는 스프링 구성 요소 중 하나입니다. 컨트롤러를 호출하기 이전과 이후의 여러 작업을 핸들링합니다. 귀하의 질문에서 전달된 혼란을 해결하기 위해, 각 단계에 대해 좀 더 명확한 설명을 드리겠습니다.
핸들러 어댑터의 요청 처리 준비:
RequestMappingHandlerAdapter
는 들어오는 요청을 해석하여 적절한 컨트롤러 메서드를 찾아냅니다. 이 과정에서 필요한 파라미터들을 ArgumentResolver
에게 요청합니다.ArgumentResolver
의 역할:
ArgumentResolver
는 필요한 파라미터를 현재 요청/컨텍스트에서 추출하여 적절한 형태로 변환합니다(예: @RequestParam
, @ModelAttribute
등).컨트롤러 호출:
RequestMappingHandlerAdapter
는 해당 컨트롤러 메서드를 호출하게 됩니다. 이 호출 과정은 실제로 리플렉션을 사용하여 메서드를 동적으로 실행합니다.결과 처리 후 반환:
ReturnValueHandler
가 처리하여 클라이언트에 알맞은 형태로 반환하게 됩니다.RequestMappingHandlerAdapter
의 전체 흐름과 관련된 내용이 잘 설명되어 있습니다.이해에 도움이 되셨길 바랍니다. 추가적인 질문이 있으시면 주저하지 말고 언제든지 말씀해 주세요.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.