상세 컨텐츠

본문 제목

Express

백엔드/Node.js

by Ryuzy 2025. 4. 22. 19:36

본문

728x90
반응형

1. Express

Express는 Node.js 환경에서 가장 널리 사용되는 웹 애플리케이션 프레임워크로, 서버를 쉽고 빠르게 구축할 수 있도록 다양한 기능을 제공합니다. 기본적인 HTTP 모듈보다 훨씬 간단하게 라우팅 처리, 요청/응답 객체 관리, 미들웨어 설정, 정적 파일 제공, 템플릿 엔진 연결 등을 할 수 있어 개발 생산성을 크게 높여줍니다. 특히 RESTful API 구축에 최적화되어 있으며, 수많은 미들웨어와 플러그인 생태계를 통해 다양한 웹 서비스에 손쉽게 확장할 수 있는 것이 장점입니다.

 

1. 설치

npm install express

 

2. 앱 생성

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}`);
});

 

3. 통합 예제

📁 폴더 구조

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>

 

테스트 경로 정리

 

 

2. RESTful

RESTful이란 웹 애플리케이션에서 리소스를 중심으로 설계된 API 방식으로, REST(Representational State Transfer) 아키텍처 스타일을 따르는 웹 서비스입니다. RESTful한 시스템은 URL을 통해 자원을 표현하고, HTTP 메서드(GET, POST, PUT, DELETE 등)를 통해 자원에 대한 행위를 명확하게 구분합니다. 예를 들어 /users는 사용자 목록이라는 자원을 의미하고, 여기에 GET 요청을 보내면 목록을 조회하고, POST는 새 사용자를 생성하며, /users/1에 PUT 요청을 보내면 1번 사용자를 수정하는 방식입니다. RESTful API는 구조가 직관적이고 일관성이 있어 클라이언트와 서버 간의 통신이 명확하고 유지보수에 용이합니다.

 

1. HTTP 메서드

 

2. RESTful URL 예시 (게시판 예)

RESTful은 REST 아키텍처 스타일을 따르는 웹 API 설계 방식입니다.

  • REST는 Representational State Transfer의 약자로, 자원을 URL로 표현하고,
  • 자원에 대한 행동(조회, 생성, 수정, 삭제)은 HTTP 메서드(GET, POST, PUT, DELETE)로 구분합니다.

 

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}`);
});
728x90
반응형

'백엔드 > Node.js' 카테고리의 다른 글

JSON Web Token  (0) 2025.04.26
라우트  (0) 2025.04.23
EJS  (0) 2025.04.22
http 모듈  (0) 2025.04.22
파일 입출력  (0) 2025.04.22

관련글 더보기