본문 바로가기

프로그래밍/Node.js

[Do it Node.js 프로그래밍] 1일차

1. 공부한 범위

 

[00] 노드로 만들 수 있는 대표적인 서버와 용도

[01] 노드에 대해 알아보고 개발 도구 설치하기

 

2. 공부한 내용 요약

 

[00]  노드로 만들 수 있는 대표적인 서버와 용도

 

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

- 우리들은 PC나 스마트폰에서 여러 프로그램을 사용하는데 이를 어플리케이션이라 부른다.

- 어플리케이션을 직접 만들고 싶다면 API (Application programming Interface)를 알아야 한다.

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

- 포털 사이트에 쉽게 접속 가능 한 이유는 웹 브라우저라는 프로그램이 인터넷을 사용해 웹 서버에 웹 문서를 달라고 요청할 수 있기 때문이다.

- 클라이언트 : 다른 어딘가에 있는 단말에 데이터를 달라고 요청하는 프로그램이다.

- 서버 : 다른 곳에서 요청받은 명령을 처리해주는 프로그램이다.

- 네트워크 카드 : 프로그램을 인터넷에 연결하기 위해 단말에 들어있어야 하는 장비다.

만일 서로 다른 단말 둘 다 네트워크 카드가 있다면 한쪽은 클라이언트, 다른 쪽은 서버의 역할을 할 수 있다.

- 서버는 포트를 지정함으로써 클라이언트의 요청을 받을 수 있는 경로를 지정해준다.

포트는 보통 0 ~ 65535 중 하나를 지정해서 사용한다.

* 0 ~ 1023 : 잘 알려진 포트 (Well - known port)

* 1024 ~ 49151 : 등록된 포트 (Registered port)

* 49152 ~ 65535 : 동적 포트 (Dynamic port)

대부분의 경우 직접 만드는 서버 프로그램은 1024 이상의 포트 번호를 사용하게 된다.

- 서버를 만들어 실행하게 되면 지정된 포트를 통해 클라이언트로부터 요청을 받아 처리하게 된다.

- 웹 브라우저에서 접속하는 서버를 보통 웹 서버라고 부르며 HTTP 프로토콜을 사용한다.

- 모바일 단말에서는 웹 문서를 웹 서버가 아닌 단말 내부에 저장해 두었다가 화면에 띄운 후 웹 서버로 필요한 데이터만 요청하는 방식을 사용하기도 한다. 이 때는 데이터를 에이젝스(Ajax)방식을 사용한다.

- Ajax : 매번 웹 문서를 가져오지 않고 필요한 데이터만 가져온 후 화면을 부분적으로 갱신하도록 도와주는 개발 기법이다. 이 기법을 이용하면 화면 처리 속도가 빨라지는 장점이 있다.

- 프로토콜 : 데이터를 서로 어떤 형태로 주고받을 것인지 정한 규칙이다.

- HTTP : 인터넷 상에서 데이터를 어떻게 주고받으면 되는지 정의해 둔 것이며 모든 웹 브라우저는 이를 따르고 있다.

 

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

- 웹 서버, 채팅 서버, 위치 기반 서비스 서버, 모바일 서버, JSON-RPC 서버

- 웹 서버를 기본으로 하여 사용하고자 하는 기능에 따라 하위 네 개의 서버로 분류할 수 있다.

 

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

- 로컬 호스트 : PC 자신을 나타내는 인터넷 주소다. 다른 단말에 연결하고자 할 때 OP와 같은 단말 주소를 사용하는데 로컬 호스트는 자신을 가리킨다.

- 이 책에서는 익스프레스와 몽고디비, 뷰 템플릿, 패스포트를 사용해 서버를 만들게 된다.

- 익스프레스 : 웹 서버에 필요한 파일들을 자동으로 만들어줘 더 쉽게 웹 서버를 제작할 수 있도록 돕는다.

- 몽고디비 : 데이터를 저장하고 조회하고자 할 때 사용한다.

- 뷰 템플릿 : 클라이언트에 응답을 보내고자 미리 만들어두는 템플릿이다.

- 패스포트 : 회원가입이나 로그인 기능을 쉽게 만들도록 도와준다.

 

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

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

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

