서버는 클라이언트가 있기에 동작하며, 클라이언트에서 서버로 요청(request)을 보내고, 서버에서는 요청의 내용을 읽고 처리한 뒤 클라이언트에 응답(response)을 보낸다.
즉, 요청과 응답은 이벤트 방식이다.
REST는 REpresentational State Transfer의 줄임말로 서버의 자원을 정의하고 자원에 대한 주소를 지정하는 방법이다. 자원이라고 해서 꼭 파일이 아니어도 된다. 그저 서버가 행할 수 있는 것들을 통틀어서 의미한다고 보면된다.
REST를 따르는 서버를 'RESTful 하다'고 표현한다.
우리는 서버에서 브라우저로 쿠키를 보낼 때만 코드를 작성해서 처리하면 된다.
쿠키는 요청 헤더(Cookie)에 담겨 전송된다. 브라우저는 응답의 헤더(Set-Cookie)에 따라 쿠키를 저장한다.
https 모듈은 웹 서버에 SSL암호화를 추가한다.
다시말해 GET이나 POST요청을 할 때, 오가는 데이터를 암호화해서 중간에 다른 사람이 요청을 가로채더라도 내용을 확인할 수 없게 한다.
https 모듈은 암호화를 적용하는 만큼 인증서가 필요하다.
인증서는 인증 기관에서 구입해야하며, Let's Encrypt 같은 기관에서 무료로 발급해주기도 한다.
http2 모듈은 SSL 암호화와 더불어 최신 HTTP 프로토콜인 http/2 를 사용할 수 있다.
http/2는 기존 http/1.1보다 요청 및 응답 방식이 개선되어 훨씬 효율적으로 요청을 보낸다. 또한, http/2를 사용했을 때 웹의 속도도 많이 개선된다.
cluster 모듈은 기본적으로 싱글 프로세스로 동작하는 노드가 CPU코어를 모두 사용할 수 있게 해주는 모듈이다. 포트를 공유하는 노드 프로세스를 여러개 둘 수도 있으므로, 요청이 많이 들어왔을 때 병렬로 실행된 서버의 개수만큼 요청이 분산되게 할 수 있다.
단점은 세션을 메모리에 저장하는 경우 문제가 될 수 있지만, 이 문제는 레디스 등의 서버를 도입하여 해결할 수 있다.
예기치 못한 에러로인해 서버가 종료되는 현상을 방지하기 위해 클러스터링을 적용하는 것이 좋다. 직접 cluster 모듈로 클러스터링을 구현할 수 있지만, pm2 등의 모듈로 cluster 기능을 사용한다.