[Nodejs] Nodejs와 Express

DongHwan·2021년 5월 19일
0

nodejs

목록 보기
4/11

Nodejs와 Express에 대한 개념을 정리하려고 한다.

Nodejs

Nodejs의 개념

Nodejs는 Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임이다. 런타임(Runtime)이라는 개념은 쉽게 말하면 프로그래밍 언어가 구동되는 환경이라고 할 수 있다. 즉 기존에는 인터넷 브라우저를 통해서 JavaScript를 구동하였던 것과 달리, Nodejs를 통해 JavaScript 프로그램을 실행할 수 있는 것이다.

Nodejs는 Non-Blocking I/O 모델과 이벤트 기반을 구현하고 있다.
Non-Blocking I/O란 입출력을 비동기로 처리하는 것으로 입출력을 하는 동안 프로그램이 멈추지 않고 다른 작업을 계속 할 수 있게 된다. 여기서 말하는 입출력에는 파일 시스템, 데이터베이스에 접근하는 것 외에, 네트워크를 위한 요청 작업 등도 포함된다.
이벤트 기반(event-driven)이라는 것은 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식을 의미한다. 즉, 특정 이벤트가 발생할 때 수행할 작업을 미리 등록해두고, 이후 이벤트가 발생하면 해당 작업을 수행한다.

마지막으로 Nodejs는 싱글 스레드 모델을 기반으로 구현되었다. 그러나 앞에서 언급하였듯 Non-Blocking I/O 모델을 사용하기에, 싱글 스레드가 혼자 일을 처리하지만, 들어온 요청 순서가 아닌 Non-Blocking 방식으로 이전 작업이 완료될 때까지 기다리지 않고 다음 작업을 수행한다.

Nodejs의 특징

웹 어플리케이션을 개발할 경우, JavaScript라는 한가지 언어로 서버와 클라이언트 모두를 개발할 수 있다는 장점이 있다. 또한, 개발을 도와주는 많은 프레임워크와 라이브러리들이 존재한다.

Nodejs는 논 블로킹 I/O 모델을 사용하기에 I/O 요청이 많이 발생하는 경우 매우 효율적이다. 그러나 싱글 스레드 모델이기 때문에 CPU부하가 큰 작업의 경우, 퍼포먼스가 떨어진다. 즉, 실시간 채팅 어플리케이션이나 주식 차트와 같이 CPU를 적게 사용하면서 I/O 요청이 많은 어플리케이션에 적합하다.

Express

Express의 개념

Express는 Nodejs에서 웹 어플리케이션을 위한 일련의 기능들을 제공하는 프레임워크이다. Express는 Nodejs의 핵심 모듈인 httpConnect 컴포넌트를 기반으로 하는 웹 프레임워크이며, 그러한 컴포넌트를 Middleware라고 한다. 이러한 Middleware들 덕분에 웹 개발을 빠르고 쉽게 할 수 있게 한다.

Express에서는 다음과 같은 메커니즘을 제공한다.

  • HTTP 통신 요청(GET, POST, DELETE, ...)에 대한 핸들러를 만든다.
  • 템플릿에 데이터를 넣어 response를 만들기 위해 view의 렌더링 엔진과 결합(integrate)한다.
  • 접속을 위한 포트나 응답 렌더링을 위한 템플릿 위치같은 공통 웹 어플리케이션 세팅을 한다.
  • request handling pipeline 중 필요한 곳에 추가적인 미들웨어 처리 요청을 추가한다.

Express 자체는 꽤나 최소화된 기능만 탑재하였지만, 개발자들이 Middleware 모듈을 만들면서 원하는 기능을 쉽게 이용할 수 있게 되었다.

Express 설치

npm install express

Express 사용

const express = require('express');
const app = express();

app.get('/', (req, res) => {
  res.send('hello world!');
}
app.post('/', (req, res) => {
  res.send('hello world!');
}

app.listen(3000, () => {
  console.log('listening on port 3000');
}

서버를 생성하는 절차를 express에서 맡아주기 때문에 간단하게 서버를 제작할 수 있다. 또한, Routing 역시 express에서 제공하는 함수를 이용해 간단하게 구현가능하다.

참조

https://developer.mozilla.org/ko/docs/Learn/Server-side/Express_Nodejs/Introduction
https://nodejs.org/en/
https://expressjs.com/

profile
날 어떻게 한줄로 소개해~

0개의 댓글