2024. 11. 17. 20:26ㆍ정보처리,전산/NODEJS
1. Express JS
Express.js는 Node.js 환경에서 웹 서버와 API를 쉽게 구축할 수 있도록 도와주는 웹 프레임워크이다. Express는 라우팅, 미들웨어 지원, HTTP 요청 및 응답 처리, 템플릿 렌더링 등의 기능을 제공하여 Node.js로 웹 애플리케이션을 개발할 때 필수적인 도구이다.
2. HTTP Request
HTTP 요청은 클라이언트가 서버에 보내는 데이터이다. 일반적으로 URL, HTTP 메서드(GET, POST, PUT, DELETE 등), 헤더, 본문(body) 등을 포함한다. 클라이언트는 이 요청을 통해 서버에 정보를 요청하거나 서버의 데이터를 변경할 수 있다.
HTTP 요청의 주요 부분:
- URL: 요청하는 리소스의 주소이다. , /users/1은 사용자의 정보에 접근하는 경로일 수 있다.
- HTTP 메서드: 요청의 종류를 정의한다. 예: GET (데이터 요청), POST (데이터 생성), PUT (데이터 수정), DELETE (데이터 삭제).
- 헤더: 요청에 대한 추가 정보를 포함한다. 예: Content-Type, Authorization 등.
- 본문: POST 또는 PUT 요청에서 서버에 보내는 데이터이다.
3. HTTP Response
HTTP 응답은 서버가 클라이언트에게 보내는 데이터이다. 이 응답에는 상태 코드, 헤더, 본문이 포함될 수 있다. , 200 OK는 요청이 성공적으로 처리되었음을 의미한다.
HTTP 응답의 주요 부분:
- 상태 코드: 요청이 성공했는지, 오류가 발생했는지 등의 정보를 담고 있다. 예: 200 OK, 404 Not Found, 500 Internal Server Error.
- 헤더: 응답에 대한 추가 정보를 포함한다. 예: Content-Type, Cache-Control 등.
- 본문: 실제 응답 데이터가 포함된다. 예: HTML, JSON, 텍스트 등의 데이터.
4. 미들웨어 (Middleware)
미들웨어는 요청을 처리하는 과정에서 중간 단계로 작동하는 함수이다. Express.js에서 미들웨어는 요청을 받아서 응답을 보내기 전에 추가적인 작업을 수행할 수 있게 해준다. 요청이 들어올 때마다 미들웨어를 통해 지나가며, 여러 미들웨어가 연쇄적으로 실행된다.
미들웨어의 예:
- 로깅: 모든 요청에 대해 로그를 출력하는 미들웨어.
- 인증: 사용자가 로그인했는지 확인하는 미들웨어.
- 데이터 파싱: 요청 본문(body)에서 JSON 데이터를 파싱하는 미들웨어.
미들웨어는 순차적으로 실행되며, 각각의 미들웨어는 next()를 호출하여 다음 미들웨어로 요청을 넘긴다. 만약 미들웨어가 응답을 보낸다면, next()를 호출하지 않고 응답을 종료한다.
미들웨어 처리 순서
- 클라이언트 요청: 클라이언트가 서버에 요청을 보낸다.
- 미들웨어 실행: 요청이 서버에 도달하면, 미들웨어가 차례대로 실행된다.
- 라우팅: 요청을 처리할 수 있는 라우트가 실행되고, 적절한 응답이 반환된다.
Turing.com - Middleware for Node.js
A Complete Guide on How to Build Middleware For Node.js.
- Express JS는 웹 애플리케이션 개발을 위한 Node.js 프레임워크로, HTTP 요청과 응답을 쉽게 처리할 수 있게 도와준다.
- 미들웨어는 요청과 응답 사이에 중간 처리를 하는 기능으로, 여러 미들웨어를 통해 순차적으로 작업을 수행할 수 있다.
- HTTP 요청과 응답은 클라이언트와 서버 간의 데이터 교환을 위한 기본적인 단위이며, 이를 통해 다양한 작업을 수행할 수 있다.
미들웨어를 이용한 요청 시간 측정
Express 미들웨어를 사용하여 HTTP 요청과 응답을 처리하는 동안 소요된 시간을 측정하고, 해당 시간을 로그로 출력하는 기능을 구현한 예제이다.
app.use((req, res, next) => {
// 요청이 시작된 시간을 기록한다.
const start = Date.now();
// 요청의 메서드와 URL을 로그로 출력한다.
console.log(`${req.method} ${req.url}`);
// 다음 미들웨어나 라우트 핸들러로 요청을 전달한다.
next();
// 요청이 완료된 후 소요된 시간을 계산한다.
const diffTime = Date.now() - start;
// 응답이 완료된 후 경과 시간을 로그로 출력한다.
console.log(`end: ${req.method} ${req.url}, ${diffTime}ms`);
});

