Juni_Dev_log

(node.js) [Part.0] 노드로 만들 수 있는 대표적인 서버와 용도 본문

Theorem (정리)/node.js

(node.js) [Part.0] 노드로 만들 수 있는 대표적인 서버와 용도

Juni_K 2020. 11. 16. 12:05

서버는 왜 필요할까?

최근에 안드로이드나 IOS 기반의 모바일 앱을 만드는 개발자는 서버에 대한 지식이 전혀 없는 상태로 웹 서버나 채팅 서버를 만들기도 한다.

그렇다면, 노드가 무엇인지 배우기 전에 서버가 무엇이며, 어떤 종류의 서버가 있는지 먼저 알아보자.

 

우리는 PC나 스마트폰에서 여러 가지 프로그램을 사용한다.

이러한 프로그램을 애플리케이션 이라고 하며, 스마폰에서는 앱(APP)이라고 부른다. 

PC나 스마트폰에서 동작하는 프로그램을 직접 만들어보고 싶다면 API를 알아야 한다.

 

API 란 프로그램을 쉽게 제작할 수 있게 미리 만들어 놓은 것들의 모음이다. 이러한 API를 이용해서 하나의 단말 기기에서 동작하는 프로그램을 만들게 된다.

 

요즘에는 인터넷을 이용해서 다른 장소에 있는 데이터를 가져와 보여주는 경우가 굉장히 많다.

인터넷 익스플로어나 크롬 웹 브라우저를 열고 구글이나 네이버 같은 포털 사이트에 접속하는 것도 웹 브라우저라 프로그램이 인터넷을 사용해서 웹 서버에 웹 문서를 달라고 요청하는 것이 가능하기 때문이다.

 

단말(기기)에 데이터를 달라고 요청하는 프로그램을 클라이언트(Client), 다른 곳에서 요청받는 명령을 처리해 주는 프로그램을 서버(Server)라고 한다.

 

우리가 만든 프로그램을 인터넷에 연결하기 위해서는 단말에 네트워크 카드가 들어있어야 한다.

요즘에는 유선 인터넷뿐만 아니라 무선 인터넷을 사용하는 경우도 많아서, 와이파이나 3G/LTE로 인터넷에 접속할 수 있는 네트워크 카드가 들어있다.

 

서버는 포트로 지정하여, 그 포트로 요청을 받을 수 있다. 하나의 단말에서 사용할 수 있는 포트는 보통 0 ~ 65535 중 하나를 지정해서 사용하는데, 각 포트 영역은 다음과 같이 구분된다.

포트 번호 설명
0번 ~ 1023번 잘 알려진 포트
1024번 ~ 49151번 등록된 포트
49152번 ~ 65535번 동적 포트

 

윈도우나 안드로이드 같은 OS가 시작될 때는 이미 잘 알려진 포트 (0~1023번)에서 대부분 시작된다.

따라서 직접 만드는 서버 프로그램은 보통 1024번 이상의 포트 번호를 사용한다.

 

서버를 만들어 실행하면 지정된 포트에서 클라이언트로부터 요청을 받아 처리하게 된다. 또한 많은 경우에 서버는 데이터베이스에 연결할 수 있도록 구성되기 때문에 클라이언트에서 보내온 데이터를 저장하거나 저장한 데이터를 조회한 후 클라이언트에게 보내준다.

 

서버 중에서 웹 브라우저에서 접속하는 서버를 웹 서버라고 하며, HTTP 프로토콜을 사용한다.

 

여기에서 프로토콜이란 데이터를 서로 어떤 형태로 주고받을 것인지를 정한 것으로 간단하게 데이터의 형태라고 생각하면 이해하기 쉽다.

따라서 HTTP란 인터넷상에서 데이터를 어떻게 주고받으면 되는지를 정의해둔 것이고, 모든 웹 브라우저가 이 방식을 따른다고 할 수 있다.

웹 브라우저에서 HTTP로 요청한 데이터를 받은 웹 서버는 필요한 작업을 수행한 후 HTTP로 응답을 보낸다.

웹 브라우저가 웹 서버로부터 데이터를 전달받으면, 웹 브라우저 화면에 웹 문서(html, css, js를 이용해서 만든)를 띄우게 되는데, 이 웹 문서가 클라이언트 프로그램의 역할을 하게 된다.

 

따라서, 한번 화면에 띄운 웹 문서는 필요할 때마다 웹 서버로 또 다른 웹 문서를 요청하여 받아온다.

 

스마트폰과 같이 모바일 단말기기에서는 웹 문서를 웹 서버가 아닌 단말 내부에 저장해두었다가 화면에 띄운 후 웹 서버로 필요한 데이터만 요청하는 방식을 사용한다. 이때 에이잭스(ajax) 방식으로 데이터만 받아오는 경우가 많다.

