-
Notifications
You must be signed in to change notification settings - Fork 0
[Week1 DrRivaski]
DrRivaski edited this page Jul 5, 2024
·
8 revisions
- 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을 오랜만에 사용해서 잊고있던 사용법을 다시 익힐 수 있었음.
- 당장의 구현에만 집중하지 않고 나중을 생각하며 구현하는 습관이 조금씩 생김
- 구현에만 신경쓰지 않고 최적화에도 신경써야함. 파일입출력의 경우 블록 단위로 읽어오는 것이 훨씬 빠름.
- 테스트 코드를 작성해야 함.
- MIME 타입의 정의에 대해 정확하지는 않지만 대강이나마 알 수 있었고 설명할 수 있게됨.
- MIME 타입의 중요성에 대해 알게 됨.
- request를 보낼 때 어떤 타입을 받을 수 있는지 Accept 필드에 정의하여 보낸다는 사실을 알게됨.
- 잘 사용하지 않았던 enum 타입의 사용법에 대해 공부함.
- 같은 기능에 대해 여러 구현 방법을 볼 수 있었는데, 다각도로 고민할 수 있어서 좋았음.
- 브라우저가 서버에게 리소스를 요청했을 때, 서버에서 어떤 과정을 거쳐 파일을 전송하는지 알 수 있었음
- URL을 파싱할 때 파일만 입력으로 들어오는 것이 아니라는 점을 생각하지 않고 구현했음. 이를 수정해야 함.
- 또한 파일이나 디렉토리가 아닌 쿼리스트링이 들어오는 점도 생각하지 않음. 수정할 필요가 있음.
- 여러 http method들을 처리하기 위해 if-else문 만으로는 부족하다는 것을 깨달음.
- 정적 팩토리 메서드를 이용하여 객체를 생성하면 객체를 캡슐화할 수 있고, 매개변수에 따른 수정이 적어진다는 것을 알게됨.
- 리팩토링을 진행했는데, 생각보다 오랜 시간이 걸린다는 것을 알게 되었고, 설계의 중요성에 대해 깨닫게 됨.
- 리다이렉트에 대해 고민해볼 수 있어서 좋았음. 특히 301과 302의 차이에 대해 알 수 있었음.
- 설계의 중요성에 대해 깨닫게 된 좋은 기회였음.
- 테스트 코드 작성 시 DisplayName을 알아보기 쉽게 작성할 필요가 있음.
- 테스트 코드 작성 시 given, when, then 구조를 따라야 함.
- 멀티 스레드 환경에서 싱글톤 패턴을 잘 사용할 수 있는 방법에 대해 알게 되었음. 성능에 저하가 없는 LazyHolder 기법을 이용하는 것이 좋다고 생각함.
- 회원가입 링크에서 기존에 사용한 값을 그대로 작성하여 보내면 쿼리스트링 없이 전달되는 경우가 있음. 이 때 일반적인 GET처럼 작동하여 원하지 않는 결과가 나올 수 있음.
- 쿼리 스트링을 파싱할 때, 스트링 그 자체가 쿼리 스트링이라고 생각할 수도 있고 파싱된 Map을 쿼리 스트링이라고 생각할 수도 있음.
- 로그를 작성할 때 변수로 제대로 된 클래스를 넣어주어야 된다는 것을 알게 되었음.
- 객체의 역할과 책임에 대해 더 많은 고민을 해볼 수 있었음. 한 객체가 하나의 역할을 맡도록 최대한 분리하는 것이 가독성 좋은 코드를 만들 수 있다고 생각함.
- 싱글톤 패턴에 대해 고민해볼 수 있는 좋은 기회였음.
- 같은 개념에 대해서도 데이터 처리에 대해 다르게 생각할 수 있음을 알게 되었음.
- http method에 대한 처리를 위해 Distributor 인터페이스와 이를 구현한 클래스를 작성했는데, 인터페이스 내부에 함수를 구현했음. 인터페이스는 보통 구현은 하지 않고 명세를 위한 용도로만 사용하기 때문에 이를 클래스로 수정할 필요가 있어보임.