Node.js - 인터넷이 동작하는 방식에 관한 간단한 설명

Posted by RoadtoS7 on August 05, 2020 · 3 mins read

Node.js를 이용하여 서버 웹애플리케이션을 만들기에 앞서서 인터넷이 동작하는 방식에 대하여 간략히 다루어보고자 합니다.

이 포스팅에서 다루고자 하는 개념은 다음과 같습니다.

  1. 서버
  2. 클라이언트
  3. IP
  4. 도메인 네임
  5. PORT

:thumbsup: 클라이언트와 서버

인터넷에는 요청을 하는 주체와 요청을 받아 응답을 하는, 즉, 서비스를 하는 주체가 있습니다.
본론부터 말하자면 요청을 하는 주체가 클라이언트 이며, 요청을 받아 서비스를 하는 주체가 서버에 해당합니다.
따라서 클라이언트와 서버는 요청하고 응답하는 관계에 있습니다.

좀더 예시를 들자면, 우리는 보통 웹브라우저(ex. Chrome, Edge, Internet Explorer 등)을 켜서 웹페이지에 접속하기 위해 주소창에 웹페이지 주소 http://a.com 를 칩니다. 그럼 내부적으로는 컴퓨터가 인터넷을 통해 입력한 주소http://a.com에 해당하는 서버에 접속하여 정보를 요청합니다. 따라서 여기서는 웹브라우저가 있는 쪽이 요청한 주체에 해당되기 때문에 클라이언트에 해당합니다.
그리고 입력한 주소http://a.com에 있는 서버는 클라이언트이 요청에 응답합니다. 따라서 “서버”라고 합니다.

웹브라우저가 어디에 설치되어있느냐에 따라서 서버와 클라이언트가 결정되기 때문에, 어떤 것이 서버이고 어떤 것이 클라이언트인지는 상대적인 개념입니다.

:thumbsup: IP와 도메인 네임

앞선 예시에서 서버에 접속하기 위해 http://a.com라는 주소를 이용했습니다.
하지만 http://a.com라는 주소만 가지고는 서버에 접속할 수 없습니다.
실제로, 서버는 주소를 http://a.com과 같은 형태가 아닌 IP주소로 가지고 있습니다. IP주소는 숫자와 .로 이루어져 있어서 사람이 기억하기가 어렵습니다. 그래서 등장한 것이 바로 도메인 네임입니다.

도메인 네임은 IP를 사람이 기억하기 쉬운 형태로 바꾼 것입니다.
그리고 도메인 네임에 대응되는 네트워크 상의 실제 주소가 IP입니다.
우리가 웹브라우저의 주소창에 http://a.com를 치게 되면, DNS라고 하는 도메인 네임 서비스를 통해서 실제 IP주소를 얻게 되고, 이 IP주소를 이용하여 http://a.com 이러한 도메인 네임을 가지는 서버로 요청을 보내게 됩니다.

:thumbsup: PORT(포트)

서버는 일반적으로 하나의 IP주소를 가지며,서버에는 여러개의 애플리케이션이 존재합니다.
따라서 IP주소를 가지고 요청을 보내게 되면, 이 요청을 서버에 존재하는 여러개의 애플리케이션 중 어떤 애플리케이션이 처리해야할 지라는 문제에 봉착하게 됩니다.

서버에는 0부터 65535번까지의 문이 존재합니다. 이 문을 PORT(포트)라고 합니다. 서버에서 웹애플리케이션을 실행시킬 때, 일반적으로 80번 포트를 연결시켜서, 웹애플리케이션이 80번포트를 바라보도록합니다. 웹애플리케이션이 80번 포트를 바라보도록하는 것을 정확한 용어로는, 웹애플리케이션이 80번 포트를 리스닝한다고 표현합니다.

따라서 사용자가 만약 http://a.com:80으로 접속한다면, 이는 사용자가 a.com 이라는 도메인 네임을 가지는 서버로 접속하면서 80번 포트로 요청을 보내는 것과 같습니다. 그럼 서버 컴퓨터는 해당 요청을 80번 포트와 연결시켜주기 때문에, 80번 포트를 리스닝하고 있던 애플리케이션이 해당 요청을 받아서 응답하게 됩니다.

또한, http를 통한 통신의 경우 80번 포트를 사용하자고 약속이 되어있습니다. 게다가 우리는 웹브라우저의 주소창에 80이라는 포트번호를 생략한채 http://a.com만 입력해도, 요청에 http를 통한 통신을 나타내는 정보가 들어잇기 때문에, 컴퓨터는 이를 보고 요청을 80번 포트로 연결시켜줄 수 있습니다.

하지만, 만약 우리가 80번 포트가 아닌 1337번 포트로 요청을 보내고 싶다면, 1337이라는 PORT(포트)번호를 꼭 도메인 네임이나 IP주소 뒤에 붙여줘야 합니다.
게다가 우리가 만든 웹서버 애플리케이션이 1337번 포트로 들어온 요청을 처리하도록 하고 싶다면, 웹서버 애플리케이션이 1337번 포트를 리스닝하도록 만들어줘야 합니다. 이렇게 되었을 때, 요청이 들어왔을 때 서버 컴퓨터는 1337 포트 번호로 요청을 연결시켜주며, 1337 포트를 리스닝하고 있던 애플리케이션이 해당 요청에 대해 응답할 수 잇습니다.