- JSON : 어떤 형식으로 데이터를 주고받을 지 정해 놓은 표준 데이터 포맷이다.

- RPC (Remote Procedure Call) : 서버 쪽에 함수를 만들어두고 클라이언트에서 함수처럼 호출해 데이터를 요청할 수 있도록 해주는 표준이다. RPC 표준을 사용하면 서버 쪽에 구축해야 하는 기능을 함수별로 명확히 구분할 수 있어 서버의 유지 관리가 쉬워진다.

- 핸들러 : 서버에 등록된 함수를 말한다. 여러 계산 기능 등을 함수로 만들어 등록하면 클라이언트에서 핸들러를 호출해 함수 결과를 받을 수 있다.

 

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

- 위치 정보는 위도와 경도 좌표를 사용하며 두 가지 숫자값을 데이터베이스에 저장하려면 데이터 양이 늘어나게 된다. 또한 두 값을 한꺼번에 비교하여 조회하면 검색 속도도 현저히 줄어든다.

- 위치 기반 서비스 서버는 위치 정보를 효율적으로 저장하고 조회하는 별도의 방법을 제공한다.

- 공간 데이터 : 집, 도로 등을 점이나 선 등의 형태로 나타낸 위치 데이터이다.

- 공간 인덱싱 : 데이터베이스에서 2차원 공간 데이터를 빠르게 조회하기 위해 만든 2차원 인덱싱 방법으로 R-Tree, R*-Tree가 있다.

 

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

- 기본적으로 모바일 단말에서 웹 브라우저를 열고 웹 문서를 요청할 경우 웹 서버의 기능만으로 충분하다.

- 이 책에서 배울 모바일 서버란 주로 모바일 단말 전용으로 사용하는 부분만을 말한다.

사용자가 사용하는 단말을 서버에 등록 후 관리자가 단말정보를 알 수 있는 방법

모바일 단말 쪽으로 푸시 베시지를 보내 공지사항 등을 알려주는 방법

 

[01] 노드에 대해 알아보고 개발 도구 설치하기

 

01-1 노드란 무엇일까?

- 노드 : 자바 스크립트를 이용해 서버를 만들 수 있는 개발 도구다.

- 노드는 과거 동기 입출력 방식의 문제를 해결하기 위해 만들어졌다.

- 비동기 입출력 방식

하나의 요청 처리가 끝날 때까지 기다리지 않고 다른 요청을 동시에 처리할 수 있는 방식이다.

노드의 대표적인 특징이라 할 수 있다.

- 콜백 함수 : 프로그램이 해당 파일의 내용을 처리할 수 있는 시점이 될 때 호출되는 함수다.
- 이벤트 기반 입출력 : 파일 시스템이 이벤트와 함께 호출하는 방식이다.

- 자바스크립트는 인터프리터 방식을 사용해 속도가 느리다는 문제를 안고 있었다. 이를 개선하기 위해 크롬은 V8자바스크립트 엔진을 개발했다.

- V8엔진에는 필요한 기능을 병렬로 실행하는 스레드 풀과 이벤트를 받아 처리하는 이벤트 루프 등 기본 기능이 있다. 그 위에는 네트워크 기능을 담당하는 http 라이브러리와 소켓 등이 있고 또 그 위에는 노드 표준 라이브러리가 구현되어 있다.

- 아키텍처에서 가장 중요한 부분 중 하나는 이벤트를 받아 처리하는 기능이다. 이 기능은 데이터 송수신 부분에도 그대로 사용이 가능하다.

- http 객체: HTTP 프로토콜로 웹 서버에 데이터를 요청할 수 있는 기능이 있다. request() 함수를 이용할 수 있으며 응답을 받으면 콜백 함수가 자동으로 호출된다.

- on() 메소드를 사용해 이벤트를 콜백함수와 바인딩할 수 있다.

- 모듈 : 메인이 되는 자바스크립트 파일의 일부 코드를 떼어 별도의 파일로 만들 수 있다.

- 패키지 : 여러 개의 모듈을 하나로 합핀 것으로, 이를 만들어두면 다른 프로그래머들도 npm 프로그램으로 쉽게 패키지를 설치해 사용할 수 있게 된다.

 

3. 실습 화면

- Bracket으로 html 파일 만들어 실행시키기

 

- npm과 node 설치