- const start = Date.now();:
- 요청을 처리하기 시작할 때의 시간을 기록한다. Date.now()는 현재 시간을 밀리초 단위로 반환한다.
- console.log(${req.method} ${req.url});:
- 요청을 받으면, HTTP 메서드(예: GET, POST 등)와 요청 URL을 콘솔에 출력한다.
- , GET /home과 같은 형태로 출력된다.
- next();:
- 이 부분은 요청을 다음 미들웨어나 라우터 핸들러로 전달하는 역할을 한다.
- next()가 호출되어야만 요청이 실제로 처리되고 응답을 받을 수 있다.
- const diffTime = Date.now() - start;:
- 요청이 끝난 후, Date.now()를 다시 호출하여 현재 시간을 구하고, 시작 시간과의 차이를 계산하여 요청 처리에 걸린 시간을 구한다.
- console.log(end: ${req.method} ${req.url}, ${diffTime}ms);:
- 요청이 처리된 후 경과 시간을 출력한다. end: GET /home, 45ms와 같은 형식으로 출력된다.
미들웨어 작동 흐름
- 요청 시작: 클라이언트가 요청을 보내면, 첫 번째 미들웨어에서 요청을 받는다.
- 시작 시간 기록: 요청이 들어오면 시작 시간을 기록하고, 요청의 메서드와 URL을 로그로 출력한다.
- 요청 처리: next()가 호출되면서 요청은 다음 미들웨어나 라우터로 전달된다.
- 요청 종료 및 시간 계산: 요청이 처리된 후, 끝난 시간을 기록하여 처리 시간(diffTime)을 계산하고 로그로 출력한다.
요청 본문을 처리하는 미들웨어 사용 및 사용자 추가
Express.js에서 express.json() 미들웨어를 사용하여 HTTP POST 요청의 본문을 처리하고, 요청 본문에 담긴 데이터를 기반으로 새로운 사용자를 추가하는 기능을 구현
- app.use(express.json());:
- 이 미들웨어는 요청 본문(body)이 JSON 형식일 경우, 해당 본문을 자동으로 파싱하여 req.body 객체에 저장해준다.
- 즉, 클라이언트에서 보낸 JSON 데이터를 req.body에서 쉽게 사용할 수 있게 된다.
- app.post('/users', (req, res) => {...});:
- 이 부분은 POST 요청이 /users 경로로 들어올 때 실행되는 라우트 핸들러이다.
- 클라이언트에서 POST /users 요청을 보내면, 요청 본문을 처리하고 새로운 사용자를 추가하는 로직을 수행한다.
- console.log('req.body.name:' + req.body.name);:
- 요청 본문에 포함된 name 값을 콘솔에 출력한다. , 클라이언트에서 { "name": "John" }라는 JSON을 보내면 req.body.name은 "John"이 된다.
- const newUser = { name: req.body.name, id: Users.length };:
- 새로운 사용자 객체를 생성한다. req.body.name으로 받은 이름을 사용하고, 사용자 ID는 Users.length로 설정한다. Users.length는 현재 사용자 목록의 크기이므로, 이 값을 ID로 설정하여 사용자마다 고유한 ID를 부여한다.
- Users.push(newUser);:
- 새로 생성한 사용자 객체를 Users 배열에 추가한다. 이 배열은 서버 내에서 사용자 목록을 저장하는 곳이다.
- res.json(newUser);:
- 응답으로 새로 생성된 사용자 객체를 JSON 형식으로 클라이언트에 반환한다.
'정보처리,전산 > NODEJS' 카테고리의 다른 글
클로저 | 실행컨텍스트 (0) | 2024.11.23 |
---|---|
JWT (0) | 2024.11.18 |
Express.js 미들웨어 설정 Postman으로 요청한 경우의 동작 (0) | 2024.11.17 |
nodemon 설치 | 설정 (0) | 2024.11.17 |
POST 요청을 처리하여 데이터를 서버의 객체에 업데이트 (0) | 2024.11.17 |