도도한 개발자
[TIL] 2023/09/03 본문
🐈⬛ 오늘 공부한 내용
- Tomcat 구현하기 - 1단계 HTTP 서버 구현하기
- 위에거 리팩터링
🐾 느낀 점 & 배운 점
HTTP 요청과 응답에 있는 헤더를 유심히 본 적이 없었던 것 같다. 그리고 어떤 요청을 받아 어떻게 처리할 지에 대한 감도 안온 상태였다.
그래서 처음에 inputStream의 요청을 분기 처리할 때
Request-line에 있는 저 요청URI에 따라서 다음과 같이 조건식을 만들었었다.
if (headers[0].contains("/index.html")) {
URL resourceURL = getClass()
.getClassLoader()
.getResource("static" + "/index.html");
Path path = new File(resourceURL.getFile()).toPath();
responseBody = new String(Files.readAllBytes(path));
}
이번에 css도 지원하게 만들으라 해서 또 분기 처리를 했다.
else if (headers[0].contains("/styles.css")) {
URL resourceURL = getClass()
.getClassLoader()
.getResource("static" + "/styles.css");
Path path = new File(resourceURL.getFile()).toPath();
responseBody = new String(Files.readAllBytes(path));
}
근데 생각해보면 이건 진짜 무슨 코드인가 싶다. 조금만 생각해보면 파일의 개수만큼 이렇게 분기처리를 하는 건 말이 안되는데 어제의 나는 몰랐으니까 뭐..ㅎ 아무튼 이렇게 하는 건 아니다 싶어서 HTTP 요청 스펙을 다시 한 번 봤다.
이 부분. Accept 헤더는 클라이언트가 자신에게 이런 데이터 타입만 허용하겠다는 뜻이라고 한다. 즉, 브라우저(=클라이언트)가 요청 메시지의 Accept 헤더 값을 text/html 이라고 설정했다면 클라이언트는 웹 서버에게 html 데이터만 처리할 수 있으니 html 데이터 형식으로 응답을 돌려달라고 말하는 것이다.
그런데 이거랑 비슷한 값을 가지는 것 중 Content-Type이랑 헷갈렸었다. 알고보니 Content-Type 헤더와 Accept 헤더 둘 다 데이터 타입을(MIME)를 다루는 헤더다. 그러나 Content-Type 헤더는 현재 전송하는 데이터가 어떤 타입인지에 대한 설명을 하는 개념이고, Accept 헤더는 클라이언트가 서버에게 응답으로 보낼 데이터 타입을 정해주는 것이다.
그래서 다음과 같이 분기처리를 할 수 있었다.
if (acceptValue.equals("text/html")) {
response = new Response("text/html", resource).getResponse();
} else if (acceptValue.equals("text/css")) {
response = new Response("text/css", resource).getResponse();
}
물론 여기서 추가로 리펙터링을 하긴 했지만 글 흐름 상 이렇게 바꿔서 보면 편할 것 같았다.
암튼 별 볼 일 없다고 생각했던 HTTP 스펙을 이렇게나 자세히 보니 꽤나 중요한 친구였다는걸 깨닫게 된 하루였다. step2는 고사하고 테코톡 어떡하냐 진짜.
💭 감정회고
만족 지연. 요즘 빠진 단어다. 보통 만족 지연 능력이라는 말로 쓰는데, 뜻은 다음과 같다.
'내가 지금 하고 싶은 일이 있지만 다음의 더 좋은 일을 위해 참을 수 있는 능력'
만족 지연하는 삶 꽤나 성취감 있다. 근데 이 패턴이 지속되면 체력이 남아나지 않을 것. 가끔은 쉬면서 그리고 집중 할 땐 아주 집중하자.
'TIL' 카테고리의 다른 글
[TIL] 2023/09/11 (0) | 2023.09.11 |
---|---|
[TIL] 2023/09/08 (2) | 2023.09.08 |
[TIL] 2023/09/01 (0) | 2023.09.01 |
[TIL] 2023/08/31 (6) | 2023.08.31 |
[TIL] 2023/08/29 (4) | 2023.08.29 |