- 서버
- Node.js
- 모듈
@@ 오늘은 가볍게 노드프로그래밍 서적을 읽으며 node.js 서버 스프린트 때 배웠던 서버와 node.js 의 개념에 대해 복습하는 시간을 가졌다. 서버의 종류와 node.js 의 특성 및 장점 등을 살펴보았고, v8 엔진과 Common.js에 대한 개념도 다시 읽어보며 복습했다.
채팅 서버
JSON-RPC 서버
위치 기반 서비스 서버
위치정보는 위도,경도 좌표 사용
위도와 경도 두가지 숫자 값을 데이터베이스에 그대로 저장하면 데이터 양이 늘어난다.
또한 두개 값을 한번에 비교하여 조회하면 검색 속도가 많이 떨어진다.
위치정보는 공간 데이터라고도 한다.
공간 데이터
지구상에 있는 집, 도로 등을 점이나 선 등의 형태로 나타낸 위치 데이터
위치 기반 서비스는 검색속도가 떨어지지 않도록 공간 인덱싱 방법을 사용 (일반 데이터는 데이터베이스에서 B-Tree 인덱싱 방법 사용)
공간 인덱싱
데이터 베이스에서 2차원 공간 데이터를 빠르게 조회하기 위해 만든 2차원 인덱싱 방법 (R-Tree, R*Tree 등)
모바일 서버
자바스크립트를 이용해서 서버를 만들 수 있는 개발 도구
배경
웹 서버 파일을 업로드 할 때 업로드 완료되기 까지 웹서버에서 데이터를 조회하거나 하는 등의 다른 작업이 불가
이 문제에 대한 해결을 위해 새로운 방식의 서버 개발 도구 시작.
(웹 서버 파일 업로드 핸들러가 하나의 요청이 끝날 때까지 다른 요청을 대기시켜, 서버에서 처리해야하는 요청 수가 증가하면 CPU, 메모리 사용도 크게 증가하는 문제 발생)
비동기 입출력 방식
비동기 입출력(논블로킹 입출력, Non-Blocking IO)방식
콜백함수
데이터 처리 방식을 비동기로 바꾸어도 자바스크립트 코드를 실행하는 속도가 느리면 효율성이 떨어질 수 있다.
자바스크립트는 코드를 한줄씩 해석하면서 실행하는 인터프리터 방식을 사용하므로 속도가 느려 문제가 됐으나 V8 엔진이 나오면서 해결됨.
V8엔진은 자바스크립트 코드를 네이티브 코드로 바꾼 후 실행
자바스크립트 엔진
자바스크립트 코드를 마이크로프로세서가 이해할 수 있는 더 낮은 수준의 언어 혹은 기계어로 변환해주는 역할
v8 엔진 참고글 여기
노드는 이 v8엔진을 이용해 자바스크립트 코드를 빠르게 실행 할 수 있다.
노드를 설치 후 노드로 프로그램을 만들어 실행하면 크롬 v8엔진 위에서 실행된다.
v8엔진에는 필요한 기능을 병렬로 실행하는 스레드 풀과 이벤트를 받아 처리하는 이벤트 루프 등 기본 기능이 있고 그 위에
네트워킹 기능을 담당하는 소켓, http라이브러리 들이 있다. 그리고 그 위에 표준 라이브러리가 구현되어있다. 개발자들이 각자의 목적에 맞게 만든 노드 프로그램은 그 라이브러리 위에서 동작한다.
노드 프로그램이 동작할 수 있도록 만든 이 아키텍처에서 가장 중요한 부분 중 하나가 이벤트를 받아 처리하는 기능.
특히 노드는 서버 쪽에서 동작하는 프로그램을 만드는 것이 주 임무이기 때문에 기본 기능인 소켓이나 http 프로토콜을 사용해 데이터를 송수신하는 기능을 포함하고 있다.
따라서 이벤트 처리 방식을 그대로 사용할 수 있다.
http객체는 HTTP 프로토콜로 웹 서버에 데이터를 요청할 수 있는 기능이 있다.
자바스크립트엔 on이라는 메소드를 통해 이벤트를 콜백함수와 바인딩 할 수 있다.
따라서 response객체의 on 메소드를 이용해 data이벤트와 콜백함수를 바인딩하면 data 라는 이름의 이벤트를 받았을 때 등록한 콜백 함수가 실행된다. 이벤트 이름이 data이고 응답으로 받은 데이터는 chunk변수에 들어있다.
노드에서도 필요 기능을 별도의 파일로 만들면 코드를 분리해서 관리할 수 있다.
그 형태는 Common js 표준 스펙을 따른다.
Common.js
자바스크립트를 브라우저뿐 아니라 서버쪽 프로그램이나 PC용 프로그램에서도 사용하려고 조작한 자발적인 워킹그룹.
Common.js 표준스펙은 자바스크립트 코드를 별도의 모듈 파일로 분리시키고 필요할 때 불러와 사용할 수 있는 방식을 정의한 표준.
여러개의 모듈을 합쳐서 하나의 패키지로 만들어 두면 다른 프로그래머들도 npm 프로그램으로 손쉽게 패키지를 설치하여 사용할 수 있다.
자바스크립트 프로그래밍 주요 특징
노드의 장점