이렇게 하면 매번 웹 문서를 가져오지 않고, 필요한 데이터만 가져온 후 화면을 부분적으로 갱신할 수 있기 때문에 화면 처리속도가 굉장히 빨라진다는 장점이 생긴다.

 

대표적인 서버 유형은 어떤 것이 있을까?

서버의 유형은 굉장히 다양하다.

따라서, 만들려는 애플리케이션이 무엇인지에 따라서 필요한 서버 유형이 달라진다.

예를 들어, 카카오톡이나 라인처럼 실시간 채팅앱을 만들고 싶다면 실시간 채팅을 지원하는 채팅 서버가 있어야 한다.

그리고 다양한 센서로부터 값을 전달받아 동작하는 사물인터넷(IOT) 기능을 만들고 싶다면, 여러 센서들과 데이터를 주고받을 수 있는 서버가 있어야 한다.

요즘에는 모바일 앱을 많이 만들기 때문에, 스마트폰 같은 모바일 단말에 필요한 기능을 제공하는 모바일 서버가 필요하다.

웹 사이트 조회 / 실시간 채팅 / 근처 커피숍 찾기 / 모바일 단말 관리 / 데이터 요청   (클라이언트)

채팅 서버 / 위치 기반 서비스 서버 / 모바일 서버 / JSON-RPC 서버 (서버)
웹 서버 (익스프레스, 몽고 디비, 뷰 템플릿, 패스포트)

윗부분은 클라이언트이고, 아랫부분은 서버이다.

서버의 유형은 크게 5가지로 나뉘어있다. 웹 서버는 모든 서버의 기본이다.

HTTP 프로토콜로 데이터를 주고받을 수 있는 웹 서버를 만들고 나면 그 위에 채팅 서버나 위치 기반 서비스 서버 등을 위한 기능을 추가해서 새로운 서버를 만들 수 있다.

그렇다면 웹 서버에 대한 설명을 시작으로 그 위에 기능을 추가해서 만들 수 있는 서버에 대해 하나씩 살펴보자.

 

웹 서버의 기능은 무엇일까?

웹 서버는 웹 브라우저에서 웹 문서를 요청할 때 필요한 기능을 수행한다.

노드를 사용해서 서버를 만들 것이기 때문에 먼저 노드에서 제공하는 다양한 모듈(Module)을 사용하여 웹 서버를 만들어보자. 

앞에서 본 서버 유형을 다시 확인한 후에 언제, 어디에서, 무엇을 위해 웹 서버를 사용할지 체크해보자.

 

웹 서버 

(누가?)
- 웹 디자이너
- 웹 퍼블리셔
- 웹 개발자

(언제?)
- 웹 서비스 프로젝트
- 기업 업무 개발 프로젝트

(어디에?)
- 홈페이지
- 쇼핑몰 사이트
- 기업 업무 페이지

서버가 어떻게 동작하는지 간단히 알아보고 넘어가자.

우리가 만들 웹 서버는 웹 프레임워크인 익스프레스(Express)로 기본 구조를 만들고 몽고 디비(MongoDB)를 이용해서 데이터를 저장하거나 조회한다. 뷰 템플릿(View Template)은 클라이언트에 응답을 보낼 때 사용하려고 미리 웹 문서의 원형을 만들어 놓은 것이고, 패스포트(Passport)는 사용자 로그인이나 회원가입을 위해서 사용한다.

 

이런 것들을 사용해서 만드는 웹 서버의 주요 기능은 무엇일까? 대략적인 구조만 파악해보자.

 

웹 문서 조회   --------> 3000번 포트 : 웹 서버, 익스프레스, 몽고 디비(데이터베이스) , 뷰 템플릿, 패스포트

파일 업로드 / 다운로드   --------->

로그인 / 회원가입        ---------->

 

웹 브라우저에서 http://localhost:3000/login.html과 같은 사이트 주소를 입력하고 웹 서버에 요청하면 웹 서버는 미리 만들어 둔 웹 문서를 보내준다. 

(localhost는 PC자신을 나타내는 인터넷 주소이다.)

 

위와 같은 주소를 입력하면 웹 서버에서 문서를 보내주는 방식을 나타내고 있다. 이는 웹 브라우저에서 특정 웹 사이트를 조회할 때 사용하는 방식이다.

웹 서버를 만들 때는 이처럼 일반적인 기능을 먼저 구현해야 하는데, 익스프레스가 웹 서버에 필요한 파일들을 자동으로 만들어 줌으로써 좀 더 쉽게 웹 서버를 제작할 수 있도록 도와준다.

 

