Skip to content

2주차 수요일 그룹 5

hek edited this page Jul 4, 2024 · 9 revisions

박민지

[구현 내용]

  • JVM의 Runtime.addShutdownHook()을 사용하여 gracefully stop을 구현하였습니다.
  • Request에 Content-length 필드가 들어오지 않을 수도 있어, 소켓에서 데이터를 읽을 때, Content-length가 아닌, Socket inputstream 데이터 기반 읽도록 구현하였습니다.
  • 빠르게 테스트하기 위해 파이썬 스크립트를 사용하여 크롬을 사용하는 테스트 환경을 만드는 테스트 기능을 구현하였습니다.
  • Exception 처리 시 중복 코드를 줄이기 위해 catch로 각 Exception 타입을 잡아 처리하는 대신 Exception으로 잡고 if문으로 처리하도록 구현하였습니다.

[배운 점]

  • 각 절차를 Filter로 구현하신 동근님의 코드를 보고 Filter로 구현하면 코드 구조가 어떻게 되는지 배울 수 있었습니다.
  • Socket을 확장해서 테스트용 소켓을 만든 세민님을 보고 모킹을 직접 구현해보자라는 생각을 했습니다.
  • 클래스 로더를 이용해 resource 파일의 절대 경로를 가져오는 방법을 배웠습니다.

[후기]

  • 위 외에도 구현 상 고민하신 흔적이 많이 보여서 동기 부여도 되고, 많이 배울 수 있었습니다.
  • 다들 코드를 정말 잘 짜시는 것 같아서 많이 보고 배워야겠습니다.
  • 다들 감사합니다!

최세민

함께 고민했던 점

  • 공통헤더를 객체로 분리해야 할지에 대해서 고민했습니다. 만약 CommonHeader와 같이 코드를 분리하게 되면 오히려 구조가 복잡해질 것 같다고 의견을 말씀해주셔서 Map으로 구현한 현 상태를 유지하려고 합니다. 대신 디렉티브가 여러개 일 때 파싱하는 것에 더 집중해보려고 합니다. 추가로 RequestLine, ResponseLine도 객체로 분리했는데 굳이 나눌 필요가 없다고 생각되어 합쳐야 겠다고 결론을 내렸습니다.
  • favicon.ico 파일을 읽을 때 깨지는 현상을 겪은 분들이 많았습니다. 파일을 String으로 만들어서 getBytes() 으로 읽었을 때 데이터값이 변하는 것을 발견했습니다. 데이터 인코딩 방식에 따라서 문제가 생기는 것 같은데 정확히 파악하지 못해 이 부분도 테스트해보려고 합니다.

배운, 배울 점

  • Http 규약에 대해서 RFC문서를 참고하며 명확하게 구현하려고 노력한 흔적들이 보여서 감탄했습니다. 저는 RequestHeader에서 Accept, Accept-Charset 헤더를 처리하는 부분을 고려하지 않았는데 이번주 안에 해당 부분을 구현해보려 합니다.
  • Router를 구현한 부분이 인상깊었습니다. 실제로 파일 경로만 uri로 전달되는 것이 아니라, 다양한 요청이 올 수 있어서 저도 그런 요청에 대해 동적으로 매핑할 수 있는 방법에 대해 고민해보려 합니다.
  • 그룹원들이 톰캣과 유사한 형태로 구조를 설계하거나 로그인과 관련된 로직을 필터로 구현하신 분도 있었습니다. 톰캣과 스프링에 대해 깊이 이해하고 계신것이 느껴져서 인상깊었습니다.

홍은기

  • filter 형태로 비즈니스 로직 작성하여 흐름 분기하는 것이 인상 깊었습니다.
  • addShutdownHook을 사용하면 자원을 닫은채로 안정적으로 서버를 닫을 수 있다는 것을 알았습니다.
  • HttpResponseBuilder 클래스 중 file 객체를 생성자에서 file을 받지 않고 setter등을 통해 file을 선택적으로 받는 것이 더 좋을 것 같습니다.
  • 전반적으로 다른 팀원분들이 톰캣의 구조와 유사하게 구현하려고 하신 것 같았으나 톰캣의 구조를 잘 몰라 많은 내용을 이해하진 못했습니다.
  • RFC 공식 문서를 참고하셔서 요구사항을 훌륭하게 만족하신 것 같습니다. 공식 문서 읽기의 중요성을 알았습니다.

유동근

구현 내용

  • Servlet의 Filter 개념을 적용하여 요청 처리에 대한 흐름을 구현
  • 현재 저의 구현 진행 사항은 3단계 입니다.

배운 내용

  • 클래스 로더를 통해서 리소스 파일의 경로를 추출하는 것.
  • java의 system property를 통해서 리소스 파일의 경로를 추출하는 것.
  • addShutDownHook을 통해서 우아한 종료를 구현하는 방법.

후기

  • 파서 클래스를 통해서 파싱을 위한 책임을 부여해서 사용한 부분을 적용하면 좋겠다는 생각이 들었습니다.
  • http의 스펙을 어떻게 구현할지에 대한 고민을 나눌 수 있어서 좋았습니다.
  • 서버를 추상화해서 사용하신 분의 코드를 보고 하나의 WAS에서 여러개의 서버를 가동하는 구현에 대해서 생각할 수 있어서 좋았습니다.

김민주

  • Filter를 구현하여 MediaType을 구현한 부분이 인상적이였습니다.
  • Test에서 Selenium ChromeDriver를 연동했던 부분이 인상적이였습니다.
  • Socket의 테스트에 대해 고민이 많았는데 Socket 상속해서 Test용 Socket만들어서 테스트하면 좋을 것 같아요
  • String을 쓰냐, Byte[]로 할 것인지 아직 고민됩니다.
  • Runtime addShutdownHook으로 graceful shutdown 시 socket 회수 가능한 점이 좋았습니다.
  • InputStream Outputsream은 왜 써야하는지 아직 모르겠다,,→ 앞으로 공부해야 할 것 같아요

👼 개인 활동을 기록합시다.

개인 활동 페이지

🧑‍🧑‍🧒‍🧒 그룹 활동을 기록합시다.

그룹 활동 페이지

🎤 미니 세미나

미니 세미나

🤔 기술 블로그 활동

기술 블로그 활동

📚 도서를 추천해주세요

추천 도서 목록

🎸 기타

기타 유용한 학습 링크

Clone this wiki locally