[우당탕탕 톰캣구현기] 요구사항 정리 및 전체설계

이열음·2022년 9월 26일
0

내가 구현한 소스코드 : https://github.com/Juhyung990122/jwp-dashboard-http

요구사항

우아한 테크코스에서 톰캣구현 미션이 나왔다.
아무것도 없는 상태에서 톰캣을 만들라구요...? 가보자구..
일단 요구사항은 다음과 같다.

  • http://localhost:8080/index.html 페이지에 접근 가능하다.
  • 접근한 페이지의 js, css 파일을 불러올 수 있다.
  • uri의 QueryString을 파싱하는 기능이 있다.
  • HTTP Reponse의 상태 응답 코드를 302로 반환한다.
  • POST로 들어온 요청의 Request Body를 파싱할 수 있다.
  • 로그인에 성공하면 HTTP Reponse의 헤더에 Set-Cookie가 존재한다.
  • 서버에 세션을 관리하는 클래스가 있고, 쿠키로부터 전달 받은 JSESSIONID 값이 저장된다.
  • HTTP Request, HTTP Response 클래스로 나눠서 구현했다.
  • Controller 인터페이스와 RequestMapping 클래스를 활용하여 if절을 제거했다.
  • Executors로 만든 ExecutorService 객체를 활용하여 스레드 처리를 하고 있다

스켈레톤은 여기서 볼 수 있다
https://github.com/woowacourse/jwp-dashboard-http

초기 설계

나는 처음에 크게 설계를 했는데 어떻게 했냐면

요런식으로 설계해봤다. 플로우는 다음과 같다.

  1. Request가 들어온다
  2. PageMapper에서 fileName을 찾아서 FileName enum타입과 맞는 파일을 반환
  3. 파일내의 내용을 byte로 읽어서 Response 내의 body에 넣기
  4. HttpStatus 는 200 고정 주입
  5. Header에는 ContentType enum에서 찾아서 주입 + 만약 쿼리스트링이 있다면 Reqeust내에서 파싱해서 로직 수행

음.. 요구사항은 어찌저찌 채웠지만.. 영 맘에 안드는 구석이 있었다. 맘에 안드는 구석들은 이거!

개선점 도출

여기에 더해서 스켈레톤 보면 구조상 매핑하는애들은 프레임워크나 라이브러리일텐데 어플리케이션 코드와의 의존성이 최소화 되어야 한다고 생각했다. 근데 이 구조라면 아마 어플리케이션 코드안에 라이브러리 코드가 들어가서 매핑을 해야하니까 그거도 개선하고자 했다.

그래서 어떻게 바꿨나?

개선된 설계

뭐 그림만 봐서는 이게 뭔말인지.. 싶기도 하고 딱봐도 엄청 많이 바뀌지 않았는가?ㅎㅎ 그래서 이제부턴 시리즈로 작성하겠다. 크게

  • Reqeust,Response 개선
  • 세션 쿠키 도입
  • 스레드풀 설정
  • Mapping 방식 개선

정도로 이어질듯! 다음 포스팅을 기대해주시라ㅎㅅㅎ

0개의 댓글