171219-TIL

Reading time ~2 minutes

오늘 한일

- MVC 프레임워크 3단계 실습

  • 요구사항 1 - 애노테이션 기반 MVC 프레임워크 (완료)

    • reflections.getTypesAnnotatedWith(Controller.class) : Controller 애노테이션이 사용된 클래스 추출

    • method.getAnnotation(RequestMapping.class) : RequestMapping가 사용된 자바 메소드에 URL과 Request 메소드 정보를 추출

    • Map<HandlerKey, HandlerExecution> : URL과 Request 메소드 정보를 가지고 있는 HandlerKey와 클래스와 자바 메소드를 가지고 있는 HandlerExecution

    • 이후 클라이언트로부터 요청이 오면 요청 URL과 메소드를 이용하여 HandlerKey 객체를 만들어 해당 핸들러 메소드 호출

  • 요구사항 2 - 레거시 MVC와 애노테이션 기반 MVC 통합 (진행중)

    • 힌트 1 : 기존 RequestMapping를 LegacyHandlerMapping로 변경

    • 힌트 2 : DispatcherServlet에서 LegacyHandlerMapping, AnnotationHandlerMapping 모두 초기화


오늘 느낀점

  • 요구사항 1을 하면서 생각보다 어려운 것 없는거 같은데 늦어진 느낌이다. 어려운 느낌이 적은 이유는 사실 힌트를 참고하면서 하다보니 그런거 같은데 늦어진 원인은 힌트를 안보고 하려다 늦어진거고, 쉬운 원인은 힌트를 보는것이 문제이다.
    그 간극을 줄일려고 조절하고 있는데 이번 실습 같은 경우는 힌트 하나 없이 진행 해 볼 능력은 부족한거 같다. 그런 부분에서 아쉬운게 같은 단계를 진행하는 동료가 있었으면 힌트가 아닌 논의를 하면서 진행(혹은 일정 논의 후 좀더 빠르게 힌트 참조 여부를 결정 할 수도 있을것이다) 해 볼수 있었을텐데 그럴 동료가 없는게 살짝 아쉽다. 그러다보니 힌트를 더 볼까 말까 갈팡질팡 하다가 더 늦어지는 경향도 있는것 같다.(개인적인 욕심으로 힌트를 안 보고 싶어서 그런면도 있고…)

  • 솔직히 이번처럼 살짝 힌트에 끌려 다니는 느낌이 들때는 테스트 코드를 제대로 못 짠다…혹은 자주 사용 안하던 set같은게 나오던지 할때는 말이다. 이번같은 경우는 아예 못 짤것 같진 않으니 일부 진도가 더 진행된 다음 빠진 테스트 코드를 추가해야 겠다.(이번 단계가 늦어지고 있는 느낌이라 구현자체가 더 신경쓰인다)

  • 아래와 같이 기본 메소드가 존재하는 인터페이스가 있다고는 들었는데 드디어 봤다.

    @Target({ ElementType.METHOD, ElementType.TYPE })
    @Retention(RetentionPolicy.RUNTIME)
    public @interface RequestMapping {
        String value() default "";
    
        RequestMethod method() default RequestMethod.GET;
    }
    

    생각보다는 구조 자체는 간단한 느낌이다. 추가로 아래에

    RequestMapping rm = method.getAnnotation(RequestMapping.class);
    ---
    @RequestMapping(value = "/users", method = RequestMethod.POST)
    

    getAnnotation()에서 애노테이션에 사용된 값을 이용해 RequestMapping 구현체를 만드는것 같긴한데, 해당 메소드의 내부를 보려고 했는데 한두번씩 만나고 있는 아래의 원인으로 내부 구현물은 못봤다.

    source_not_found

    원인도 분명하게 적혀 있어서 이전부터 인터넷에서 찾은 방법들을 수행 해 봤는데 왠지 해결이 안된다. 정말 중요한 부분들은 아니여서 매번 아쉽지만 넘어갔는데 문제 해결이 안되는 것도 그렇고 제대로 분석자체도 못하는 것 같아서 찝찝하다. 올해가 가기전엔 확실히 해결 해 둬야겠다.

  • 요구사항 2는 힌트 1과 2의 중간 정도 단계인데 어느정도만 작업하면 힌트3까지 끝날것 같다. 오늘 마무리하고 자고, 내일 일이 좀 있는지라 저녁때쯤부터는 피드백 내용도 참조하여 리팩토링을 진행하고 목요일쯤 pr을 보내지 않을까 싶다. 이후 있는 “Spring MVC 실습” 내용이 많아 보이진 않으니 일단은 괜찮을 듯 싶다.


내일 할일

  • MVC 프레임워크 3단계 실습 마무리

    • 요구사항 2 - 레거시 MVC와 애노테이션 기반 MVC 통합

    • 프레임워크와 라이브러리의 차이점 발표자료 준비