우아한 테크코스 WAS 미션 설계

디디·2020년 9월 18일
3

우테코에서 주어진 첫번째 Level4 미션. WAS 구현하기.

고민했던 내용들을 정리해보도록 하겠습니다.

책임의 분리

가장 먼저 생각했던 건 WAS가 정확하게 무슨 일을 해주느냐? 였습니다.

  1. Socket으로 부터 들어온 요청을 읽어 요청 객체를 생성한다.
  2. 요청 객체와 사용자 코드를 바탕으로 적절한 Handler를 찾는다.
  3. 요청 객체와 Handler를 바탕으로 적절하게 Parameter를 Binding 한다.
  4. Handler와 Parameter를 바탕으로 Handler를 실행한다.
  5. Handler 실행 결과를 통해 응답 객체를 생성한다.
  6. 응답 객체를 바탕으로 적절한 View를 찾는다.
  7. 응답 객체와 View를 바탕으로 Socket을 통해 응답을 반환한다.

가장 먼저 7가지 책임이 떠올랐고, 해당 책임을 RequestHandler에서 생성 및 수행하도록 리팩토링 해봤습니다.

  1. Socket의 Reader로 읽은 정보를 통해 ServletRequest 생성
  2. 해당 Request의 Path를 통해 View가 존재하면 Mapping 과정 생략 후 즉시 View Resolving
  3. 사용자 Controller를 바탕으로 Handler Mapping
  4. Handler와 MessageConverter를 통해 Handler 실행
  5. ServletResponse를 Socket Output으로 전송


잘뜹니다.

하지만 객체지향의 설계원칙에 따라 부족한 부분에 대해서 생각해봅시다.

  1. 객체 생성과 연관관계를 설정하는 책임과, 각 객체들을 실행하는 컨텍스트 책임, 둘 다 RequestHandler가 해주고 있습니다. 이 책임은 분리되어야 합니다.
  2. 각 객체들이 클래스 의존관계를 가지고 있습니다. 상황에 따라 모두 변할 수 있으므로 해당 클래스들을 모두 인터페이스 의존관계를 통해 변경에 유연한 구조를 가져야 합니다.
  3. view가 있는 요청과 없는 요청을 판단하고, 그에 따라 결과를 반환하는 로직이 RequestHandler에 있습니다. RequestHandler는 각 객체들을 실행하는 컨텍스트 역할을 해야합니다.

profile
식빵 고양이 디디

1개의 댓글

comment-user-thumbnail
2020년 9월 20일

👍👍

답글 달기