• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

getHandler() 에서의 로직과 그 이후

24.03.22 22:38 작성 24.03.22 22:55 수정 조회수 102

0


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

[질문 내용]

안녕하세요. doDispatcher에서의 getHandler() 코드를 보다가 제가 나름대로 정리해본 것이 맞는 지 질문드립니다.


한 url 에서 요청이 오면, 핸들러 맵핑 조회에서 1순위가 RequestMappingHandlerMapping 이므로, 먼저 getHandler()의 while 문 내부 HandlerMapping mapping 에 RequestMappingHandlerMapping이 대입된다.

// 스프링 getHandler() 코드 일부 발췌

if (this.handlerMappings != null) {
    Iterator var2 = this.handlerMappings.iterator();

    while(var2.hasNext()) {
        HandlerMapping mapping = (HandlerMapping)var2.next();
        HandlerExecutionChain handler = mapping.getHandler(request);
        if (handler != null) {
            return handler;
        }
    }
}

 

다음 줄의 mapping.getHandler(request)를 통해 @Controller가 붙은 클래스 중, 요청 url와 맞는 @RequestMapping(”url”)이 붙여진 메소드를 보유한 클래스를 핸들러로 가져온다.

디스패처서블릿이 이 핸들러와 맞는 어댑터(RequestMappingHandlerAdapter)를 찾아오고,

어댑터.handle() 을 통해 @RequestMapping(”url”)이 붙여진 메소드가 실행된다.

 

제가 생각한것이 맞는 지 궁금하여 질문드립니다.

감사합니다.

 

답변 2

·

답변을 작성해보세요.

0

David님의 프로필

David

2024.03.24

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

전반적으로 잘 이해하고 계신 것 같습니다:)

감사합니다.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.03.22

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

김지호님의 질문과 관련해, 핸들러 매핑과 핸들러 어댑터에 대한 동작을 설명하며 getHandler() 메서드의 로직과 그 이후의 과정에 대해 질문하신 것으로 이해했습니다. 김지호님의 질문이 “핸들러 매핑과 핸들러 어댑터”의 동작 과정을 이해하는 데 초점이 맞춰져 있는 것 같습니다.

제공된 정보에 따르면, “제가 생각하고 있는 동작과정 피드백을 부탁드립니다.” 라는 제목의 질문에서 비슷한 주제에 대한 확인을 요청하는 인사이트와 답변이 있었습니다. 이 답변은 스프링 MVC의 DispatcherServlet에서 getHandler() 메서드의 실행 과정 및 핸들러 매핑과 핸들러 어댑터의 작동 원리에 대해 구체적인 설명을 제공합니다.

제가 생각하고 있는 동작과정 피드백을 부탁드립니다. 질문에서 김영한 강사님은 핵심적인 동작 과정에 대한 정확한 설명과 피드백을 제공하셨습니다. 이는 김지호님의 현재 질문 내용과 매우 유사한 주제를 다루고 있어, 김지호님의 질문에 대한 보다 명확한 이해와 답변을 제공할 수 있을 것으로 기대됩니다.

질문에 있어서, 맞는 핸들러를 찾는 과정과 이후 핸들러 어댑터를 통한 로직 실행에 대한 김지호님의 이해는 기본적으로 정확해 보입니다. RequestMappingHandlerMapping이 우선순위를 가지며, URL 매칭을 통해 해당되는 핸들러(Controller)를 찾고, 그에 맞는 HandlerAdapter(RequestMappingHandlerAdapter)가 핸들러의 메서드(@RequestMapping으로 매핑된 메서드)를 실행한다는 개념입니다.

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