# Express v5 출시 - Node.js 프레임워크의 새로운 시대

> Clean Markdown view of GeekNews topic #17320. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=17320](https://news.hada.io/topic?id=17320)
- GeekNews Markdown: [https://news.hada.io/topic/17320.md](https://news.hada.io/topic/17320.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-10-20T09:00:36+09:00
- Updated: 2024-10-20T09:00:36+09:00
- Original source: [expressjs.com](https://expressjs.com/2024/10/15/v5-release.html)
- Points: 7
- Comments: 4

## Topic Body

- 10년전 첫번째 v5 PR이 등록되었는데, 드디어 머지 & 퍼블리시됨   
- 향후 릴리스에서 더 영향력 있는 변화를 구현하기 위해 의도적으로 단순화된 릴리스   
- 또한 Express가 다시 움직이고 있다는 것을 Node.js 생태계에 알리는 것이기도 함   
### 주요 변경 사항   
- Node.js 버전 지원 변경  
  - Node.js 0.10 지원 중단, Node 18 이상 지원으로 변경됨  
  - 이전 Node.js 버전 지원으로 인해 성능 및 유지 관리에 중요한 변경 사항이 지연된 문제 해결됨  
  - 새로운 언어 및 런타임 기능 채택, 더 이상 필요하지 않은 의존성 제거 가능해짐  
  - 오래된 Node.js 버전을 사용하는 기업의 어려움을 인식하고 HeroDevs와 제휴하여 v4 지원 종료 이후에도 중요한 보안 패치를 제공하는 "무기한 지원" 제공 예정임  
  
- 경로 일치 및 정규식 변경  
  - `path-to-regexp` 라이브러리가 0.x에서 8.x로 업데이트되어 여러 해 동안의 변경 사항이 통합됨  
  - 정규식 서브 표현식 (예: `/:foo(\\d+)`) 지원 중단됨  
    - ReDoS 공격 방지를 위해 제거됨  
    - 마이그레이션 방법: 견고한 입력 유효성 검사 라이브러리 사용 권장  
  - 공통 경로 패턴에 대한 단순화된 패턴 포함됨  
    - `:name?`이 `{:name}`으로 변경됨  
    - `*`이 `*name`으로 변경됨  
    - `(`, `)`, `[`, `]`, `?`, `+`, `!`가 예약 문자로 추가됨  
  - 순서가 지정된 숫자 매개변수 지원 중단됨. 모든 매개변수에 이름을 지정해야 함  
- Promise 지원  
  - 미들웨어에서 발생한 오류로 인해 거부된 Promise에 대한 지원 추가됨  
  - 해결된 Promise에서 `next`를 호출하는 것은 포함되지 않음  
  - 대부분의 경우 이제 다음과 같이 미들웨어를 작성할 수 있음:  
    ```javascript  
    app.use(async (req, res, next) => {  
      req.locals.user = await getUser(req);  
      next();  
    });  
    ```  
- Body parser 변경 사항  
  - CVE-2024-45590 완화를 위해 urlencoded body 깊이를 사용자 지정하는 옵션 추가 (기본값 32)  
  - 더 이상 사용되지 않는 `bodyParser()` 조합 미들웨어 제거됨  
  - `req.body`가 더 이상 항상 `{}`로 초기화되지 않음  
  - `urlencoded` 파서의 `extended` 기본값이 false로 변경됨  
  - Brotli 무손실 데이터 압축 지원 추가됨  
  
- 더 이상 사용되지 않는 메서드 시그니처 제거  
  - `res.redirect('back')` 및 `res.location('back')`: 더 이상 `'back'` 마법 문자열을 지원하지 않음. 대신 `req.get('Referrer') || '/'`을 명시적으로 사용  
  - `res.send(status, body)` 및 `res.send(body, status)` 시그니처: `res.status(status).send(body)` 사용  
  - `res.send(status)` 시그니처: 간단한 상태 응답에는 `res.sendStatus(status)` 사용, 선택적 본문이 있는 상태 코드를 보내려면 `res.status(status).send()` 사용  
  - 기타 더 이상 사용되지 않는 메서드 시그니처 제거됨 (자세한 내용은 마이그레이션 가이드 참조)  
- 마이그레이션 및 보안 지침  
  - v4에서 v5로 마이그레이션하는 개발자를 위한 자세한 마이그레이션 가이드 제공됨  
  - Express의 안전하고 안전한 사용을 위해 사용자 입력 유효성 검사 및 보안 관행과 같은 영역에 대한 중요한 통찰력을 제공하는 포괄적인 위협 모델 제공됨  
  
### GN⁺의 의견  
- Express v5는 Node.js 생태계에 Express가 다시 움직이고 있음을 알리는 데 중점을 둔 릴리스임. 이전 Node.js 버전 지원 중단, 보안 문제 해결, 유지 관리 단순화에 초점을 맞춤   
- 이 릴리스는 의도적으로 단순하게 유지되어 생태계의 장애물을 제거하고 향후 릴리스에서 더 큰 영향을 미치는 변경을 가능하게 함  
- Express는 Node.js를 위한 빠르고, 독단적이지 않으며, 미니멀한 웹 프레임워크라는 철학을 가지고 있음. 이는 사용자 입력 유효성 검사 및 보안 관행과 같은 영역에서 중요한 통찰력을 제공함  
- Express v5로의 마이그레이션을 위한 자세한 가이드와 포괄적인 위협 모델이 제공되어 개발자들이 안전하고 안정적으로 Express를 사용할 수 있도록 도움  
- Express 프로젝트의 새로운 관리자들은 Express 생태계를 안정적이고 신뢰할 수 있는 도구로 발전시키는 것을 목표로 함. 이를 위해 커뮤니티와 협력하여 문제를 해결하고 개선해 나갈 예정임

## Comments



### Comment 30278

- Author: aer0700
- Created: 2024-10-22T10:46:48+09:00
- Points: 1

아, promise 드디어 지원하는 군요. 저희는 아직 express 많이 써서 ㅎㅎ; 좋은 소식이네요

### Comment 30220

- Author: vipeen
- Created: 2024-10-21T07:43:21+09:00
- Points: 1

nestjs로 대부분 넘어가서 직접 쓸 일은 별로 없지요. 서블릿을 직접 쓰는 거나 마찬가지

### Comment 30213

- Author: chotnt741
- Created: 2024-10-20T12:45:53+09:00
- Points: 1

드디어 promise error를 처리할 수 있게 되었지만 이제와서 굳이 써야할 이유는 잘 모르겠네요

### Comment 30200

- Author: neo
- Created: 2024-10-20T09:00:37+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=41882955) 
- Wes와 팀에게 감사의 마음을 표현하고 싶음. v5 PR이 열린 지 10년이 되었다는 것을 두 번 읽어야 했음. 이 프로젝트의 관성을 바꾸는 데 엄청난 노력이 필요했을 것임. 새로운 장을 축하함
  - 정규 표현식을 사용할 때 입력을 파싱하는 데 지수 시간 행동을 보이는 경우가 있음. 이는 re2와 같은 실제 정규 표현식 엔진으로 전환하여 쉽게 피할 수 있음
  - "Regular Expression Matching Can Be Simple And Fast"라는 rsc의 글을 참고할 수 있음

- Express 팀에게 축하를 보냄. 다른 Node JS 웹 서버 프레임워크가 많지만 Express가 필요한 모든 것을 제공하기 때문에 다른 것으로 옮기지 않았음. 이 상태가 계속되기를 바람

- Express가 아직 `latest`가 아님을 언급함

- Wes와 팀의 작업에 감사함. Express는 여전히 nodejs에서 가장 선호하는 선택이며, 활발한 관리가 있어 좋음

- v5 출시가 왜 10년이나 걸렸는지 궁금해함

- perl 6에 대한 언급

- 경로의 입력 일부로 응답을 포함하는 아이디어가 2010년대의 것처럼 보임. 요즘 대부분의 것은 요청을 받아 응답을 반환하는 경로를 가짐. 이는 HTTP와 더 잘 맞음

- "이전 것을 사기업에 이전하여 지원을 제공하는" 모델을 본 적이 없었음

- Express가 koa, fastify 등과 어떻게 비교되는지 궁금해함
