21년 2월 2일
한 일
-
소켓 통신을 사용하여 HttpRequest와 HttpResponse 객체 구현하기
-
URL 객체를 만들었다.
- URL 객체를 생성할 때, url string값을 인자로 넣어준다.
- 생성자에서 url을 파싱하여 protocol, domain, path, port를 프로퍼티로 저장한다.
- 생성자에서 InetAddress를 사용하여 DNS서버로부터 호스트 IP를 받아온다(DNS Look up)
-
HttpRequest 객체를 만들었다.
-
URL 객체를 인자로 생성할 수 있다.
-
Request메소드에 [GET, POST, UPDATE, DELETE] Method값(enum)과 body(JsonObject)를 넣어준다.
- 인스턴스의 URL과 인자로 받은 Method값, body를 조합하여 기본적인 Http 요청 String을 만든다.
- URL의 IP와 포트번호를 기준으로 Socket 연결한다.
- Socket 통신을 통해 만들어놓은 Http 요청을 보낸다.
- Socket으로 들어온 Response를 BufferedReader로 읽으며 HttpResponse를 생성한다.
- 처음 등장하는 빈 줄을 기준으로 header와 body를 나눈다.
- response header에 Content-Length가 있으면 Content-Length개 만큼 body를 읽는다.
- Content-Length가 없으면
</html>
값이 나올때까지 body를 읽는다. - 다 읽으면 바로 socket 연결을 끊는다.
- 생성한 HttpResponse를 반환한다.
-
-
HttpResponse 객체를 만들었다.
-
header String(포맷에 맞아야 함)과 body String을 파라미터로 생성할 수 있다.
-
그냥 생성할 경우, setHeader(String header) 와 setBody(String body)로 Response를 만들어줘야한다.
-
header String 을 파싱하여 protocol, statusCode, statusMessage를 생성하며, 나머지 헤더값은
Map<String, String> 형태로 저장한다.
-
-
-
프로그래머스 보석쇼핑 문제 풀기에 실패했다.
- HashSet을 이용하여 보석 종류의 개수를 구한다.
- 기본적으로 길이가 j 인 구간에서 모든 종류가 있는지 확인할 땐 sliding window기법을 사용했다.
- HashMap<String, Integer>을 사용한다.
- 1번째부터 j번째까지 돌며 HashMap에서 보석의 value를 1씩 증가시킨다.
- HashMap의 크기가 보석종류의 개수와 같으면 현재 구간을 반환한다.
- j+1번째부터 마지막까지 순회하며
- 직전 구간 첫번째 보석의 value를 1 감소시키고, value가 0이면 HashMap에서 삭제한다.
- 새로 포함된 보석의 value를 1 증가시킨다.
- HashMap의 크기가 보석종류의 개수와 같으면 현재 구간을 반환한다.
- 끝까지 답을 못찾으면 null을 반환한다.
- 정답 구간의 길이 최대값은 gems의 개수, 최소값은 보석종류의 개수이다.
- binarySearch로 정답 구간의 길이를 찾아가며 최소 길이의 구간을 찾아낸다.
- 효율성에서 1개 빼고 모두 실패하였다. 방법 자체를 다시 생각해봐야겠다.
잘못한 것
잘한 것
- HttpRequest와 HttpResponse를 내가 할수있는데까지 잘 구현하였다.
- 네트워크에 대해 자신감이 없었는데 이번에 아주 재밌게 실습하고 배웠다.
느낌
할 일
- 자바의 정석 읽기
- 네트워크 공부하기
- 프로그래머스 문제 풀기