Watch at Ease세상을 읽고, 일상의 답을 찾다.

기술 · 실용 가이드

npm “getaddrinfo EAI_AGAIN”? DNS를 바꾸기 전에 resolver 컨텍스트를 증명하세요

실패한 shell, CI, WSL 또는 container와 정확한 registry hostname을 고정하고 그 안에서 해석을 확인한 뒤 proxy, TLS, registry를 분리합니다.

Original diagram mapping npm EAI_AGAIN across caller, operating-system resolver, npm proxy or registry configuration, and registry reachability.
오리지널 일러스트: Original illustration: prove the exact execution context and each boundary before changing DNS. Watch at Ease

“getaddrinfo EAI_AGAIN”은 이름 해석 단계의 일시적 실패를 뜻합니다. npm 중단이나 browser와 실패 process가 같은 resolver를 쓴다는 증거는 아닙니다.

원래 실패한 shell, CI runner, WSL 또는 container 안에서 registry와 proxy를 기록하고 이름 해석을 증명한 뒤 connect, TLS, HTTP 단계로 이동합니다.

정확한 caller와 hostname을 고정하세요

전체 npm 오류, 명령, 시간, shell, IDE, service, CI, WSL, container 구분을 보존하고 다른 컨텍스트의 browser 결과를 대신 쓰지 않습니다.

자격 증명을 노출하지 않고 유효 registry와 proxy, 인수, 환경 변수, project/user/global npmrc 출처를 기록합니다.

실패 컨텍스트에서 이름 해석을 시험하세요

같은 user, namespace, network에서 정확한 hostname을 반복 해석합니다. container와 CI는 내부에서 검사하고 host 성공과 혼동하지 않습니다.

resolver 설정, search domain, VPN, split DNS, nameserver 도달성을 기록하고 기업 DNS를 바로 공개 DNS로 바꾸지 않습니다.

DNS와 proxy·registry 전송을 분리하세요

유효 registry에 npm ping을 실행합니다. EAI_AGAIN이면 resolver 분기에 남고, 해석 후 timeout, certificate, HTTP status는 별도 층으로 이동합니다.

proxy와 https-proxy 출처를 먼저 기록합니다. proxy hostname도 해석되어야 하며 잘못된 값이 증명된 경우만 수정합니다.

container, WSL, CI를 별도 분기로 보세요

Docker에서는 container network와 DNS를 host와 비교하고 실제 실패한 build 또는 runtime stage 안에서 시험합니다. 재시작만으로 원인은 증명되지 않습니다.

WSL과 CI에서는 생성된 resolver 파일, VPN 시점, job image를 기록하고 단일 runner 문제를 전역 설정으로 확대하지 않습니다.

우회 없이 복구를 검증하세요

같은 caller에서 해석, npm ping, 원래 npm install/ci를 반복하고 hosts 고정이나 공개 DNS override가 남지 않았는지 확인합니다.

간헐적 실패는 build window 동안 여러 번 성공해야 하며 전후 시간과 실제로 바뀐 경계를 원장에 남깁니다.

Original decision tree separating name-resolution failure from npm registry, proxy, connection, TLS and HTTP failures.
오리지널 일러스트: Original illustration: branch on evidence and avoid hard-coded registry IPs or TLS bypasses. Watch at Ease