인프런 커뮤니티 질문&답변

11 1님의 프로필 이미지
11 1

작성한 질문수

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

핸들러 매핑과 핸들러 어댑터

DispatcherServlet에서 핸들러와 핸들러 매핑의 동작 방식

해결된 질문

작성

·

303

·

수정됨

0

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

[질문 내용]

이전에 MVC 프레임워크 v5를 직접 만들었을 땐, 스프링이 실행됨과 동시에 다음 코드처럼 프론트 컨트롤러의 handlerMappingMap에 핸들러들이 자동으로 등록되었었습니다. 즉, 클라이언트로부터 요청이 오기도 전에 '핸들러 매핑 맵'에 저장되는 거로 이해했습니다.

 

private void initHandlerMappingMap() {
    handlerMappingMap.put("/front-controller/v5/v3/members/new-form", new MemberFormControllerV3());
    handlerMappingMap.put("/front-controller/v5/v3/members/save", new MemberSaveControllerV3());
    handlerMappingMap.put("/front-controller/v5/v3/members", new MemberListControllerV3());

    handlerMappingMap.put("/front-controller/v5/v4/members/new-form", new MemberFormControllerV4());
    handlerMappingMap.put("/front-controller/v5/v4/members/save", new MemberSaveControllerV4());
    handlerMappingMap.put("/front-controller/v5/v4/members", new MemberListControllerV4());
}

 

그러면 실제 DispatcherServlet에서도 위와 비슷한지, 다른지, 정확히 어떻게 동작하는지 궁금합니다. 스프링 부트가 실행되자마자 '핸들러 매핑'들은 스프링 빈으로 등록된다고 이해했습니다. 다만 '핸들러'가 어떤지는 헷갈립니다.

 

  1. 스프링 부트가 실행됨과 동시에 '핸들러(컨트롤러)'들이 각각에 해당되는 '핸들러 매핑' 내부에 저장되는 건지,

     

    아니면

  2. '핸들러'들이 '핸들러 매핑'에 처음부터 저장되는 게 아니라, 클라이언트로부터 요청이 오면 그때 '핸들러 매핑'이 스프링 컨테이너에서 핸들러를 '찾아 주는' 건지.

    아니면

  3. '핸들러 매핑' 인터페이스마다 방식이 다른 건지

 

궁금합니다.

 

 

 

+) 한 가지 더 궁금한 점이 있습니다.

애노테이션 기반의 컨트롤러들은 반드시 스프링 빈으로 등록되어야 한다고 이해했습니다.

그런데 Controller 인터페이스를 구현한 컨트롤러나 HttpRequestHandler 컨트롤러들은 강의에선 BeanNameUrlHandlerMapping을 이용하기 위해 스프링 빈으로 등록되기는 했지만, BeanNameUrlHandlerMapping를 이용하지 않는다면 꼭 스프링 빈으로 등록할 필요는 없는 건가요? 컨트롤러들이 모두 스프링 빈일 필요는 없는 건지 궁금합니다.

답변 1

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 11 1님

스프링 부트가 실행되는 시점에 필요한 핸들러와 매핑 정보들을 다 올려둡니다.

그리고 요청이 오면 핸들러 매핑을 통해서 필요한 핸들러를 찾아옵니다.

우리가 작업했던 내용과 비슷하다고 이해하시면 됩니다.

 

추가로 질문 주신 부분은 반드시 스프링 빈으로 등록하지는 않아도 됩니다. 다만 이후에 설명하는 스프링이 제공하는 @Controller 같은 기능들은 스프링 빈으로 등록해야 스프링이 이해할 수 있기 때문에, 스프링 빈으로 등록해야 정상 작동합니다.

 

참고로 학습을 할 때 이런 부분들을 하나하나 너무 깊이있게 파는 것 보다는, 조금 더 큰 그림에서 강의를 전체적으로 보시는 것이 더 도움이 되실거에요. 강의를 전체적으로 듣고나면 어느정도의 전체적인 그림도 자연스럽게 완성이 되니까요 🙂

감사합니다.

11 1님의 프로필 이미지
11 1
질문자

답변 감사합니다. 전 모르는 건 처음부터 확실히 이해하고 넘어가는 걸 좋아하긴 하는데, 그래서 그런지 속도도 느리고 효율도 떨어지는 것 같긴 하네요.. 감사합니다.

11 1님의 프로필 이미지
11 1

작성한 질문수

질문하기