Express 4.x에서 사용했던 코딩 방식과 Express 5.0에서 바뀐 코딩 방식의 주요 차이를 비교한 예시를 소개함.
1. 비동기 핸들러 (Async/Await 지원)
Express 4.x 방식
•
콜백 함수와 try-catch 문을 통해 비동기 처리
app.get('/user', function(req, res, next) {
getUserData(function(err, data) {
if (err) {
next(err); // 오류를 명시적으로 넘겨줌
} else {
res.send(data);
}
});
});
JavaScript
복사
Express 5.0 방식
•
async/await로 비동기 코드를 간결하게 작성할 수 있으며, 오류가 자동으로 처리됨
app.get('/user', async (req, res, next) => {
try {
const data = await getUserData();
res.send(data);
} catch (err) {
next(err); // 비동기에서 발생한 오류도 자동으로 처리됨
}
});
JavaScript
복사
2. 오류 처리 미들웨어
Express 4.x 방식
•
오류 처리 미들웨어는 비동기 코드에서 명시적으로 호출되어야 함
app.use(function (err, req, res, next) {
console.error(err.stack);
res.status(500).send('Something broke!');
});
JavaScript
복사
Express 5.0 방식
•
비동기 핸들러에서 발생하는 오류도 자동으로 처리됨
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).send('Something broke!');
});
JavaScript
복사
3. 내장 미들웨어 사용 방식
Express 4.x 방식
•
body-parser 같은 미들웨어가 Express에 내장되어 있었음
const express = require('express');
const app = express();
app.use(express.json()); // JSON 요청 처리
app.use(express.urlencoded({ extended: true })); // URL-encoded 요청 처리
JavaScript
복사
Express 5.0 방식
•
Express 5.0에서는 일부 내장 미들웨어가 제거되었으며, 별도 설치가 필요
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
JavaScript
복사
4. 라우팅 체이닝
Express 4.x 방식
•
체이닝 기능을 사용하지 않고 개별적으로 핸들러를 작성
app.get('/users', (req, res) => {
res.send('Get all users');
});
app.post('/users', (req, res) => {
res.send('Create a user');
});
JavaScript
복사
Express 5.0 방식
•
라우트 체이닝을 통해 더 간결하게 작성 가능
app.route('/users')
.get((req, res) => {
res.send('Get all users');
})
.post((req, res) => {
res.send('Create a user');
});
JavaScript
복사
5. 미들웨어 순서
Express 4.x 방식
•
미들웨어를 체인으로 명시적으로 설정해야 했음
const logRequest = (req, res, next) => {
console.log('Request URL:', req.originalUrl);
next();
};
const logMethod = (req, res, next) => {
console.log('Request Method:', req.method);
next();
};
app.use(logRequest);
app.use(logMethod);
app.get('/', (req, res) => {
res.send('Home Page');
});
JavaScript
복사
Express 5.0 방식
•
미들웨어 체이닝을 사용해 더 간결하게 작성 가능
const logRequest = (req, res, next) => {
console.log('Request URL:', req.originalUrl);
next();
};
const logMethod = (req, res, next) => {
console.log('Request Method:', req.method);
next();
};
app.use(logRequest, logMethod); // 여러 미들웨어를 한 번에 적용
app.get('/', (req, res) => {
res.send('Home Page');
});
JavaScript
복사
6. Node.js 모듈 시스템 (ESM 지원)
Express 4.x 방식
•
CommonJS(require) 모듈 시스템만 사용 가능
const express = require('express');
const app = express();
JavaScript
복사
Express 5.0 방식
•
ECMAScript 모듈 시스템(import/export)을 사용할 수 있음
import express from 'express';
const app = express();
JavaScript
복사
7. Deprecated 기능들
Express 4.x 방식
•
특정 기능들이 deprecate 상태로 경고만 출력됨
app.get('/old-route', function(req, res) {
res.send('Old route');
});
JavaScript
복사
Express 5.0 방식
•
deprecate된 기능들은 제거됨, 예를 들어 res.sendfile() 같은 함수는 더 이상 사용할 수 없음
•
새로운 기능으로 교체 필요
// res.sendfile()는 Express 5.0에서 제거됨, 대체 방법은 res.sendFile()
app.get('/file', (req, res) => {
res.sendFile('/path/to/file');
});
JavaScript
복사
결론
•
Express 5.0은 비동기 핸들러 지원, 미들웨어 관리 방식, ESM 지원 등 다양한 기능 개선을 통해 코드 작성 방식이 더 간결하고 직관적임.
•
Express 4.x에서 작성된 코드를 Express 5.0에서 동작하게 하려면, 일부 API 변경 사항을 적용하고 새로운 기능들을 활용하는 것이 좋음.
안녕하세요
•
한국전자기술연구원 김영광입니다.
•
관련 기술 문의와 R&D 공동 연구 사업 관련 문의는 “glory@keti.re.kr”로 연락 부탁드립니다.
Hello 
•
I'm Yeonggwang Kim from the Korea Electronics Research Institute.
•
For technical and business inquiries, please contact me at “glory@keti.re.kr”