누구에게 도움: 공공데이터 API나 무료 API로 대량 작업을 자동화하다가, 갑자기 요청이 다 실패하기 시작한 사람.
Before
상장기업 4,000개의 업종코드를 자동으로 훑는 스크립트를 만들었다. “빨리 끝내고 싶어서” 동시에 8개씩 요청을 보내도록 짰다. 처음엔 잘 됐다 — 200개, 400개, 600개… 순조롭게 진행되다가, 1,000개쯤 지난 시점부터 갑자기 요청이 죄다 실패하기 시작했다.
어떻게 했나
1) 증상부터 정확히 봤다
에러 메시지를 그냥 넘기지 않고 자세히 봤다.
Recv failure: Connection reset by peer
이건 “느려서 시간초과”가 아니라, 서버가 연결 자체를 강제로 끊어버리는 증상이었다.
2) “내 키 문제인지” vs “접속 자체가 막힌 건지” 구분했다
가장 먼저 확인해야 할 건 “무엇이 막혔나”였다. 그래서 일부러 가짜 API 키로 똑같이 요청해봤다.
curl -sv "https://opendart.fss.or.kr/api/company.json?crtfc_key=test&corp_code=00126380"
결과: 진짜 키로 시도했을 때와 **완전히 똑같은 “Connection reset”**이 났다. 키가 틀렸다는 응답(보통은 별도 에러 메시지)이 아니라 그냥 연결이 끊겼다는 건, 키의 문제가 아니라 접속 자체(아마 IP 단위)가 막혔다는 뜻이었다.
3) 범위를 넓혀서 한 번 더 확인했다
혹시 인터넷 자체가 문제인 건 아닌지도 확인했다.
curl -s -o /dev/null -w "%{http_code}\n" https://www.google.com # 200 (정상)
curl -s -o /dev/null -w "%{http_code}\n" https://opendart.fss.or.kr/ # 000 (API 아닌 메인 홈페이지조차 안 열림)
구글은 멀쩡한데 OpenDART 메인 홈페이지조차 안 열리는 걸 보고, “이 사이트로 가는 접속 자체가 막혔다”는 결론을 내렸다.
막힘 → 해결
- 막힘: 정확히 몇 분/몇 시간 차단되는지, 공식적으로 어떤 기준으로 차단하는지는 끝내 못 찾았다 (사이트 자체가 안 열려서 이용약관도 확인 못 함).
- 해결(재발 방지): 원인을 정확히 몰라도, 다시 안 걸리게 스크립트를 훨씬 보수적으로 고쳤다.
- 동시 요청 8개 → 1개(순차 실행)
- 요청 간 딜레이 250ms → 700ms
- **하루 호출 총량 상한(800회)**을 코드로 강제 — 넘으면 자동 중단
- User-Agent에 연락처를 명시해서 익명 트래픽처럼 안 보이게 함
After
재발 방지 설정을 적용한 뒤로, 같은 스크립트를 다시 돌려도 안전하게 진행되는 걸 확인했다. (참고: 한 번 차단된 뒤엔 즉시 풀리지 않아서, 이 글을 쓰는 시점에도 완전히 복구되진 않았다 — 이건 진행형 이슈다.)
배운 것 / 재사용 자산
API가 갑자기 다 막힐 때 진단 체크리스트
- 에러 메시지를 정확히 읽는다 (“타임아웃”과 “연결 강제 종료”는 원인이 다르다).
- 일부러 가짜 키로 같은 요청을 해본다 — 키 문제인지 접속 자체 문제인지 바로 구분됨.
- 그 API가 아닌 **다른 사이트(구글 등)**로도 확인해서, 내 인터넷 문제가 아닌지 배제한다.
- 그 서비스의 메인 홈페이지도 열어봐서, API만 막힌 건지 전체가 막힌 건지 확인한다.
원인을 100% 못 찾아도 괜찮다. “왜 막혔는지”보다 “다시 안 막히게 어떻게 할지”에 먼저 집중하는 게 실전에서는 더 빠른 길이었다.