도도한 개발자

[TIL] 2023/09/03 본문

TIL

[TIL] 2023/09/03

Kiara Kim 2023. 9. 3. 23:36

🐈‍⬛ 오늘 공부한 내용

  • 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