데이터를 저장하고 조회할 때는 몽고 디비를 사용하고, 클라이언트에 응답을 보낼 때는 뷰 템플릿을 만들어 두었다가 사용한다. 그리고 웹 브라우저에서  로그인이나 회원가입 기능을 쉽게 만들 수 있도록 도와주는 것이 패스포트이다.

 

채팅 서버의 중요한 기능은 무엇일까?

채팅 서버는 일대일 채팅이나 그룹 채팅처럼 실시간 채팅 기능을 클라이언트에 사용하고 싶을 때 만든다.

웹 브라우저나 모바일 단말 같은 클라이언트에서 채팅 메시지를 채팅 서버에 보내면 채팅 서비스는 이 메세지를 누구에게 전달할 것인지 결정한 후 응답을 보낸다.

 

채팅 서버

(누가?)
- 웹 개발자
- 모바일 앱 개발자
- 윈도우 프로그램 개발자

(언제?)
- 웹 채팅
- 스마트폰 채팅
- 실시간 의견 공유

(어디에?)
- 채팅 앱 개발 프로젝트
- 공유 솔루션 개발 프로젝트

주요 기능은 이러하다.

 

1. 친구 목록 보여주기  ------> 3000번 포트 : 웹서버-채팅 서버 , 일대일 채팅, 그룹  채팅

 

2. 일대일 채팅하기

 

3. 그룹 채팅하기

 

 

웹 브라우저나 모바일 앱에서 실시간 채팅 기능을 사용하고 싶다면, 먼저 채팅 서버에 접속해야 한다.

채팅 서버는 웹 서버에 기능을 추가한 형태로 구성되며, 일대일 채팅과 그룹 채팅 기능을 제공한다. 

클라이언트는 채팅을 위해 채팅 서버에 접속한 후, 로그인하고 친구 목록을 가져올 수 있다. 채팅 메시지를 채팅 서버에 보내면 일대일 채팅의 경우에는 상대방을 찾아 메세지를 보내고, 그룹 채팅인 경우에는 대화방에 들어있는 모든 사람에게 메세지를 보낸다.

 

JSON-RPC 서버의 주요한 기능은 무엇일까?

JSON-RPC 서버는 서버 쪽에 함수를 만들어두고 클라이언트에서 함수를 호출하듯이 데이터를 요청하면 응답하는 서버이다.

주로 웹 문서가 아닌, 데이터만을 주고받을 때 JSON-RPC 서버를 사용한다.

JSON은 어떤 형식으로 데이터를 주고받을지 정해놓은 표준 데이터 포맷이며, RPC 방식으로 데이터를 주고받는다.

(RPC는 서버 쪽에 함수를 만들어두고 클라이언트에서 함수를 호출하듯이 데이터를 요청할 수 있도록 만들어주는 표준이다.)

서버 쪽에 구축해야 하는 기능을 함수 별로 명확하게 구분하여 만들 수 있다. 이로 인해 서버의 유지관리가 쉬워진다.

그리고 클라이언트에서 웹 문서가 아닌 데이터만 요청하는 경우에도 JSON-RPC 서버가 종종 사용된다.

 

JSON-RPC 서버

(누가?)
- 앱 개발자
- 윈도우 프로그램 개발자

(언제?)
- 기능 중심의 사이트
- 기업 업무 페이지
- 스마트폰 앱

(어디에?)
- 기업 업무 개발 프로젝트
- 앱 개발 프로젝트

주요 기능은 다음과 같다.

 

1. 웹에서 데이터 요청 ------> 3000번 포트 : 웹서버 - JSON-RPC 서버 , 핸들러 등록, 원격 함수 실행 

 

2. 앱에서 데이터 요청 ------>

 

웹 브라우저나 앱에서는 일반 함수를 호출하듯이 서버에 등록된 함수를 호출할 수 있다. 서버에 등록된 함수를 보통 핸들러라고 부르는데, 더하기 빼기 같은 계산 기능을 하나의 함수로 만들어 등록하면 클라이언트에서 더하기나 빼기 기능을 호출하여 결과를 받아 볼 수 있다.

클라이언트가 웹 서버에 웹 문서를 요청하는 것이 아니라 데이터만 요청하는 것이라면, 이 JSON-RPC 서버를 사용하는 것이 훨씬 더 쉽고 간단하다. 따라서 데이터를 요청하고 싶다면 이 JSON-RPC서버를 사용하는 것이 좋다.

 

데이터를 요청하고 응답을 받아 처리하는데 ajax 방식이 아닌, JSON-RPC를 사용한다.

 

위치 기반 서비스 서버의 중요한 기능은 무엇일까?

위치 기반 서비스 서버는 위치 정보를 저장하고 조회할 때 사용한다.

