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는 사용하기 쉬운 API를 제공하여 개발자가 빠르게 서버를 구축할 수 있도록 돕는다. 기본적인 HTTP 메서드(GET, POST, PUT, DELETE 등)를 통해 라우팅을 쉽게 설정할 수 있다.
Express의 핵심 개념 중 하나인 미들웨어는 요청과 응답의 처리를 간편하게 해준다. 미들웨어는 특정 요청에 대해 실행되는 함수로, 다음과 같은 작업을 수행할 수 있다:
Express는 RESTful API
를 구축할 수 있는 강력한 라우팅 기능을 제공해준다. URL 경로와 HTTP 메서드에 따라 요청을 처리할 수 있다. 이를 통해 클라이언트와 서버 간의 명확한 인터페이스를 정의할 수 있다.
Express는 다양한 템플릿 엔진을 지원하여 동적인 HTML 페이지를 생성할 수 있다. Pug
, EJS
, Handlebars
등의 엔진을 사용하여 서버에서 HTML 콘텐츠를 동적으로 생성할 수 있다.
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)
: 서버의 파일을 클라이언트에 전송한다. 파일의 경로를 인자로 받는다.
라우팅은 사용자가 웹사이트에서 특정 URL(주소)을 요청했을 때, 그 요청을 처리할 방법을 결정하는 과정이다. 간단히 말해, "어떤 주소에 어떤 행동을 할지"를 정하는 것이다.
/home
: 홈페이지
/about
: 소개 페이지
/users/123
: ID가 123인 사용자 페이지
GET
: 정보를 요청할 때 사용 (예: 페이지를 보려 할 때)
POST
: 새로운 정보를 보낼 때 사용 (예: 회원 가입할 때)
DELETE
: 정보를 삭제할 때 사용 (예: 계정을 삭제할 때)
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에서 쿼리 문자열을 처리하는 방법은 매우 간단하다. 쿼리 문자열은 URL의 ?
뒤에 오는 부분으로, 여러 개의 키-값
쌍으로 구성된다.
예를 들어, /search?keyword=node&page=2
에서 keyword
와 page
가 쿼리 문자열의 키이다.
:
기호또한 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 주소