Express는 Node.js 환경에서 가장 널리 사용되는 웹 애플리케이션 프레임워크입니다.
쉽게 말해, Node.js로 HTTP 서버를 만들 때 복잡한 코드를 단순하게 줄여주는 도구입니다. 웹 서버 개발을 더 빠르고 간편하게 할 수 있도록 도와주는 역할을 합니다.
Node.js만으로도 웹 서버를 만들 수 있지만, 다음과 같은 불편함이 있습니다.
const http = require("http");
const server = http.createServer((req, res) => {
if (req.url === "/") {
res.write("Hello Wolrd");
res.end();
}
});
이러한 복잡한 과정을 해결해주는 프레임워크가 바로 Express입니다.
Express는 Node.js의 복잡한 서버 구현 코드를 간결하고 직관적인 코드로 바꿔주며, 웹 서버 개발을 빠르고 편하게 할 수 있도록 도와줍니다.
npm install express
package.json의 dependencies에 자동으로 등록됩니다.Express를 사용하면 복잡한 Node.js 서버 코드를 간단하게 만들 수 있습니다.
가장 기본적인 Express 서버 코드는 다음과 같습니다.
const express = require("express");
const app = express();
app.get("/", (req, res) => {
res.send("Hello Express!");
});
app.listen(3000, () => {
console.log("서버 실행 중: http://localhost:3000");
});
| 코드 | 설명 |
|---|---|
| express() | 서버 인스턴스를 생성합니다. (앱 객체) |
| app.get() | GET 요청을 받을 때 실행할 콜백 함수를 등록합니다. |
| res.send() | 클라이언트에 응답을 보냅니다. |
| app.listen() | 서버를 3000번 포트에서 실행합니다. |
최신 Express 튜토리얼에서는 require() 대신 import를 사용하는 예제도 많습니다.
이는 Node.js의 ES 모듈(ESM) 방식을 사용하는 경우입니다.
Node.js는 원래 CommonJS 방식(require, module.exports)을 사용했습니다.
// CommonJS 방식 (기존 스타일)
const express = require("express");
최신 Node.js에서는 ES 모듈(ECMAScript Module) 방식도 지원합니다.
// ES 모듈 방식 (최신 스타일)
import express from "express";
| 구분 | CommonJS (require) | ES 모듈 (import) |
|---|---|---|
| 기본 방식 | Node.js 기본 방식 | 브라우저 및 ES6 표준 |
| 문법 | require() / module.exports | import / export |
| 설정 필요 | 없음 | package.json에 "type": "module" 설정 |
package.json에 다음 설정을 추가해야 합니다.
Node.js 입장에서는 .js 파일을 보고 “이걸 CJS 방식으로 읽을까? ESM으로 읽을까?” 결정해야 하는데, 이걸 판단할 기준이 바로 package.json의 "type": "module" 설정입니다.
// package.json
{
"type": "module"
}
.js 파일을 ESM 방식으로 해석합니다. 따라서 아래와 같이 import를 사용할 수 있습니다.import express from "express";
import dotenv from "dotenv";
app.get("/about", (req, res) => {
res.send("About 페이지입니다.");
});
app.post("/login", (req, res) => {
res.send("로그인 요청을 처리합니다.");
});
/about,/login 등)에 대한 로직을 분리해서 관리 가능| 기능 | 코드 예시 | 설명 |
|---|---|---|
| JSON 파싱 | app.use(express.json()); | 요청 body의 JSON 데이터를 자동으로 파싱해줌 |
| 쿼리 파라미터 | req.query.name | URL 뒤의 ?name=value에서 값 추출 |
| URL 파라미터 | req.params.id | /user/:id 형식의 경로에서 값 추출 |
| 상태코드 설정 | res.status(404).send("Not Found") | HTTP 응답 코드 직접 설정 가능 |
| JSON 응답 | res.json({ msg: "OK" }) | 클라이언트에게 JSON 형식 데이터를 반환 (API 응답용) |
| 패키지 | 용도 |
|---|---|
| nodemon | 코드 변경 시 서버 자동 재시작 |
| dotenv | 환경변수 관리 (.env 파일 사용) |
| body-parser | 요청 바디(body) 파싱 (express 4.16 이후부터는 내장됨) |
| cors | CORS(Cross-Origin) 문제 해결 |
| morgan | 요청 로그 기록 미들웨어 |