티스토리 뷰

🐱‍👤Express는 Node.js를 위한 빠르고 개방적인 간결한 웹 프레임워크이다. 

  • 웹 및 모바일 어플리케이션을 지원
  • API : 자유롭게 활용할 수 있는 수많은 http 유틸리티 메서드 및 미들웨어 제공
  • 성능: 웹 어플리케이션 기능으로 구성된 얇은 계층을 제공하여, Node.js 기능을 모호하게 만들지 않음
  • Framworks: 많은 유명한 프레임워크들이 Express를 기반으로 하고있다. 

🐱‍👤Express와 Node란? 

Node는 오픈소스, 크로스 플랫폼이며, 개발자가 모든 종류의 서버 사이드 도구들과 어플리케이션을 JS로 만들수 있또록 해주는 런타임환경이다. 런타임은 브라우저 영역 밖에서도 사용할 수 있도록 의도했다.(e.g. 서버 OS 또는 컴퓨터에서 직접적으로 실행되는 어플리케이션) 이와 같이, 이 환경에서 특정 브라우저에서의 자바스크립트 API들을 제외시키고, HTTP와 파일 시스템 라이브러리들을 포함하여 더 많은 전형적인 OS API들을 추가했다. 

 

Node 자체가 다른 일반적인 웹 개발 기능을 지원하지는 않는다. 만약 다른 HTTP 패턴( GET, POST, DELETE 등)에 대한 특정 처리를 추가하려면 서로 다른 URL 경로("routes")를 사용하여 요청을 개별적으로 처리, 정적 파일을 제공, 템플릿을 사용하여 동적으로 응답을 생성할 수 있으며, 코드를 직접 작성할 필요가 생기게된다. -> 직접 구현하는 작업을 피하기 위해 웹 프레임워크를 사용할 수 있다. 그게 바로 Express ! (가장 인기있는 Node 웹 프레임워크이자 다른 많은 node web frameworks의 기본라이브러리이다.)

 

🐱‍👤Express 제공 매커니즘

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

Express 자체는 꽤나 최소한의 기능만 탑재하지만 개발자들이 거의 모든 웹 개발의 문제를 다루는 호환성있는 미들웨어 패키지를 만들어왔다. 쿠키, 세션, 사용자 로그인, URL 파라미터, POST 데이터, 보안 헤더와 그 외 많은 것들에 대한 라이브러리들이 있다.  Express Middleware 에서 Express 팀이 유지보수하는 미들웨어 패키지 리스트를 확인할 수 있음( 유명한 서드파티 패키지들 포함)

 

Express middleware

Express middleware The Express middleware modules listed here are maintained by the Expressjs team. Middleware module Description Replaces built-in function (Express 3) body-parser Parse HTTP request body. See also: body, co-body, and raw-body. express.bod

expressjs.com

🐱‍👤Express 사용해보기 

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

app.get('/', function (req, res) {
  res.send('Hello World!');
});

app.listen(3000, function () {
  console.log('Example app listening on port 3000!');
});
  • express 모듈을 require(임포트)하여 express 애플리케이션 생성
  • 이 객체의 이름은 전통적으로 app으로 한다. 이 객체는 HTTP 요청 라우팅, 미들웨어 구성, HTML 보기 렌더링, 템플릿 엔진 등록, 애플리케이션의 동작 방식을 제어하는 애플맄이션 설정 수정(e.g. 환경 모드, 경로 정의의 대소문자 구분 여부 등)을 위한 메서드가 있다. 

Node는 싱글 스레드 이벤트 기반 환경이기 때문에 non-blocking 비동기 API는 브라우저보다 Node에서 훨씬 더 중요하다. 

'싱글 스레드'는 서버에 모든 요청이 별도의 프로세스로 생성되지 않고 동일한 스레드에서 실행되는 것을 의미한다. 

 

🐱‍👤사용해보기 2 (미들웨어 함수)

__dirname : 현재 실행중인 파일의 디렉토리 경로를 나타내는 Node.js의 전역변수 
이 변수는 Node.js 에서 파일 경로를 참조할 때 유용하게 사용된다. 
const express = require("express");
const app = express();
const path = require("path");
const PORT = process.env.PORT || 3500;

// express.static() 미들웨어를 사용하여 정적 파일을 제공할 때, __dirname을 사용하여 
// 현재 파일이 위치한 디렉토리 경로를 지정하고, 정적 파일이 위치한 디렉토리 경로를 결합하여 
// `절대 경로`를 생성한다. 
app.use("/", express.static(path.join(__dirname, "/public")));

app.use("/", require("./routes/root"));

// 서버 수준에 있기 때문에 폴더 밖으로 나갈필요 x 

app.all("*", (req, res) => {
  res.status(404);
  if (req.accepts("html")) {
    res.sendFile(path.join(__dirname, "views", "404.html"));
  } else if (req.accepts("json")) {
    res.json({ message: "404 Not Found" });
  }
});
  • app.all() 코드 부분은 express 어플리케이션에서 모든 요청 경로에 대해 404응답을 보내는 미들웨어 함수이다. 
  • 즉. 클라이언트가 요청한 경로가 존재하지 않을 경우 호출된다. 
  • app.all() 메서드를 사용하여 모든 HTTP 요청메서드에 대해 처리한다. 첫번째 매개변수 "*"은 모든 경로를 의미한다.
  • req.accepts() 함수는 클라이언트가 Accept 헤더를 통해 요청한 콘텐츠 타입(content type)을 반환한다.
  • 클라이언트가 HTML 형식으로 응답을 요청한 경우에는 서버가 404.html 파일을 전송하고, JSON 형식으로 응답을 요청한 경우에는 메세지를 담은 JSON 객체를 반환한다. 
  • 정리: 위의 코드는 미들웨어 함수이며 클라이언트의 요청에 따라 HTML 또는 JSON 형식으로 404응답을 반환하는 코드이다. 

🐱‍👤데이터베이스의 사용

Express app은 Node를 지원하는 데이터베이스를 사용할 수 있다. (Express 자체에는 데이터베이스를 처리하는 기능을 제공하진 않는다.) DB 옵션들에는 PostgreSQL, MySQL, Redis, SQLite, MongoDB 등이 있다. 

npm이나 yarn 과 같은 노드 패키지 매니저를 통해 DB 드라이버를 설치해줘야 한다.

아래는 noSQL 종류 중 하나인 mongodb 를 다운받는 명령어이다. 

npm install mongodb

 

all ref: MDN

 

 

Express/Node 소개 - Web 개발 학습하기 | MDN

첫번째 Express 수업에서는 Node, Express를 알아보고, Express 웹 프레임워크 제작의 전반에 대해 배우게 됩니다. 우선 주요 특징들에 대한 틀을 정리한 후 Express 어플리케이션을 구성하는 주요 구성요

developer.mozilla.org

 

댓글