Node.js
생활코딩 Node.js를 이용해 웹애플리케이션 만들기 강좌의 내용을 정리해본다.
기존 자바스크립트(Javascript)는 주로 클라이언트(Front-end)에서 사용되었다.
구글에서 V8엔진을 개발하고 오픈소스로 공개하면서 자바스크립트가 서버에서도 쓰이게 되었고, 여러 이유가 있겠지만 자바스크립트로 프론트엔드와 백엔드 둘다 커버할 수 있게 되어 인기를 끌게 되었다.
이번 포스트에서는 서버측에서 사용할 수 있는 자바스크립트의 핵심적인 기술인 nodejs에 대해서 알아보자.
Node.js 특징
- V8 Engine
- Event-driven
- Non-blocking IO
- Single thread
콜백함수
다른 함수의 인자로 사용되면서, 그 함수 안에서 특정 이벤트에 의해 다시 호출되는(called at the back) 함수
비동기방식
node는 비동기방식을 지원하므로 속도가 빠름
- 동기 : 순서대로 위에서부터 차례로 실행. 위의 명령문이 끝날때까지 아래가 실행되지 않음
- 비동기 : 순서대로 실행되지만 위의 명령문이 끝날때까지 기다리지 않고 아래 실행함
Nodejs는 주로 비동기와 콜백을 함께 사용함
이벤트기반
- 이벤트가 발생할 때 미리 지정해둔 작업을 수행함
- 이벤트 리스터를 콜백 함수에 등록
- 호출스택 -> 백그라운드 -> 태스크 큐 -> 호출스택 실행
논블로킹 I/O
- 이전 작업이 완료될 때까지 멈추지 않고 다음 작업을 수행함
- 현재 노드 프로세스 외에 다른 컴퓨팅 자원을 사용할 수 있는 I/O 작업이 시간적 이득을 많이 봄
- setTimeout(콜백, 0)은 코드를 논블로킹으로 만들기 위해 사용하는 기법 중 하나
그리고 자바스크립트가 이렇게 발전할 수 있는 이유 중 하나는 노드 패키지 매니저(NPM, Node Package Manager)라고 할 수 있다.
NPM을 통해 외부모듈을 쉽게 사용할 수 있다.
https://en.wikipedia.org/wiki/Npm_(software)
NPM 사용방법
초기화를 위해 npm init 명령을 통해 package.json을 생성함
> npm instsall [패키지명] --save를 하면 package.json에 dependencies로 등록됨
추후에 여러가지 명령어를 자세히 다루겠음. 우선 이정도만 알아두자.
Node.js sample
다음은 node.js 홈페이지에서 가장 처음에 볼 수 있는 소스코드이다.
간단하게 설명하자면 require을 통해 http 모듈을 사용하여 해당 hostname과 port에 접속하면 'Hello World'를 response해주는 스크립트이다.
const http = require('http');
const hostname = '127.0.0.1';
const port = 3000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World\n');
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
'Web > Nodejs' 카테고리의 다른 글
Node.js (Supervisor) (0) | 2020.04.04 |
---|---|
Node.js (쿼리) (0) | 2020.01.17 |
Node.js (Express, 템플릿 엔진) (0) | 2020.01.11 |
Node.js (Express) (0) | 2020.01.08 |