[JS] Express

hye0n.gyu·2024년 9월 22일
1

백엔드 환경

목록 보기
3/7
post-thumbnail

⭐ Express 개요

Express는 Node.js를 위한 경량 웹 애플리케이션 프레임워크로, 서버 사이드 개발을 쉽게 해준다.



✔ 프레임워크와 라이브러리의 차이

정의

  • 프레임워크: 개발자가 특정 방식으로 애플리케이션을 구축할 수 있도록 하는 구조와 규칙을 제공하는 기반이다. 프레임워크는 코드의 흐름을 제어하며, 개발자는 그 안에서 작업하게 된다.
  • 라이브러리: 특정 기능이나 작업을 수행하기 위해 개발자가 필요할 때 호출하여 사용할 수 있는 코드 집합이다. 라이브러리는 사용자가 호출하는 방식으로 작동한다.

제어의 흐름

  • 프레임워크: "제어의 역전(Inversion of Control)" 원칙에 따라 작동한다. 즉, 프레임워크가 애플리케이션의 구조와 흐름을 관리하며, 개발자는 이를 따른다.

  • 라이브러리: 개발자가 원하는 때에 호출하여 사용할 수 있다. 즉, 개발자가 코드의 흐름을 직접 제어한다.

Express는 소규모 애플리케이션에서부터 대규모 API 서비스까지 다양한 용도로 사용된다. 특히 RESTful API 서버, 웹 애플리케이션, SPA(Single Page Application) 백엔드 등에서 많이 활용된다.

이러한 특징 덕분에 Express는 Node.js 생태계에서 매우 인기 있는 선택이다.

NPM express doc
https://www.npmjs.com/package/express



⭐ Express 특징

✔ 1. 간단하고 직관적인 API

Express는 사용하기 쉬운 API를 제공하여 개발자가 빠르게 서버를 구축할 수 있도록 돕는다. 기본적인 HTTP 메서드(GET, POST, PUT, DELETE 등)를 통해 라우팅을 쉽게 설정할 수 있다.

✔ 2. 미들웨어

Express의 핵심 개념 중 하나인 미들웨어는 요청과 응답의 처리를 간편하게 해준다. 미들웨어는 특정 요청에 대해 실행되는 함수로, 다음과 같은 작업을 수행할 수 있다:

  • 요청 데이터 파싱
  • 인증 및 권한 부여
  • 오류 처리
  • 로깅

✔ 3. 라우팅

Express는 RESTful API를 구축할 수 있는 강력한 라우팅 기능을 제공해준다. URL 경로와 HTTP 메서드에 따라 요청을 처리할 수 있다. 이를 통해 클라이언트와 서버 간의 명확한 인터페이스를 정의할 수 있다.

✔ 4. 템플릿 엔진

Express는 다양한 템플릿 엔진을 지원하여 동적인 HTML 페이지를 생성할 수 있다. Pug, EJS, Handlebars 등의 엔진을 사용하여 서버에서 HTML 콘텐츠를 동적으로 생성할 수 있다.



⭐ Express 사용법

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

// 기본 라우트 설정
app.get('/', (req, res) => {
  res.send('Hello, World!');
});

// 서버 시작
app.listen(PORT, () => {
  console.log(`Server is running on http://localhost:${PORT}`);
});
~/IvoryExoticTelevisions$ node index.js
Server is running on http://localhost:3000 //console.log 출력


✔ 요청과 응답 객체

요청 객체(req)

  • req.method : 요청의 HTTP 메서드(GET, POST, PUT, DELETE 등)

  • req.url : 요청된 URL 경로

  • req.params : URL 경로에서 추출한 파라미터
    예를 들어, /users/:id 경로에서 :id 부분의 값을 가져올 수 있다.

  • req.query : URL의 쿼리 문자열을 파싱한 값
    예를 들어, /search?keyword=node에서 keyword는 req.query.keyword로 접근할 수 있다.

  • req.body : POST 요청 등의 본문(body) 데이터
    JSON, URL-encoded 데이터 등으로 클라이언트가 보낸 데이터에 접근할 수 있다.

  • req.headers : 요청 헤더 정보
    예를 들어, 클라이언트의 User-Agent나 Content-Type 정보를 확인할 수 있다


