Express는 Node.js 환경에서 가장 널리 사용되는 웹 애플리케이션 프레임워크로, 서버를 쉽고 빠르게 구축할 수 있도록 다양한 기능을 제공합니다. 기본적인 HTTP 모듈보다 훨씬 간단하게 라우팅 처리, 요청/응답 객체 관리, 미들웨어 설정, 정적 파일 제공, 템플릿 엔진 연결 등을 할 수 있어 개발 생산성을 크게 높여줍니다. 특히 RESTful API 구축에 최적화되어 있으며, 수많은 미들웨어와 플러그인 생태계를 통해 다양한 웹 서비스에 손쉽게 확장할 수 있는 것이 장점입니다.
npm install express
const express = require('express');
const app = express();
const port = 3000;
// 기본 라우팅
app.get('/', (req, res) => {
res.send('Hello Express!');
});
app.listen(port, () => {
console.log(`서버 실행 중 → http://localhost:${port}`);
});
📁 폴더 구조
express-demo/
├── app.js
├── views/
│ ├── hello.ejs
│ └── posts.ejs
├── public/
│ └── index.html
app.js
const express = require("express");
const path = require("path");
const app = express();
const port = 3000;
// 미들웨어 설정
app.use(express.urlencoded({ extended: true })); // POST 요청용
app.use(express.static("public")); // 정적 파일 제공
// EJS 설정
app.set("view engine", "ejs");
app.set("views", path.join(__dirname, "views"));
// 기본 라우팅
app.get("/", (req, res) => {
res.send("홈페이지입니다. 다양한 기능을 테스트해보세요.");
});
// URL 파라미터
app.get("/user/:id", (req, res) => {
res.send(`요청한 사용자 ID는 ${req.params.id}입니다.`);
});
// 쿼리 스트링
app.get("/search", (req, res) => {
const { keyword } = req.query;
res.send(`검색어: ${keyword}`);
});
// POST 요청 처리
app.post("/submit", (req, res) => {
const { name, age } = req.body;
res.send(`이름: ${name}, 나이: ${age}`);
});
// EJS 템플릿 - hello
app.get("/hello", (req, res) => {
res.render("hello", { name: "김사과" });
});
// EJS 템플릿 - posts
app.get("/posts", (req, res) => {
const posts = [
{ title: "첫 번째 글", content: "내용입니다." },
{ title: "두 번째 글", content: "Express는 정말 편하네요!" },
];
res.render("posts", { posts });
});
// 서버 실행
app.listen(port, () => {
console.log(`서버 실행 중: http://localhost:${port}`);
});
views/hello.ejs
<!DOCTYPE html>
<html>
<head><title>인사 페이지</title></head>
<body>
<h1>안녕하세요, <%= name %>님!</h1>
</body>
</html>
views/posts.ejs
<!DOCTYPE html>
<html>
<head><title>게시판</title></head>
<body>
<h1>게시글 목록</h1>
<% posts.forEach(post => { %>
<div>
<h2><%= post.title %></h2>
<p><%= post.content %></p>
</div>
<hr>
<% }); %>
</body>
</html>
public/index.html
<!DOCTYPE html>
<html>
<head><title>정적 파일</title></head>
<body>
<h1>이것은 정적 HTML 파일입니다.</h1>
</body>
</html>
테스트 경로 정리
RESTful이란 웹 애플리케이션에서 리소스를 중심으로 설계된 API 방식으로, REST(Representational State Transfer) 아키텍처 스타일을 따르는 웹 서비스입니다. RESTful한 시스템은 URL을 통해 자원을 표현하고, HTTP 메서드(GET, POST, PUT, DELETE 등)를 통해 자원에 대한 행위를 명확하게 구분합니다. 예를 들어 /users는 사용자 목록이라는 자원을 의미하고, 여기에 GET 요청을 보내면 목록을 조회하고, POST는 새 사용자를 생성하며, /users/1에 PUT 요청을 보내면 1번 사용자를 수정하는 방식입니다. RESTful API는 구조가 직관적이고 일관성이 있어 클라이언트와 서버 간의 통신이 명확하고 유지보수에 용이합니다.
RESTful은 REST 아키텍처 스타일을 따르는 웹 API 설계 방식입니다.
const express = require('express');
const app = express();
const port = 3000;
app.use(express.json()); // JSON 본문 파싱
// 게시글 목록 조회
app.get('/posts', (req, res) => {
res.send('모든 게시글을 조회합니다.');
});
// 게시글 등록
app.post('/posts', (req, res) => {
const { title, content } = req.body;
res.send(`게시글 등록됨: ${title}`);
});
// 게시글 하나 조회
app.get('/posts/:id', (req, res) => {
res.send(`${req.params.id}번 게시글을 조회합니다.`);
});
// 게시글 수정 (전체)
app.put('/posts/:id', (req, res) => {
const { title, content } = req.body;
res.send(`${req.params.id}번 게시글을 수정했습니다. (${title})`);
});
// 게시글 부분 수정
app.patch('/posts/:id', (req, res) => {
res.send(`${req.params.id}번 게시글을 일부 수정했습니다.`);
});
// 게시글 삭제
app.delete('/posts/:id', (req, res) => {
res.send(`${req.params.id}번 게시글을 삭제했습니다.`);
});
app.listen(port, () => {
console.log(`서버 실행 중 → http://localhost:${port}`);
});