| <colbgcolor=#339933,#339933><colcolor=#fff,#fff> undici 운디치 | |
| 종류 | HTTP/클라이언트 |
| 최초 개발자 | Matteo Collina[1] |
| 개발 | Node.js |
| 출시 | 2018년 7월 26일#[2] |
| 안정 버전 | v7.22.0 (2026년 2월 13일) |
| 개발 언어 | JavaScript |
| 플랫폼 | Node.js |
| 라이선스 | MIT 라이선스 |
| 링크 | |
1. 개요
Node.js 런타임용 HTTP 클라이언트 구현체. Node.js의 내장fetch 구현체이기도 하다.이름은 11을 뜻하는 라틴어 ūndecim에서 왔다.
2. 역사
2020년경부터 undici로 웹 표준 호환 fetch API를 구현하려는undici-fetch 등의 시도가 생겼으며, 2021년 8월 머지되었다.#9122022년 4월 Node.js 16에
--experimental-fetch 플래그를 통해 제한적으로 사용할 수 있도록# 추가되었으며,#41749# 동시기에 Node.js 18에서는 Current 공개와 함께 플래그 제한 없이 experimental 기능으로 추가되었다.#3. 특징
llhttp 코어를 기반으로 여러 일반적인 HTTP/클라이언트 기능들을 Node.js 인터페이스 형태로 쌓은 구조로, 이중에서도 가장 고수준 API는 fetch API다. Node.js 18버전부터 지원되는 내장 fetch 함수의 실제 내부 구현체가 바로 이 undici라는 것.#기본적으로 Node.js 자체에 내장되어 있기 때문에 빌트인
fetch를 쓴다면 이미 undici를 사용하고 있는 것이다. 다만 node:http같은 Node.js 표준 라이브러리 형태로는 제공되지 않기 때문에 fetch() 함수 외 추가적인 기능이나 설정을 하기 위해서는 npm으로 별도 배포되는 undici 패키지를 사용해야 한다. 해당 패키지에서도 setGlobalDispatcher() 등을 사용해 업스트림 라이브러리를 전혀 건드리지 않고 injection하는 게 가능한데, 이는 undici가 undici.globalDispatcher.1라는 전역 심볼을 공유하기 때문이다.# 반대로 node:http 등 표준 라이브러리를 쓰는 업스트림은 소스를 수정하지 않는 한 건드릴 수 없다.기본적으로 둘다
llhttp에 기반한다는 점#44000만 동일할 뿐 node:http 등 Node.js 런타임 표준 프로토콜 스택에 기반하지 않고 자체적인 독자 스택을 사용한다. 여기서 생기는 문제점도 있는데, 가령 node:perf_hooks의 http performanceEntry.entryType이나 node:trace_events의 node.http 카테고리 등에서 추적이 불가능하다.4. 기타
node-fetch등에 있던agent필드가 웹 표준이 아니기 때문에 undici에서는 지원하지 않으나, 비슷한 설정으로 개별fetch별dispatcher에 사용할 agent를 넘겨주는 방법이 있다.#1411- 현재
ProxyAgent가 HTTP proxy만 지원하고 socks5 등 다른 프록시 프로토콜은 지원하지 않는다.#862 2025년 말쯤에 PR이 올라왔다.#4385