목록전체 글 (106)
개발스토리
cluster cluster 모듈은 기본적으로 싱글 프로세스로 동작하는 노드가 CPU 코어를 모두 사용할 수 있게 해준다. 포트를 공유하는 노드 프로세스를 여러 개 둘 수 있으므로, 요청이 많이 들어왔을 때 병렬로 실행된 서버의 개수만큼 요청이 분산되게 할 수 있다. 서버에 무리가 덜 가게 된다. 성능은 개선되지만, 메모리를 공유하지 못한다는 등의 단점도 있다. 세션을 메모리에 저장하는 경우 문제가 될 수있다. 이는 레디스 등의 서버를 도입하여 해결 가능 const cluster = require('cluster'); const http = require('http'); const numCPUs = require('os').cpus().length; if(cluster.isMaster){ consol..
https 모듈은 웹 서버에 SSL 암호화를 추가한다. GET이나 POST 요청을 할 때 오가는 데이터를 암호화해서 중간에 다른 사람이 요청을 가로채더라도 내용을 확인할 수 없게 한다. https는 아무나 사용할 수 있는 것은 아니다. 인증서 발급을 받아야 한다. 아래 코드는 인증서가 있다는 가정하에 작성했다. const https = require('https'); const fs = require('fs'); https.createServer({ cert : fs.readFileSync('도메인 인증서 경로'), key : fs.readFileSync('도메인 비밀키 경로'), ca : [ fs.readFileSync('상위 인증서 경로..
쿠키와 세션 이해하기 클라이언트에서 보내는 요청에는 한 가지 큰 단점이 있다. 바로 누가 요청을 보내는 지 모른다는 것이다. 그래서 많은 웹 사이트들은 로그인 기능을 포함한다. 로그인을 구현하려면 쿠키와 세션에 대해 알고 있어야 한다. 로그인을 한 후에 새로고침을 해도 로그아웃이 되지 않는다. 그것은 바로 클라이언트가 서버에 우리가 누군 지 지속적으로 알려주고 있기 때문이다. 우리가 누군지 기억하기 위해 서버는 요청에 대한 응답을 할 때 쿠키라는 것을 같이 보낸다. 쿠키는 유효 기간이 있으며 키-값의 쌍이다. 서버로 부터 쿠키가 오면 웹 브라우저는 쿠키를 저장해두었다가 요청할 때마다 동봉해서 보낸다. 서버는 요청에 들어있는 쿠키를 읽어서 사용자가 누구인지 파악한다. 쿠키는 요청의 헤더에 담겨 전송된다. ..
REST는 REpresentational State Transfer의 줄임말이며, 서버의 자원을 정의하고 자원에 대한 주소를 지정하는 방법을 가리킨다. 자원이라고 해서 꼭 파일일 필요는 없으며 서버가 행할 수 있는 것들을 통틀어서 의미한다. GET : 서버 자원을 가져오고자 할 때 사용된다. 요청의 본문에 데이터를 넣지 않는다. 데이터를 서버로 보내야 한다면 쿼리 스트링을 사용한다. POST : 서버에 자원을 새로 등록하고자 할 때 사용된다. 요청의 본문에 새로 등록할 데이터를 넣어 보낸다. PUT : 서버의 자원을 요청에 들어 있는 자원으로 치환하고자 할 때 사용된다. 요청의 본문에 치환할 데이터를 넣어 보낸다. PATCH : 서버 자원의 일부만 수정하고자 할 때 사용된다. 요청의 본문에 일부 수정할 ..
요청과 응답 이해하기 서버는 클라이언트가 있기에 동작한다. 클라이언트에서 서버로 요청을 보내고 서버에서는 요청의 내용을 읽고 처리한 뒤 클라이언트에 응답을 보낸다. 따라서, 서버에는 요청을 받는 부분과 응답을 보내는 부분이 있어야 한다. 요청과 응답은 이벤트 방식이라고 생각하면 된다. 클라이언트로부터 요청이 왔을 때 어떤 작업을 수행할지 이벤트 리스너를 미리 등록해두어야 한다. 이벤트 리스너를 가진 노드 서버를 만들어보자. //createServer.js const http = require('http'); http.createServer((req,res)=>{ // 어떻게 응답할지 적자. }); req 객체는 요청에 관한 정보들을, res 객체는 응답에 관한 정보를 담고 있다. 이제, 응..