Web/Nodejs

Node.js

알로그 2020. 1. 6. 23:32
반응형

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 (software) - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search JavaScript package manager npm (originally short for Node Package Manager)[3] is a package manager for the JavaScript programming language. It is the default package manager for the Ja

en.wikipedia.org

 

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