{"comment":{"url":"https://api.github.com/repos/mvmaniac/basic-servlet/comments/29131464","html_url":"https://github.com/mvmaniac/basic-servlet/commit/88e75e556495b9633a721d844105127441c02924#commitcomment-29131464","id":29131464,"user":{"login":"mvmaniac","id":11344391,"avatar_url":"https://avatars3.githubusercontent.com/u/11344391?v=4","gravatar_id":"","url":"https://api.github.com/users/mvmaniac","html_url":"https://github.com/mvmaniac","followers_url":"https://api.github.com/users/mvmaniac/followers","following_url":"https://api.github.com/users/mvmaniac/following{/other_user}","gists_url":"https://api.github.com/users/mvmaniac/gists{/gist_id}","starred_url":"https://api.github.com/users/mvmaniac/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mvmaniac/subscriptions","organizations_url":"https://api.github.com/users/mvmaniac/orgs","repos_url":"https://api.github.com/users/mvmaniac/repos","events_url":"https://api.github.com/users/mvmaniac/events{/privacy}","received_events_url":"https://api.github.com/users/mvmaniac/received_events","type":"User","site_admin":false},"position":null,"line":null,"path":null,"commit_id":"88e75e556495b9633a721d844105127441c02924","created_at":"2018-05-25T15:41:29Z","updated_at":"2018-05-25T15:41:29Z","author_association":"OWNER","body":"## 애노테이션 기반의 MVC 프레임워크 구현\r\n\r\n**1. @Controller, @RequestMapping 애노테이션 추가**\r\n\r\n**2. @Controller 애노테이션이 설정된 클래스를 스캔하는 ControllerScanner 클래스 추가**\r\n- reflections 라이브러리를 사용\r\n\r\n**3. @RequestMapping 애노테이션 설정을 활용한 매핑**\r\n- ControllerScanner 클래스에 찾은 컨트롤러 클래스의 @RequestMapping 애노테이션 설정을 기반으로 매핑\r\n- 매핑은 이전 MVC 프레임워크와 같이 Map을 활용\r\n- 다른 점은 Map의 키로 사용되는 값이 요청 URL과 더불어 HTTP 메소드 조합으로 구성\r\n- 요청 URL과 HTTP 메소드 정보를 가지는 HandlerKey 라는 클래스를 추가\r\n- Map의 키로 활요한기 위해 hashCode(), equals() 메소드를 반드시 구현\r\n- Map의 값은 @RequestMapping 애노테이션이 설정되어 있는 메소드 정보를 가짐\r\n- 즉, 메소드가 위치하는 클래스의 인스턴스 정보와 java.lang.reflect.Method 정보를 가지고 있어야 하며, 이 정보를 가지는 클래스를 HandlerExecution 를 추가\r\n- HandlerKey, HandlerExecution 을 연결(Mapping) 하는, 매핑 초기화 작업을 하는 클래스인AnnotationHandlerMapping 클래스를 추가\r\n\r\n**4. 클라이언트 요청에 해당하는 HandlerExecution 반환**\r\n-  클라이언트 요청에 해당하는 HandlerExecution 을 조회하는 getHandler() 메소드 추가\r\n\r\n**5. DispatcherServlet과 AnnotationHandlerMapping 통합**\r\n- 기존 RequestMapping과 AnnotationHandlerMapping을 모두 지원\r\n- 이 둘을 일관된 인터페이스를 구현하도록 통합한 구 관리하는 것이 향후 확장성이 좋음\r\n- 두 Mapping 클래스를 추상화한 인터페이스인 HandlerMapping 을 추가\r\n- RequestMapping 클래스는 LegacyHandlerMapping 클래스로 이름을 변경\r\n- DispatcherServlet 에서 초기화가 끝난 후 HandlerMapping을 List로 관리하여 요청 URL과 HTTP 메소드로 해당하는 컨트롤러를 찾아 컨트롤러가 존재할 경우 컨트롤러에게 작업을 위임\r\n- "}}
{"actor":{"display_login":"mvmaniac"}}