서버와 클라이언트의 관계 그리고 NodeJS로 서버를 만드는 과정

2021. 1. 25. 14:30생활코딩/NodeJS

우리가 웹사이트에 접속하게 되면 뒤에서 어떠한 과정이 일어나는지 정확히 알지 못하지만 웹사이트를 통해 많은 유저들과 소통을 할 수 있습니다. 인터넷이 등장함에 따라 사람과 사람 즉, 컴퓨터와 컴퓨터 간에 소통을 할 수 있게 된 것입니다.
웹은 크게 2가지 측면으로 바라볼 수 있는데 하나는 정보를 사용하는 쪽에 해당하는 클라이언트 측면과 정보를 제공하는 서버 측면이 존재합니다. 클라이언트가 어떠한 웹사이트를 이용하고 싶다면 보통 상단 URL에 http//a.com이라는 도메인으로 접속하면 그에 해당하는 서버가 클라이언트에게 정보를 제공하는 것입니다. 실제로는 도메인이 정보를 주는 것이 아니고 도메인이 가진 IP주소(52.192.173.151)로 요청하여 정보를 가져오는 것이라고 볼 수 있겠습니다. 실제 IP주소는 클라이언트가 암기하기 어렵기 때문에 사람이 알아보기 쉬운 형식으로 바꾼 것이 도메인이라고 볼 수 있겠습니다.

만약 클라이언트 측면에서 도메인을 요청하고 서버에 접속했을 때 여러가지 서버들이 존재하는 경우가 있을 수 있습니다. 이러한 경우에 서버는 클라이언트가 요청하는 서버가 어떤 것인지 알 수 있고 그에 해당하는 정보를 응답할 수 있는 것일까요?

컴퓨터에는 0번부터 65535번까지의 포트가 존재합니다. 포트라는 것은 마치 문과 같아서 누군가 컴퓨터로 들어오기 위한 매개체라고 볼 수 있습니다. 예를 들어 80번 포트에 웹 서버를 연결하면 우리가 http://a.com:80으로 도메인을 입력해줘야만 웹 서버에 접속하여 그에 해당하는 정보를 받아올 수 있습니다. 다른 포트로 지정하고 80번 포트로 도메인을 접속하면 웹사이트가 연결되지 않습니다. 컴퓨터는 바로 이러한 포트라는 것을 가지고 있기 때문에 얼마든지 여러개의 서버를 가질 수 있으며 그에 해당하는 요청을 받아들일 수 있는 것 입니다.
실제로 도메인을 입력할 때는 포트번호를 생략해줘도 서버에 접속할 수 있도록 http가 제공하고 있습니다.

우리가 NodeJS로 서버를 만드는 방법도 위와 같은 단계를 거치게 됩니다.

const http = require('http');
 
const hostname = '127.0.0.1';
const port = 1337;
 
http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end('Hello World\n');
}).listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

 

지금은 오래된 코드이지만 현재는 express 웹 프레임워크를 사용해 쉽게 서버를 구축하는 것도 가능합니다.

출처: https://opentutorials.org/course/2136/11853