EventEmitter에 관련된 공식 문서에 의하면 모든 이벤트를 발생시키는 객체(objects)는 EventEmitter의 인스턴스이다. 즉, EventEmitter는 인스턴스를 생성하는 클래스라는 뜻이다. 이 객체들은 한 개 이상의 함수를 특정 event에 붙여서 실행될 수 있게 허락하는 .on() 함수를 가지고 있다. 이 객체들이 이벤트를 발생(emit)시키면 그 특정 event에 붙어있는 한 개 이상의 함수들을 전부 비동기적으로 호출시킨다. 호출된 함수들로 인해 발생한 어떠한 리턴 값은 다 무시되고 버려진다. createServer가 반환한 server 객체는 EventEmitter이기 때문에 server.on이 가능하다.

writeHead 메소드는 무슨 역할을 할까? writeHead 메소드는 클라이언트(브라우저)에 보낼 response의 header부분을 담당한다고 보면 된다. 즉, defaultCorsHeader 부분이 서버(response를 보낸쪽)에서 클라이언트(request를 보낸쪽)에게 보내는 메세지이다. "나는 'Access-Control-Allow-Origin' 부분을 '*'(모든 origin 허용)로 가지고 있고 'Access-Control-Allow-Methods' 부분을 'GET, POST, PUT, DELETE, OPTIONS' 로 갖고 있고... 따라서 이것에 맞춰서 보내" 라고 생각하면 될 것 같다.

Access-Control-Allow-Origin 응답 헤더는 이 응답이 주어진 origin으로부터의 요청 코드와 공유될 수 있는지를 나타낸다.

Access-Control-Allow-Headers 는 Access-Control-Request-Headers를 포함하는 preflight request의 응답에 사용되는 헤더로, 실제 요청때 사용할 수 있는 HTTP 헤더의 목록을 나열한다.

Access-Control-Max-Age는 다른 preflight request를 보내지 않고, preflight request에 대한 응답을 캐시할 수 있는 시간(초)을 제공한다.

chunk는 내가 브라우저에서 받은 JSON 형식의 파일을 임시로 저장하는 보관소 인 셈이다. 해당 스프린트에서는 우리가 입력 창에 뭔가를 적고 toUpperCase나 toLowerCase 버튼을 눌러, JSON 파일을 서버로 전송하게 되는데 이때 입력 창에 적은 글이 JSON 파일화되서 서버로 전송되기 때문에 JSON.parse(chunk)를 하면 그 내용을 볼 수 있다.

(각 'data' 이벤트에서 발생시킨 청크는 Buffer입니다. 이 청크가 문자열 데이터라는 것을 알고 있다면 이 데이터를 배열에 수집한 다음 'end' 이벤트에서 이어 붙인 다음 문자열로 만드는 것이 가장 좋습니다.)

TIL [HTTP 트랜잭션 해부 / Mini Node Server 스프린트 코드 분석]

내가 모르는 내용 위주로 블로그 내용을 요약한 내용이지만, 복습과정에서 이해되지 않는 부분이 있을 경우 위 블로그를 다시 한 번 검토할 것!