이름 그대로 작은 노드 서버를 구현하는 것으로, 지금까지는 클라이언트 입장에서 http 요청을 보내서 받는 것을 구현하는 것을 주로 했다면, 이번에는 서버 입장에서 http 요청을 받아서 클라이언트에게 분배하는 과정을 구현하는 과제를 진행 한 것이다.
살면서 컴퓨터를 다양하게 사용해 봤지만, 항상 나는 클라이언트 입장이었다. 그래서 제목을 보고도 클라이언트적 사고에 사로잡혀있어서 1시간 정도를 문제를 파악하는데 애를 먹었다.
클라이언트로 생각 해가지고 과정을 알려주는 "HTTP 트랜잭션 해부" 문서를 보고도 서버를 구현한다는 것을 제대로 이해하지 못했었다.
막혔던 사고 회로를 회복시켜 준 것은 response.writeHead와 response.end에 대해 찾아보다가 이 method 들이 어떤 행동을 하는지 알았을 때 부터였다.
wirteHead는 http 응답 메시지 헤더를 작성한다는 뜻이고,
end는 페이지를 종료하고 endRequest 이벤트를 발생시킨다.
내가 입력한 대로 오류 페이지가 뜬다는 것을 알았다.
서버에서 응답을 할때 200, 201 같은 확인 헤더는 내가 직접 쓴다는 것을 알았지만, 오류처리는 자동으로 되는줄 알고있었다.
그런데 예외 처리를 할때 내가 입력할 대로 오류 페이지가 구현되는 것을 새롭게 알게 되었다.
기본적으로 404: not found를 아래처럼 입력했었다.
response.statusCode = 404;
response.end();
그러면 알고있던 대로 페이지를 404: not found 페이지가 나왔다.
코드를 보다가 404를 요청시간이 지났다는 408: Request timeout로 바꿔봤다.
그랬더니
Thi page isn't working
HTTP ERROR 408
이라는 메시지가 떴다.
과제는 처음 시도해 보는게 많아서 어려웠지만 배울게 매우 많았다.