개요
개발 단계에서 문제는 없었으나 실제 EKS Pod 인스턴스로 서버를 배포한 후에 스케쥴링이 제대로 돌아가지 않는 것을 확인, Argo CD 내의 인스턴스 로그를 확인해보니 아래와 같이 Fetch Error: TypeError: fetch failed cause: ConnectTimeoutError: Connect Timeout Error 에러가 발생하고 있음
[argocd - Applications - api - 생성되어있는 pod를 클릭하면 로그 확인 가능]
[Nest] 1 - 08/15/2025, 2:15:00 AM LOG [DistributedLockService] Lock acquired: cron:lock:trackingChannels by fyc-api-77c8c57977-r6g48-1-1755224100002
[trackingChannels] Starting execution with lock: cron:lock:trackingChannels
[updateChannelPool] Lock acquisition failed, skipping execution
Fetch Error: TypeError: fetch failed
at node:internal/deps/undici/undici:12618:11
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async ChzzkChannelRepository.findById (/app/node_modules/chzzk-z/dist/lib/chzzk/apis/channel.repository.js:15:16)
at async ChzzkChannel.findById (/app/node_modules/chzzk-z/dist/lib/chzzk/channel.js:15:16)
at async ChzzkRepository.getChannelById (/app/dist/src/chzzk/chzzk.repository.js:22:25)
at async BatchService.trackingChannel (/app/dist/src/batch/batch.service.js:54:30)
at async BatchService.trackingChannels (/app/dist/src/batch/batch.service.js:49:13)
at async BatchService.value (/app/dist/src/common/decorators/batch-only.decorator.js:21:40)
at async CronJob.<anonymous> (/app/node_modules/@nestjs/schedule/dist/schedule.explorer.js:96:17) {
cause: ConnectTimeoutError: Connect Timeout Error
at onConnectTimeout (node:internal/deps/undici/undici:7760:28)
at node:internal/deps/undici/undici:7716:50
at Immediate._onImmediate (node:internal/deps/undici/undici:7748:13)
at process.processImmediate (node:internal/timers:478:21) {
code: 'UND_ERR_CONNECT_TIMEOUT'
}
}
[trackingChannels] Execution failed: TypeError: Cannot read properties of undefined (reading 'channelName')
at BatchService.isUpdateChannel (/app/dist/src/batch/batch.service.js:74:50)
at BatchService.trackingChannel (/app/dist/src/batch/batch.service.js:55:31)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async BatchService.trackingChannels (/app/dist/src/batch/batch.service.js:49:13)
at async BatchService.value (/app/dist/src/common/decorators/batch-only.decorator.js:21:40)
at async CronJob.<anonymous> (/app/node_modules/@nestjs/schedule/dist/schedule.explorer.js:96:17)
[Nest] 1 - 08/15/2025, 2:15:11 AM ERROR [Scheduler] TypeError: Cannot read properties of undefined (reading 'channelName')
[Nest] 1 - 08/15/2025, 2:15:11 AM LOG [DistributedLockService] Lock released: cron:lock:trackingChannels
Bash
복사
네트워크 오류?
이 문제는 API 서버인
로 연결을 못하고 있음을 명시하고 있어 직접 인스턴스 내에서 통신이 가능한지, 어플리케이션 내에서 불가능한건지 확인해보면 될 것으로 보인다.
베스천 서버 접속
(base) dominic@Dominic-MacBook-Pro .aws % aws ssm start-session --target i-00166642031aa6b50
Starting session with SessionId: dumin-gfh832piuvbxbxdfxazi6ff9ny
sh-5.2$ source ~/.bashrc
ssm-user@ip-10-0-2-173 /usr/bin$
Bash
복사
Pod 확인
kubectl get po -n chat-ingestor
---------------------------------------------------------------------------------
NAME READY STATUS RESTARTS AGE
fyc-chat-ingestor-5798879d96-6ctqv 1/1 Running 0 17h
fyc-chat-ingestor-5798879d96-p54qj 1/1 Running 0 17h
fyc-chat-ingestor-5798879d96-vnrcm 1/1 Running 0 17h
fyc-chat-ingestor-5798879d96-zz5ds 1/1 Running 0 17h
test-csi-pod 1/1 Running 162 (10m ago) 6d18h
Bash
복사
Pod 접속
kubectl -n chat-ingestor exec -it fyc-chat-ingestor-5798879d96-6ctqv -- sh
Bash
복사
Ping 테스트
/app/apps/ws-chat-ingestor # ping chzzk.naver.com
PING chzzk.naver.com (110.93.151.136): 56 data bytes
^C
--- chzzk.naver.com ping statistics ---
8 packets transmitted, 0 packets received, 100% packet loss
/app/apps/ws-chat-ingestor # ping openapi.chzzk.naver.com
PING openapi.chzzk.naver.com (110.93.151.166): 56 data bytes
Bash
복사
원래 네이버 정책 상 PING은 차단해놓은 것으로 보아 PING과는 무관한 것을 확인
여러 인스턴스 중 스케쥴링에 성공한 인스턴스가 있다?
한 번이라도 성공했다면 네트워크 레벨의 문제가 아닐 가능성이 높다.
그러던 중 다른 에러 로그를 확인하게 되었는데
ECONNRESET?
Fetch Error: TypeError: fetch failed
at node:internal/deps/undici/undici:13510:13
at ChzzkChannelRepository.findById (/Users/dominic/Playground/fyc-api/node_modules/chzzk-z/lib/chzzk/apis/channel.repository.ts:24:12)
at ChzzkChannel.findById (/Users/dominic/Playground/fyc-api/node_modules/chzzk-z/lib/chzzk/channel.ts:20:12)
at ChzzkRepository.getChannelById (/Users/dominic/Playground/fyc-api/src/chzzk/chzzk.repository.ts:16:21)
at BatchService.trackingChannel (/Users/dominic/Playground/fyc-api/src/batch/batch.service.ts:65:26)
at BatchService.trackingChannels (/Users/dominic/Playground/fyc-api/src/batch/batch.service.ts:59:7)
at BatchService.value (/Users/dominic/Playground/fyc-api/src/common/decorators/batch-only.decorator.ts:38:28)
at CronJob.<anonymous> (/Users/dominic/Playground/fyc-api/node_modules/@nestjs/schedule/dist/schedule.explorer.js:96:17) {
[cause]: Error: read ECONNRESET
at TLSWrap.onStreamRead (node:internal/stream_base_commons:216:20) {
errno: -54,
code: 'ECONNRESET',
syscall: 'read'
}
}
Bash
복사
ECONNRESET 라는 부분이 중요하다.
아마 한번에 약 344개 채널에 대한 정보를 요청하다보니 문제가 생긴 걸로 보인다.
한 클라이언트의 요청 수가 너무 많아지면 네이버의 속도 제한 정책이 존재한다고 가정하면 충분히 가능성이 존재한다.
내부에서 정확한 확인이 어려우므로 이 경우에는 요청수를 줄이거나 요청빈도를 줄이는 형태로 다시 진행을 해야한다.


