이미지 모더레이션 API 업로드 최적화: Node.js에서 Native Fetch와 DNS 문제 해결
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
Node.js를 사용한 API 통합 개발자, 특히 파일 업로드 및 DNS 설정에 관심 있는 중급~상급 개발자
핵심 요약
form-data
+node-fetch
사용이native fetch
보다 안정적인 파일 스트리밍 처리 가능- DNS 문제 해결:
systemd-resolved
대신8.8.8.8
또는1.1.1.1
공공 DNS 사용 권장 Undici
의FormData.append
제한: 스트림 대신Buffer
또는Blob
사용 필요- 최종 코드 예시:
form-data
+node-fetch
로curl -F
동작과 동일한 multipart 요청 생성 가능
섹션별 세부 요약
1. Native `fetch`와 `form-data` 호환성 문제
form-data
패키지와Undici
의fetch
를 사용했으나ConnectTimeoutError
발생nslookup api.sightengine.com
실행 시SERVFAIL
응답으로 DNS 문제 확인systemd-resolved
의127.0.0.53
DNS 설정이 문제 원인
2. DNS 문제 해결 방법
systemd-resolved
설정 파일에DNS=8.8.8.8 1.1.1.1
추가sudo systemctl restart systemd-resolved
명령으로 설정 재시작nslookup
과 Node.js 코드 모두 정상적으로 DNS 해석 수행
3. 스트림 처리 제한 및 대체 방안
Blob
과stream
사용 시Undici
의FormData.append
가 스트림을 지원하지 않음form-data
+node-fetch
사용으로 파일 스트리밍 및 메모리 효율성 개선form-data
패키지 설치 및node-fetch
사용 예시 코드 제공
4. 최종 구현 코드
form-data
로media
,models
,api_user
,api_secret
필드 추가node-fetch
를 사용한POST
요청과multipart/form-data
헤더 설정result.json()
을 통해 API 응답 처리
결론
- DNS 설정 수정,
Undici
의 스트림 제한 인지,form-data
+node-fetch
사용이 안정적인 파일 업로드를 위한 핵심 전략 curl -F
동작과 동일한 multipart 요청 생성 가능하며, 메모리 사용 최소화