<aside> 📌

요약


이 문서에서는 nudge-eap-api와 유사한 방식으로 cms 서버를 로컬 환경에서 실행하면서 발생한 Redis 연결 타임아웃 문제를 해결하는 과정을 다룹니다.

주요 내용은 다음과 같습니다.

  1. 문제 발생: Redis에 연결하려고 할 때 "connect ETIMEDOUT" 오류가 발생.
  2. 문제 분석: nudge-eap-api 서버 실행 시 Redis에 연결하는데 문제가 없음을 확인. cms 서버에서 환경 변수와 Redis 연결 설정이 잘못되었을 가능성 존재.
  3. 문제 해결 시도:
  4. 해결책: 환경 변수가 로드되는 순서 문제로, require('dotenv').config() 호출을 AppModule 위로 올려서 환경 변수가 먼저 로드되도록 수정.
  5. 결과: 환경 변수와 Redis 연결 설정이 정상화되었고, Redis 연결 문제가 해결됨. </aside>

문제 상황 & 분석

[ioredis] Unhandled error event: Error: connect ETIMEDOUT
    at Socket.<anonymous> (/Users/nudge_947/gitRepo/NudgeEap/packages/nudge-eap-cms/node_modules/ioredis/built/redis/index.js:282:31)
    at Object.onceWrapper (node:events:633:28)
    at Socket.emit (node:events:519:28)
    at Socket.emit (node:domain:488:12)
    at Socket._onTimeout (node:net:591:8)
    at listOnTimeout (node:internal/timers:581:17)
    at process.processTimers (node:internal/timers:519:7)

현재 redis 서버에 접근하려고 하지만 Timeout이 발생하고 있습니다. Timeout은 높은 확률로 Security Group에서 막혔을 때 발생하는데… aws 네트워크 설정은 이미 문제가 없기도 하고, Timeout 발생했다는 메세지가 너무 빨리 발생하는 것도 의심해볼 여지가 있습니다.

하지만 팀원들은 모두 잘 실행되는 상태입니다…!

문제 해결 시도 과정

1. nudge-eap-api 서버 실행해보기

만약 레디스가 문제라면, eap-api도 timeout이 발생해야 합니다.

<aside> <img src="notion://custom_emoji/41b6b37a-cc38-4f0f-bb74-faede20facf4/153a054b-7d82-80e0-835a-007a795dfe1c" alt="notion://custom_emoji/41b6b37a-cc38-4f0f-bb74-faede20facf4/153a054b-7d82-80e0-835a-007a795dfe1c" width="40px" />

curl <http://localhost:5001/health-check>
health-check%                                                                    

만약 eap-api가 redis에 의존적이지 않다면 이 방법으로는 찾을 수 없습니다. 따라서 eap-api 서버가 redis에 실제로 연결을 시도하고 있는지 확인하기 위해 위 로그를 분석해보면 아래와 같은 로그를 찾을 수 있습니다. 실제로 api 서버는 redis와 잘 연결이 되었습니다.

[InstanceLoader | 2025-03-10 10:49:29] - [info] 'RedisModule dependencies initialized'

2. redis 동작 확인하기

에러 메세지가 Redis에 연결을 하지 못하는 이슈이므로, 이와 관련하여 트러블슈팅을 진행합니다.

2-1. Redis 포트포워딩 확인

medis를 통해 실제로 localhost에서 ElastiCache로 포트포워딩이 잘 이루어지고 있는지 확인했고, 정상 동작을 확인했습니다.

localhost:6379로 접근했을 때 정상동작합니다.

localhost:6379로 접근했을 때 정상동작합니다.

3. env 확인하기