Search
☑️

241022_1151_express 5.0 release

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”