# Doit! - 노드로 만들 수 있는 대표적인 서버와 용도

## 00-1 서버는 왜 필요할까?

PC에서 사용하는 프로그램은 **애플리케이션(Application)**, 스마트폰에서는 **앱(App)**&#xC774;라 부른다.

### API(Application Programming Interface)

프로그램을 쉽게 제작할 수 있게 미리 만들어 놓은 것들의 모음.

![](https://upload.wikimedia.org/wikipedia/commons/thumb/c/c9/Client-server-model.svg/1200px-Client-server-model.svg.png)

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

우리가 만든 프로그램을 인터넷에 연결하기 위해서는 단말에 네트워크 카드(Network Card or Ethernet Card)가 있어야한다. 이때 서버는 포트(단말에 접속하기 위한 '논리적인 접속 위치')를 지정해 그 포트로 요청을 받을 수 있는데 보통 0\~65535 중 하나를 지정해서 사용한다.

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

윈도우나 안드로이드 같은 OS가 시작될 때는 이미 잘알려진포트(0\~1023)에서 대부분 사용하므로 보통 **1024**이상의 포트 번호를 사용한다.

### 프로토콜(Protocol)

웹 브라우저에 접속하는 서버를 **웹 서버**라 하며, HTTP 프로토콜을 사용한다. 프로토콜이란 데이터를 서로 어떤 형태로 주고받을 것인지를 정한 것으로, 간단하게 데이터의 형태라고 생각하면 좋다. 즉, HTTP는 인터넷상에서 데이터를 어떻게 주고받으면 되는지를 정의해둔 것이다.

![](http://blog.whoborn.net/wp-content/uploads/sites/9/2015/06/21.png)

모바일 단말에서는 **Ajax**(Asynchronous Javascript And XML)방식으로 데이터만 받아오는 경우도 있다.

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

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

## 00-3 웹 서버의 기능은 무엇일까?

웹 서버는 모든 서버의 기본이다.

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

**localhost(로컬 호스트)**&#xB294; PC자신을 나타내는 인터라넷 주소이다.

MongoDB뿐만 아니라 MySQL을 사용할 수 있다.

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

채팅 서버는 웹 서버에 기능을 추가한 형태로 구성되며, 일대일 채팅, 그룹 채팅 기능을 제공한다. 채팅 메시지를 채팅 서버에 보내면 일대일 채팅의 경우 상대방을 찾아서 보내며, 그룹채팅인 경우 대화방에 있는 모든사람에게 보낸다.

## 00-5 JSON-RPC 서버의 중요한 기능은 무엇일까?

JSON-RPC서버는 서버 쪽에 함수를 만들어 두고 클라이언트에서 함수를 호출하듯이 데이터를 요청하면 응답하는 서버이다. 주로 웹 문서가 아닌 데이터만을 주고받을 때 사용한다. JSON은 **표준 데이터 포맷**이며, **RPC(Remote Procedure Call)**&#xBC29;식으로 데이터를 주고 받는다. JSON과 RPC표준을 함께 사용하면 서버 쪽에 구축해야 하는 기능을 함수별로 명확하게 구분하여 만들 수 있다. 이때문에 서버 유지관리가 쉽다.

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

위치 정보를 저장하고 조회할 때 사용한다. 위치 정보는 위도,경도 좌표를 사용하는데 이 값을 그대로 저장하면 데이터의 양이 늘게되고, 두 개를 한번에 비교하면 검색속도는 현저히 떨어진다. 따라서 이러한 방법을 제공하는 것이 위치 기반 서비스 서버이다.

* **공간 데이터(Spatial Datat)** : 지구상에 있는 집, 도로 등을 점이나 선 등의 형태로 나타낸 위치데이터를 말한다.
* **공간 인덱싱(Spatial indexing)**&#xBC29;법(2차원 공간 데이터를 빠르게 조회하기 위해 만든 2차원 인덱싱방법 [R-Tree](http://www.jidum.com/jidums/view.do?jidumId=159), [R\*Tree](https://en.wikipedia.org/wiki/R*_tree))을 사용해 검색함.

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

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