Skip to content

4주차 일지 김규원

KyuWon Kim edited this page Jul 23, 2024 · 2 revisions

WIL

프로젝트 구성

image Processor : InputStream 를 받아 Request 로 파싱하고, Response 를 OutputStream 에 써주는 역할

FilterChain : doFilter 메소드로 recursive 하게 타고 내려가며 필터를 거침. 만약에 Filter 에서 HttpResponse 가 써졌다면 다음 단계인 Handler 로 넘어가지 않음

Handler : HttpRequest 를 받아주고 HttpResponse 를 내보내는 역할. Controller 와 같은 역할을 하며 우선순위는 확장자가 붙은 Url 를 처리하는 StaticFileHandler , 정적 파일이 존재하는 곳으로 redirect 해주는 RedirectStaticFileHandler, 동적 요청을 처리하는 DynamicHandler` 순

  • DynamicHandler 만 예외적으로 Adapter 를 두어 필요한 Service 로직을 한 곳으로 모아 쓸 수 있도록 함

Service: Http 의존성이 제거된 구간이며 필요한 코어 로직을 모아둔 공간

Reader : 인터페이스를 갖고 있으며 구현체로 로컬 컴퓨터의 파일을 읽어내는 SystemFileReader 와 프로젝트 내의 정적 파일을 읽는 StaticFileReader

외부 리소스: 세션, 유저 DB 와 정적 파일

인터페이스로 변경사항 줄이기

Service 코드의 경우 미션을 진행함에 따라 변경사항이 많았기 때문에 이를 인터페이스로 분리하여 구현체를 갈아끼우는 방식을 통해 변경점을 줄이고자 하였습니다. 또한 Reader 의 경우 SystemFileReader 와 StaticFileReader 가 공통된 부분이 많았기 때문에 중복을 줄이기 위해 디폴트 메소드와 메소드 오버라이드를 적잘하게 활용하였습니다.

Body Stream 파싱하기

처음에는 stream 를 char[] 로 저장하였으나 binary 파일을 저장하며 깨지는 이슈가 발생하였습니다. 그 외에도 여러 트러블슈팅을 겪은 일주일이었습니다.

  • readNBytes : read 로 받아오면 1바이트 씩 읽어오는 코드에서 문제가 네트워크에서 다 받지도 않았는데 끝났다고 판단하여 끊기는 문제가 발생 → readNBytes 을 하면 while 문을 통해 content-length 만큼 가져옴
  • 사진 \r\n 으로 분리하면 나오는 문제 : byte 를 \r\n 으로 끊어서 가져오면 사진 byte 에서 \r\n 에 해당하는 바이트가 우연히 일치하면 제대로 못 받아내는 문제가 발생할 수 있습니다.
  • BufferedStream 도입 통해 IO 성능 향상

DBMS 만들어보기

처음에 CSV 도입을 하면서 처음부터 파일을 읽어오는 것에 대한 부담 때문에 인덱스를 도입하고자 하였습니다. 모두 만들고보니 사용한 클래스의 인코딩 문제와 데드라인 이슈 때문에 걷어냈는데 많이 아쉬웠던거 같습니다.

요즘어때?

거의 중간점을 향해 가는 것 같습니다. 항상 처음보는 미션을 하고있어 부담스러운 면이 있었는데 그래도 이번 기회에 부족한 지식을 채워가고 있는거 같습니다. 지난 주에는 딱 아프기 직전까지 가본거 같은데 컨디션 관리가 너무나도 중요한거 같습니다. 컨디션이 안 좋으니 효율이 너무 떨어지는거 같았습니다. 못다한 과제가 부담스럽지만 그래도 자는 습관을 들여야될거 같습니다.

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

개인 활동 페이지

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

그룹 활동 페이지

🎤 미니 세미나

미니 세미나

🤔 기술 블로그 활동

기술 블로그 활동

📚 도서를 추천해주세요

추천 도서 목록

🎸 기타

기타 유용한 학습 링크

Clone this wiki locally