응답 객체(res)

  • res.status(code) : 응답의 HTTP 상태 코드를 설정한다.
    예: res.status(404)는 404 Not Found 상태를 설정한다.

  • res.send(body) : 클라이언트에 보낼 응답 본문을 설정한다.
    문자열, 객체, 배열 등을 보낼 수 있다.

  • res.json(data) : JSON 형식의 데이터를 클라이언트에 응답한다.
    자동으로 Content-Type을 application/json으로 설정한다.

  • res.redirect(url) : 클라이언트를 다른 URL로 리다이렉트한다.

  • res.set(header, value) : 응답 헤더를 설정한다.
    예를 들어, res.set('Content-Type', 'text/html')로 HTML 콘텐츠 유형을 설정할 수 있다.

  • res.sendFile(path) : 서버의 파일을 클라이언트에 전송한다. 파일의 경로를 인자로 받는다.



⭐ Express 라우팅

라우팅은 사용자가 웹사이트에서 특정 URL(주소)을 요청했을 때, 그 요청을 처리할 방법을 결정하는 과정이다. 간단히 말해, "어떤 주소에 어떤 행동을 할지"를 정하는 것이다.

✔ 주요 개념

  • URL 경로: 웹사이트의 주소이다.

/home: 홈페이지
/about: 소개 페이지
/users/123: ID가 123인 사용자 페이지

  • HTTP 메서드: 요청의 종류를 나타낸다.

GET: 정보를 요청할 때 사용 (예: 페이지를 보려 할 때)
POST: 새로운 정보를 보낼 때 사용 (예: 회원 가입할 때)
DELETE: 정보를 삭제할 때 사용 (예: 계정을 삭제할 때)

  • 핸들러: URL 요청에 대한 응답을 처리하는 코드이다.
    즉, 요청이 들어오면 어떤 작업을 수행할지를 정의한다.

✔ 예시

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

// '/users' 요청에 대한 핸들러
app.get('/users', (req, res) => {
  res.send('User List'); // 사용자 목록을 응답
});

// 서버 실행
app.listen(3000, () => {
  console.log('Server is running on http://localhost:3000');
});


⭐ Express 쿼리 문자열 처리

? 기호

Express에서 쿼리 문자열을 처리하는 방법은 매우 간단하다. 쿼리 문자열은 URL의 ? 뒤에 오는 부분으로, 여러 개의 키-값 쌍으로 구성된다.

예를 들어, /search?keyword=node&page=2에서 keywordpage가 쿼리 문자열의 키이다.

: 기호

또한 Express.js에서 라우팅에서 사용되는 : 기호는 URL 매개변수를 정의할 때 사용된다.

app.get('/user/:id', (req, res) => {
    const userId = req.params.id;
    res.send(`User ID is ${userId}`);
});

:?의 차이
:는 URL 경로의 일부로서 필수 매개변수 를 나타내고,
?는 URL의 끝에 추가되어 선택적으로 값을 전달하는 쿼리 매개변수 를 나타낸다.


✔ 예시

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

app.get('/search', (req, res) => {
  const keyword = req.query.keyword; // 'keyword' 쿼리 파라미터
  const page = req.query.page;       // 'page' 쿼리 파라미터

  res.send(`Searching for: ${keyword}, Page: ${page}`);
});

app.listen(PORT, () => { // 서버 실행
  console.log(`Server is running on http://localhost:${PORT}`);
});
http://localhost:3000/search?keyword=node&page=2 // url 주소
profile
반려묘 하루 velog

0개의 댓글