1. 노드란 무엇일까?
노드(Node.js)는 자바스크립트를 이용해서 서버를 만들 수 있는 개발 도구입니다.
이미 기존에 존재하는 웹 서비스 같은 서버를 만들 수 있는 언어나 도구들이 많은데, 왜 노드(Node.js)라는 새로운 개발 도구를 만든 걸까요?
2009년 라이언 달(Ryan Dahl) 이란 시람이 웹 서버에 파일을 업로드할 때, 업로드가 완료되기 전까지 웹 서버에서 데이터를 조회하는 등 다른 업무를 전혀 할 수 없었습니다. 이 문제를 해결하기 우해 새로운 방식의 서버 개발 도구를 만들기 시작했는데 그것이 Node.js 입니다.
(지금은 노드를 꼭 쓰지 않아도 해결할 수 있는 방안들이 많이 나와있다고 하네요.)
Node.js 는 이런 문제를 해결하기 위해 비동기 입출력(논블로킹 입출력, Non-Blocking IO) 방식을 적용했습니다. 즉, 하나의 요청 처리가 끝날 때까지 기다리지 않고 다른 요청을 동시에 처리할 수 있는 방식입니다.
이 방식을 이해하기 위해선 동기 입출력방식으로 파일을 읽는 과정을 알아야 합니다.
- 동기 입출력 방식 : PC에 있는 파일의 내용을 읽어오는 동기 입출력 방식의 프로그램이 있다고 가정합니다. 프로그램이 파일 시스템에 읽기 요청을 합니다. 이제 파일 시스템에서 디스크에 있는 파일을 확인하고 준비한 다음 처리하는 시간이 필요한데 그동안 프로그램은 다른 작업을 하지 않고 대기합니다. 아무동작을 하지 않습니다. 결국 중간중간 대기 시간이 발생하면서 속도가 느려집니다.
- 비동기 입출력 방식 : 여기서 노드는 콜백함수라는 것을 사용하게 됩니다. 파일 읽기 요청을 하기 전에 콜백 함수를 등록하는데, 파일 시스템은 파일 처리가 끝나면 자동으로 콜백 함수를 호출합니다. 따라서 프로그램이 파일 읽기 작업이 끝날때까지 대기하지 않아도 파일을 다 읽은 시점에 통보를 받고 파일의 내용을 화면에 보여주는 작업을 진행합니다.
-동기 입출력 방식 코드 예제;
var contents = file.read('a.txt');
======= 대기 ========
doShow(contents);
var result = doAdd(10,10);
-비동기 입출력 방식 코드 예제;
file.read('a.txt', function(contents){
doShow(contents);
});
var result = doAdd(10,10);
'Computer Science > JavaScript&Node.js' 카테고리의 다른 글
JavaScript INTRO (0) | 2018.05.02 |
---|