Server

[Ubuntu 18.04] 웹 크롤링 중 getaddrinfo EAI_AGAIN 에러 발생, DNS관련 이슈 해결기

범데이 2025. 5. 21. 15:37

문제 상황

최근 Node.js 기반으로 cheerio 를 사용해 티스토리 게시글을 크롤링하는 스크립트를 작성했다.

로컬 PC에서는 잘 작동했지만, 운영환경(AWS EC2, Ubuntu 18.04) 에서는 다음과 같은 에러가 발생했다.

 

해당 URL은 정상적인 티스토리 블로그 주소였고, 로컬에선 문제없이 동작했기에 더욱 당황스러웠다.

 

 

원인 분석

EAI_AGAIN 은 Node.js 내부의 getaddrinfo 호출에서 발생하는 에러로, 보통 DNS* 조회 실패를 의미한다.

(DNS에 대해서 궁금하다면 관련포스팅을 참고하자.)

 

운영 서버에서 다음 명령어로 테스트해봤다.

curl https://티스토리주소.tistory.com
nslookup tistory.com

 

그러나 둘 다 실패했다. 즉, 서버 자체가 외부 DNS를 정상적으로 조회하지 못하는 상태였다.

 

 

이때 /etc/resolv.conf 파일을 확인해 보니, DNS 서버 정보가 없었다.

 

이는 Ubuntu 18.04의 systemd-resolved 가 DNS를 관리하는 구조 때문인데, 이 서비스가 비활성화되었거나 제대로 작동하지 않으면 DNS가 완전히 먹통이 될 수 있다.

 

해결 과정

1. DNS 서버 재설정

Ubuntu 18.04에서 영구적인 DNS 설정을 위해 systemd-resolved 설정을 수정했다.

sudo vi /etc/systemd/resolved.conf

 

 

아래 내용을 추가 또는 수정:

[Resolve]
DNS=8.8.8.8 1.1.1.1
FallbackDNS=8.8.4.4

 

 

수정 후 서비스 재시작:

sudo systemctl restart systemd-resolved

 

 

2. /etc/resolve.conf 링크 확인 및 수정

resolv.conf 가 systemd-resolved 를 올바르게 참조하는지 확인:

ls -l /etc/resolv.conf

 

 

결과가 위과 같지 않다면 수동으로 연결:

sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

 

 

3. 적용 확인

nslookup tistory.com

 

 

정상적인 IP 주소 응답이 나오면 해결된 것이다. 이후 Node.js 크롤링 코드도 정상적으로 작동했다.

 

배운 점

  • Ubuntu 18.04부터는 DNS가 systemd-resolved 에 의해 관리되며, 단순히 /etc/resolv.conf 를 편집해도 영구 적용되지 않는다.
  • AWS EC2에서 VPC 서브넷의 DHCP 옵션 변경, 네트워크 도구 설치(Docker, VPN 등), 또는 재부팅 시 resolv.conf 링크가 초기화될 수 있다.
  • DNS 조회 에러는 단순한 크롤링 실패를 넘어서, API 통신, 소켓 연결 등 다양한 영역에 영향을 줄 수 있으므로 운영 서버에서는 DNS 상태도 모니터링해야 한다.

 

재발 방지를 위한 팁

  1. systemd-resolved 설정을 수정해 영구 DNS 서버 지정
  2. 네트워크 도구(Docker, VPN 등) 설치 시 /etc/resolv.conf 변화 감시
  3. /etc/resolv.conf 가 심볼릭 링크로 올바른 경로(/run/systemd/...)를 가리키는지 주기적으로 확인
  4. 서버 모니터링 스크립트에 nslookup google.com 등의 테스트를 주기적으로 넣어두면 조기 탐지가 가능

 

 

단순한 크롤링 코드 에러라고 생각했던 문제였지만, 실제로는 시스템 DNS 설정의 꼬임이라는 운영 환경 이슈였다. 이런 경험을 통해 서비스 운영의 핵심은 "코드 외부" 환경에도 있다는 걸 다시 한 번 체감하게 되었다.

728x90
반응형