내가 있는 위치에서 가장 가까운 커피숍을 찾고 싶다면, 나의 위치 정보와 커피숍의 위치 정보를 조회하고 비교하는 과정이 필요한데, 이를 수행하는 서버이다.

그런데, 위치 정보를 요청할 때 왜 웹 서버를 사용하지 않는 걸까?

 

위치 기반 서비스 서버

(누가?)
- 웹 개발자
- 앱 개발자

(언제?)
- 모바일 웹
- 스마트폰 앱

(어디에?)
- 매장 찾기 프로젝트
- 친구 찾기 프로젝트

위치 정보는 경도와 위도 좌표를 사용하는데, 위도와 경도 두 가지 숫자 값을 데이터베이스에 그대로 저장하면 데이터 양이 늘어나게 된다.

또한, 두 개의 값을 한꺼번에 비교하여 조회한다면 검색 속도는 현저하게 떨어질 것이다.

따라서, 위치 정보를 효율적으로 저장하고 조회하는 별도의 다른 방법이 필요하다. 이러한 것을 제공하는 것이 위치 기반 서비스 서버이다.

 

주요 기능을 살펴보자.

 

1. 커피숍 데이터 요청    ------> 3000번 포트 : 웹서버 - 위치 기반 서비스 서버 , 공간 인덱싱 , 공간 데이터 저장, 공간 데이터 검색

 

2. 가까운 커피숍 찾기

 

3. 영역 내의 커피숍 찾기

 

 

위치 정보는 공간 데이터라고 한다. 

만약, 현재 위치에서 가장 가까운 커피숍을 찾아달라고 한다면, 서버에서는 현재 위치와 가장 가까운 커피숍의 위치를 데이터베이스에서 검색한다.

 

이때 검색 속도가 떨어지지 않도록 공간 인덱싱 방법을 사용한다.  (보통 일반 데이터는 데이터베이스에서 B-Tree 인덱싱 방법을 사용한다.)

커피숍과 관련 있는 데이터를 조회하려면 먼저 커피숍 데이터를 저장할 수 있어야 하는데, 클라이언트에서 커피숍 데이터를 확인한 후 서버에 데이터 추가를 요청하면 위치 기반 서비스 서버에는 요청 데이터를 받아 저장한다.

현재 위치가 아니라 특정 영역을 지정하고 그 영역 안에 있는 커피숍을 모두 찾아 줄 수도 있다.

 

모바일 서버의 중요한 기능은 무엇일까?

모바일 서버는 모바일 단말을 사용할 때 필요한 기능을 제공하는 서버이다.

보통 안드로이드 폰이나 아이폰에서 동작하는 앱에서 서버 기능이 필요할 때는 웹서버를 만들어 데이터를 주고받는 경우가 많다. 이는 웹 서버의 기능만으로도 앱에서 서버에 데이터를 보내 저장하거나 서버의 데이터를 조회하는 기능을 충분히 만들 수 있기 때문이다.

하지만, 사용자가 어떤 모바일 단말을 사용하는지 알고 싶거나 모바일 단말로 푸시 메시지를 보내고 싶은 경우에는 모바일 전용 기능을 사용할 수 있도록 모바일 서버라는 이름으로 서버 기능을 만든다.

물론 웹 서버를 만든 후, 모바일 서비스를 위주로 사용할 때도 모바일 서버라고 부르기도 한다.

 

모바일 서버

(누가?)
- 앱 개발자

(언제?)
- 스마트폰 앱

(어디에?)
- 앱 개발 프로젝트
- 단말 관리 프로젝트

주요 기능은 이러하다.

 

1. 모바일 웹으로 사이트 열기 ----> 3000번 포트 : 웹 서버 - 모바일 서버 , 단말관리, 푸시 서비스

 

2. 단말 정보 관리하기

 

3. 공지 메세지 받기

 

모바일 단말에서 웹 서버나 채팅 서버와 같은 서버 기능을 웹으로 만든 클라이언트에서 똑같이 사용할 수 있다. 따라서 모바일 서버라고 다루는 부분은 모바일 앱에서 요청하여 사용하는 서버 기능을 의미하는 것이 아니며, 주로 모바일 단말 전용으로 사용하는 부분만을 말한다.

 

앱이 아닌 모바일 웹을 만들어 사용하는 경우네는 PC용 웹 브라우저에서 작동하는 웹 서버를 그대로 사용할 수 있다.

따라서 모바일 웹이나 하이브리드 웹에서 작동하는 서버 기능을 만들고 싶다면, 이 책의 모바일 서버를 설명하는 부분 외에 웹 서버, 채팅 서버 등을 만드는 과정도 공부해야 한다.

 

 

Comments