Project/Piggy AI

[PiggyAI] Upstash λ₯Ό μ΄μš©ν•œ μ„œλ²„λ¦¬μŠ€ ν™˜κ²½μ—μ„œμ˜ Redis μ—°κ²°κ³Ό TLS μ—λŸ¬ ν•΄κ²°

ν•œ33 2025. 5. 21. 12:53

🐷 Upstash

Redis λ₯Ό ν”„λ‘œμ νŠΈμ— λΆ™μ΄κΈ°λ‘œ ν–ˆμ„ λ•Œ μ—¬λŸ¬ 선택지가 μžˆμ—ˆλ‹€. ( Docker, 둜컬 μ„€μΉ˜ λ“±λ“± )

ν•˜μ§€λ§Œ κΈ°μ‘΄ 배포 ν™˜κ²½μ„ κ³ λ €ν–ˆμ„ λ•Œ μ„œλ²„λ¦¬μŠ€ ν™˜κ²½μ—μ„œ vercel 둜 배포가 λ˜μ–΄μžˆλŠ” 만큼 Redis λ₯Ό HTTP 기반 μ„œλ²„λ¦¬μŠ€ ν™˜κ²½μ—μ„œλ„ μ“Έ 수 μžˆλ„λ‘ μ΅œμ ν™” λ˜μ–΄μžˆλŠ” Upstash λ₯Ό μ΄μš©ν•΄ Redis Cloud λ₯Ό μ‚¬μš©ν•˜κΈ°λ‘œ ν–ˆλ‹€.

 

🐷 TLS μ—λŸ¬

인기 검색어 κΈ°λŠ₯을 μœ„ν•΄ Redis λ₯Ό μ—°κ²°ν–ˆλŠ”λ°, npm run dev ν›„ μ„œλ²„μ—μ„œ 검색 API λ₯Ό ν˜ΈμΆœν•˜μžλ§ˆμž μ—λŸ¬κ°€ λ°œμƒν–ˆλ‹€.

 

❗ 원인

μ²˜μŒμ— Redis 연결을 μœ„ν•΄ .env.local νŒŒμΌμ— μ•„λž˜μ™€ 같이 접속 μ£Όμ†Œλ§Œ λ„£μ—ˆλ‹€.

REDIS_URL=redis://:λΉ„λ°€λ²ˆν˜Έ@gorgeous-wren-38298.upstash.io:6379

 

그런데 이 μ£Όμ†ŒλŠ” λΉ„μ•”ν˜Έν™”λœ Redis μ—°κ²° 방식 ( redis:// ) 으둜, Upstash 처럼 λ³΄μ•ˆμ„ μ€‘μš”μ‹œν•˜λŠ” ν΄λΌμš°λ“œ Redis λŠ” 기본적으둜 TLS ( μ•”ν˜Έν™” 톡신 ) 을 κ°•μ œν•œλ‹€.

κ·Έλž˜μ„œ μ„œλ²„μ—μ„œ Redis 와 연결을 μ‹œλ„ν•˜λ©΄ 연결이 끊기고 ( ECONNRESET ), μš”μ²­μ΄ 계속 μ‹€νŒ¨ν•΄μ„œ MaxRetiresPerRequestError κ°€ λ°œμƒν–ˆλ‹€.

 

βœ… ν•΄κ²° 방법

.env.local μ—μ„œ ν•œλ²ˆμ— URL 을 μ„€μ •ν•˜λŠ” λŒ€μ‹  μ•„λž˜μ²˜λŸΌ TLS μ˜΅μ…˜μ„ 직접 μ„€μ •ν•œ redis ν΄λΌμ΄μ–ΈνŠΈ μ½”λ“œλ‘œ μˆ˜μ •ν–ˆλ‹€.

const Redis = require('ioredis');

const redis = new Redis({
    host: process.env.REDIS_HOST,
    port: process.env.REDIS_PORT,
    password: process.env.REDIS_PASSWORD,
    tls: {}, // TLS ν™œμ„±ν™”
    maxRetriesPerRequest: 3, // λ„ˆλ¬΄ 많이 μž¬μ‹œλ„ μ•ˆ ν•˜λ„λ‘ μ œν•œ
});

module.exports = redis;

 

μ΄λ ‡κ²Œ μ„€μ •ν•˜κ³  μ‹€ν–‰ν–ˆλ”λ‹ˆ μ—λŸ¬ 없이 잘 μž‘λ™ν–ˆλ‹€.

 

πŸ’‘ TLSλž€?

TLS ( Transport Layer Security ) λŠ” 데이터λ₯Ό μ•”ν˜Έν™”ν•΄μ„œ μ•ˆμ „ν•˜κ²Œ μ£Όκ³ λ°›λŠ” λ³΄μ•ˆ ν”„λ‘œν† μ½œμ΄λ‹€.

  • μš°λ¦¬κ°€ 자주 μ“°λŠ” HTTPS 도 TLS μœ„μ—μ„œ λ™μž‘ν•œλ‹€.
  • Redis 같은 μ™ΈλΆ€ μ„œλΉ„μŠ€μ™€ 데이터λ₯Ό 주고받을 λ•Œ μ€‘κ°„μ—μ„œ λˆ„κ΅°κ°€ ν›”μ³λ³΄κ±°λ‚˜ μ‘°μž‘ν•˜μ§€ λͺ»ν•˜κ²Œ 막아쀀닀.
  • Upstash 와 같은 Redis ν΄λΌμš°λ“œλŠ” 이걸 κΈ°λ³Έ λ³΄μ•ˆ μ •μ±…μœΌλ‘œ μš”κ΅¬ν•œλ‹€.