회고/코드스쿼드 - Java 과정

[TIL] 코드스쿼드 2022 백엔드 53일차 회고(11주차)

jwKim96 2022. 3. 24. 01:11

오늘은 무슨 일이?

오늘은 일찍 일어나서 잠도 좀 깨고, 아침에 잠시 산책을 다녀왔습니다.
상쾌한 공기도 마시고, 움직이면서 잠을 깨면서 하루를 시작하니 컨디션이 좋았습니다.

회고에 대해

아침 스크럼중에 각자 회고에 대한 얘기가 나왔는데요.
저는 개인적으로 회고를 작성하는데 동기부여를 잃어서 한동안 성실히 작성하지 못했습니다.
그래서 다른분들은 회고를 어떻게 활용하시는지 여쭤보았습니다.
반스는 아침 시작전에 회고를 읽고 시작하는것도 괜찮은 방법이라고 말씀해주셨는데요.
생각해보니 회고를 작성하기만 하고, 지난 회고를 잘 읽지 않았던 것 같습니다.
앞으로는 저도 하루의 시작전에 지난 회고를 읽으며 시작해봐야겠습니다..!

서블릿 & 리플렉션

루시드와 2단계 미션을 구현하면서, 어제 생각했던 구조를 코드로 옮겨봤습니다.

비즈니스 로직은 HttpServlet 이라는 추상 클래스를 상속하여 구현하고, 해당 구현체는 RequestMapping 에 등록합니다.
그리고 매핑된 URL 로 요청이 온 경우 해당 구현체 클래스를 리플렉션을 통해 동적으로 생성하고, 정해진 로직을 실행시킵니다.

public class Dispatcher {

    // 생략 ...

    public Response handleRequest(RequestLine requestLine) throws Exception {
        Class<? extends HttpServlet> servletClass = RequestMapping.findHandlerMethod(requestLine.getUrl())
            .orElseThrow(() -> new IllegalStateException("Mapped servlet could not be found"));

        Request request = Request.of(requestLine);
        Response response = new Response();

        Constructor<? extends HttpServlet> constructor 
                = servletClass.getConstructor(Request.class, Response.class);

        HttpServlet httpServlet = constructor.newInstance(request, response);

        return httpServlet.service();
    }
}

이를 통해 얻을 수 있는 장점은 다음과 같습니다.

  • Dispatcher 클래스가 HttpServlet 의 구현체를 몰라도됨(약한 참조 관계)
  • HttpServlet 의 구조를 강제할 수 있음

하지만 단점도 있습니다.

  • URL 처리를 위해, 하나의 클래스(Servlet)를 만들어야 함
  • Controller 형태와는 다르게, 관련된 기능이 여러 클래스들에 분산됨

그러나 단점 중에서 언급한 Controller 형태는 구조를 강제하기 힘들고, 이에 대응하려면 거의 프레임워크 레벨로 구현해야 합니다.
그래서 Servlet 구조를 선택하여 구현하였습니다.

인상깊었던 점은?

  • 오늘은 일찍 일어나서 산책도 다녀오고, 정규시간 시작전에 잠을 깨고있어서 컨디션이 좋았습니다.

아쉬웠던 것은?

  • 저녁 먹고 쉬는시간이 너무 길어서, 시간을 효율적으로 쓰지 못한것 같습니다.