Skip to content
DrRivaski edited this page Jul 5, 2024 · 8 revisions

TIL 7/2

알게된 점

  • http request의 첫 번째 라인에 GET과 url이 포함되어 있다는 사실을 알게 됨. 이를 이용하여 http method와 resource의 path를 파싱할 수 있음. 이를 위해 URL parser라는 클래스를 새로 작성함.
  • URL parser를 이용해 얻은 path를 이용하여 파일을 읽어들이는 ResourceHandler 클래스를 작성함. byte array로 읽어들여서 반환한다는 사실을 알게됨. 파일을 읽을 때 FileInputStream으로 읽으면 한 글자씩 읽어오기 때문에 속도가 느림. 이는 BufferedInputStream으로 블록 단위로 읽어오면 해결할 수 있음.
  • Thread를 concurrent 패키지를 이용하여 다룰 수 있다는 것을 알게됨. ExecutorService와 Executors를 이용해 스레드 풀을 생성한 후 작업을 할당하여 작업을 스레드별로 실행할 수 있음. 인터럽트 상황이 발생하면 처리해주어야 함.
  • URL parser의 테스트 코드를 작성함. 비교를 위한 url을 String으로 선언하고 assaertThat 메소드를 이용하여 테스트를 진행함.

좋았던 점

  • git을 오랜만에 사용해서 잊고있던 사용법을 다시 익힐 수 있었음.
  • 당장의 구현에만 집중하지 않고 나중을 생각하며 구현하는 습관이 조금씩 생김

보완할 점

  • 구현에만 신경쓰지 않고 최적화에도 신경써야함. 파일입출력의 경우 블록 단위로 읽어오는 것이 훨씬 빠름.
  • 테스트 코드를 작성해야 함.

TIL 7/3

알게된 점

  • MIME 타입의 정의에 대해 정확하지는 않지만 대강이나마 알 수 있었고 설명할 수 있게됨.
  • MIME 타입의 중요성에 대해 알게 됨.
  • request를 보낼 때 어떤 타입을 받을 수 있는지 Accept 필드에 정의하여 보낸다는 사실을 알게됨.
  • 잘 사용하지 않았던 enum 타입의 사용법에 대해 공부함.

좋았던 점

  • 같은 기능에 대해 여러 구현 방법을 볼 수 있었는데, 다각도로 고민할 수 있어서 좋았음.
  • 브라우저가 서버에게 리소스를 요청했을 때, 서버에서 어떤 과정을 거쳐 파일을 전송하는지 알 수 있었음

보완할 점

  • URL을 파싱할 때 파일만 입력으로 들어오는 것이 아니라는 점을 생각하지 않고 구현했음. 이를 수정해야 함.
  • 또한 파일이나 디렉토리가 아닌 쿼리스트링이 들어오는 점도 생각하지 않음. 수정할 필요가 있음.

TIL 7/4

알게된 점

  • 여러 http method들을 처리하기 위해 if-else문 만으로는 부족하다는 것을 깨달음.
  • 정적 팩토리 메서드를 이용하여 객체를 생성하면 객체를 캡슐화할 수 있고, 매개변수에 따른 수정이 적어진다는 것을 알게됨.
  • 리팩토링을 진행했는데, 생각보다 오랜 시간이 걸린다는 것을 알게 되었고, 설계의 중요성에 대해 깨닫게 됨.

좋았던 점

  • 리다이렉트에 대해 고민해볼 수 있어서 좋았음. 특히 301과 302의 차이에 대해 알 수 있었음.
  • 설계의 중요성에 대해 깨닫게 된 좋은 기회였음.

보완할 점

  • 테스트 코드 작성 시 DisplayName을 알아보기 쉽게 작성할 필요가 있음.
  • 테스트 코드 작성 시 given, when, then 구조를 따라야 함.

TIL 7/5

알게된 점

  • 멀티 스레드 환경에서 싱글톤 패턴을 잘 사용할 수 있는 방법에 대해 알게 되었음. 성능에 저하가 없는 LazyHolder 기법을 이용하는 것이 좋다고 생각함.
  • 회원가입 링크에서 기존에 사용한 값을 그대로 작성하여 보내면 쿼리스트링 없이 전달되는 경우가 있음. 이 때 일반적인 GET처럼 작동하여 원하지 않는 결과가 나올 수 있음.
  • 쿼리 스트링을 파싱할 때, 스트링 그 자체가 쿼리 스트링이라고 생각할 수도 있고 파싱된 Map을 쿼리 스트링이라고 생각할 수도 있음.
  • 로그를 작성할 때 변수로 제대로 된 클래스를 넣어주어야 된다는 것을 알게 되었음.

좋았던 점

  • 객체의 역할과 책임에 대해 더 많은 고민을 해볼 수 있었음. 한 객체가 하나의 역할을 맡도록 최대한 분리하는 것이 가독성 좋은 코드를 만들 수 있다고 생각함.
  • 싱글톤 패턴에 대해 고민해볼 수 있는 좋은 기회였음.
  • 같은 개념에 대해서도 데이터 처리에 대해 다르게 생각할 수 있음을 알게 되었음.

보완할 점

  • http method에 대한 처리를 위해 Distributor 인터페이스와 이를 구현한 클래스를 작성했는데, 인터페이스 내부에 함수를 구현했음. 인터페이스는 보통 구현은 하지 않고 명세를 위한 용도로만 사용하기 때문에 이를 클래스로 수정할 필요가 있어보임.