본문 바로가기

TIL

[TIL 2022-1-26]스프링 MVC + 프로그래머스 공부

DispatcherServlet

DispatcherServlet은 Spring MVC 에서 프론트 컨트롤러 역할을 하는 서블릿 객체이다. 스프링 부트는 어플리케이션을 시작하면 DispatcherServlet 의 urlPatterns 을 "/" 로 등록해서 모든 요청을 맵핑한다. 때문에 서버로 요청이 들어오면, DispatcherServlet 는 요청의 url을 분석해 그 url에 매핑된 핸들러(컨트롤러)를 찾아 실행시킨다.

 

Spring의 핸들러는 개발자가 더 편하게 비지니스 로직에 집중할 수 있는 방향으로 발전 해왔다. 현재는 대부분 @RequestMapping 을 통해 핸들러를 매핑하지만, 과거에 사용했던 스프링 빈의 이름으로 등록하는 등 다양한 방식들이 존재한다.

 

 

HandlerAdapter 

이렇게 새로운 핸들러가 등장할 때마다 스프링의 프론트 컨트롤러인 DispatcherServlet을 수정할 수는 없기 때문에 어댑터 패턴을 사용하여 수정없이 확장 가능하도록 했다.  때문에 새로운 형태의 핸들러를 만들면 이 핸들러를 실행시킬 수 있는 HandlerAdapter인터페이스의 구현체를 개발하고 등록한다. DispatcherServlet는 초기화될 때, 스프링 컨테이너에서 등록된 HandlerAdapter 객체를 모두 찾아 리스트에 저장해 놓고, HTTP 요청이 들어오면 url과 매핑된 핸들러에 따라 적절한 HandlerAdapter 구현체를 찾아 핸들러를 실행시킨다.

DispatcherServlet에서 HandlerAdapter 리스트를 초기화하는 메서드 

 

HTTP 요청에 대한 Spring MVC 흐름

HTTP 요청이 발생하면 위에서 설명했듯이 가장먼저 DispatcherServlet이 호출된다. 그리고 DispatcherServlet의 부모 HttpServlet의 service를 오버라이드한 메소드가 실행된다. 이 메소드는 결국 doDispatch 메서드를 실행시키는데, 여기서

요청에 대한 핸들러를 찾고, 이 핸들러에 대한 어댑터를 찾아 handle 메서드를 실행시킨다. 이 handle 메서드는 ModelAndView 객체를 반환하고 이를 통해 뷰를 찾아 렌더링한다.

 

이에 대해 자세한 내용은 내일 마저 정리해 보고 하나의 게시글로 정리하도록 하겠다.

 

프로그래머스 코딩테스트 연습 - [1차] 다트 게임

https://programmers.co.kr/learn/courses/30/lessons/17682

 

코딩테스트 연습 - [1차] 다트 게임

 

programmers.co.kr

문제가 길어지니 어떻게 풀어야지 하는 고민시간이 너무 길어지고 잘못 해석하는 일이 생겼다. 또 결국 문자열 처리에 대한 문제였는데 정규식을 어떻게 활용해야하는지 도저히 생각나지않아서 결국 String 메소드들로만 문제를 풀었다.

내일 다시한번 정규식을 공부해서 문제를 풀어보고 정규식 공부내용을 정리해 봐야겠다.