🚨 MongoDB TTL 인덱슀 μ˜€μž‘λ™ 사둀 뢄석! μžλ™ μ‚­μ œκ°€ μ•ˆ λ˜λŠ” μ΄μœ λŠ”?

 

🧨 사둀 1. "TTL 인덱슀λ₯Ό λ§Œλ“€μ—ˆλŠ”λ° 데이터가 μ§€μ›Œμ§€μ§€ μ•Šμ•„μš”"

πŸ’¬ 문제 상황

db.logs.createIndex({ createdAt: 1 }, { expireAfterSeconds: 3600 })


  • μΈλ±μŠ€λŠ” μ •μƒμ μœΌλ‘œ 생성됨
  • μ‹œκ°„μ΄ μ§€λ‚˜λ„ λ¬Έμ„œκ°€ μ‚­μ œλ˜μ§€ μ•ŠμŒ

πŸ•΅️ 원인 뢄석

✅ createdAt ν•„λ“œκ°€ Date νƒ€μž…μ΄ μ•„λ‹˜
MongoDB TTL은 ν•„λ“œκ°€ ISODate, new Date() ν˜•식이 μ•„λ‹ˆλ©΄ μž‘λ™ν•˜μ§€ μ•ŠμŒ

✅ ν•΄κ²° 방법

// 잘λͺ»λœ 예
{ createdAt: "2025-06-29T10:00:00Z" }  // λ¬Έμžμ—΄ ❌

// μ˜¬λ°”λ₯Έ 예
{ createdAt: ISODate("2025-06-29T10:00:00Z") }  // Date νƒ€μž… ✅

πŸ”§ TTL μΈλ±μŠ€λŠ” λ¬Έμžμ—΄/숫자 ν•„λ“œμ—μ„œλŠ” μ ˆλŒ€ μž‘λ™ν•˜μ§€ μ•ŠμŒ!


🧨 사둀 2. "일뢀 λ¬Έμ„œλ§Œ TTL μ‚­μ œκ°€ μ•ˆ 됨"

πŸ’¬ 문제 상황

  • 1μ‹œκ°„ TTL 인덱슀λ₯Ό μ μš©ν–ˆλŠ”λ°, 일뢀 λ¬Έμ„œλ§Œ 남아 있음

πŸ•΅️ 원인 뢄석

✅ createdAt ν•„λ“œκ°€ μ—†λŠ” λ¬Έμ„œ
TTL은 ν•΄λ‹Ή ν•„λ“œκ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠμœΌλ©΄ λŒ€μƒμ—μ„œ μ œμ™Έν•¨

✅ ν•΄κ²° 방법

  • μ»¬λ ‰μ…˜ λ‚΄ λͺ¨λ“  λ¬Έμ„œμ— TTL κΈ°μ€€ ν•„λ“œ(createdAt)이 λ°˜λ“œμ‹œ μ‘΄μž¬ν•˜λ„λ‘ 보μž₯
  • λ˜λŠ” createdAt이 null일 경우λ₯Ό κ°μ§€ν•˜μ—¬ 사전 처리


🧨 사둀 3. "μ‚­μ œ 타이밍이 λ„ˆλ¬΄ λŠ¦μ–΄μš”"

πŸ’¬ 문제 상황

  • expireAfterSeconds: 600 μ„€μ •ν–ˆλŠ”λ°
  • μ‚­μ œκ°€ 15λΆ„~20λΆ„ 후에 λ°œμƒ

πŸ•΅️ 원인 뢄석

✅ TTL은 μ‹€μ‹œκ°„μ΄ μ•„λ‹ˆλΌ, MongoDB λ‚΄λΆ€ λ°±κ·ΈλΌμš΄λ“œ μŠ€μΌ€μ€„λŸ¬μ— μ˜ν•΄ λ™μž‘
→ 기본적으둜 60초 κ°„κ²©μœΌλ‘œ TTL μŠ€μΊ”
→ μ‹œμŠ€ν…œ λΆ€ν•˜ λ˜λŠ” locking 상황이면 λ”œλ ˆμ΄ λ°œμƒ

✅ ν•΄κ²° 방법

  • TTL은 μ •ν™•ν•œ μ‹œκ°„ 보μž₯을 ν•˜μ§€ μ•ŠμŒ
  • λ§Œμ•½ μ •ν™•ν•œ μ‚­μ œ μ‹œκ°„μ΄ ν•„μš”ν•˜λ©΄ → cron-job λ˜λŠ” TTL + μƒνƒœν•„λ“œ 관리 μ‘°ν•© μ‚¬μš©


πŸ“Œ μš”μ•½: TTL μΈλ±μŠ€κ°€ μž‘λ™ν•˜μ§€ μ•ŠλŠ” μ£Όμš” 원인

원인섀λͺ…ν•΄κ²°μ±…
❌ λ‚ μ§œ ν•„λ“œκ°€ Date νƒ€μž…μ΄ μ•„λ‹˜λ¬Έμžμ—΄μ΄λ©΄ 무효ISODate() μ‚¬μš©
❌ TTL ν•„λ“œκ°€ μ—†λŠ” λ¬Έμ„œTTL λŒ€μƒ μ•„λ‹˜λͺ¨λ“  λ¬Έμ„œμ— ν•„λ“œ 포함
⏱️ μŠ€μΌ€μ€„λŸ¬ μ§€μ—°TTL은 μ •ν™•ν•œ μ‹œκ°„μ΄ μ•„λ‹˜μ§€μ—° κ°μ•ˆ λ˜λŠ” 보완 방식 적용

πŸ”§ 운영 팁: TTL μ˜€μž‘λ™ λ°©μ§€ 체크리슀트

✅ TTL λŒ€μƒ ν•„λ“œλŠ” λ°˜λ“œμ‹œ Date νƒ€μž…μΈμ§€ 확인
✅ λ¬Έμ„œ 생성 μ‹œ TTL κΈ°μ€€ ν•„λ“œλ₯Ό 무쑰건 포함
✅ μ§€μ—° ν—ˆμš©μ΄ κ°€λŠ₯ν•œ λ°μ΄ν„°μ—λ§Œ TTL μ‚¬μš©
✅ TTL 인덱슀 외에도 cron-jobμ΄λ‚˜ soft delete λ°±μ—… μ „λž΅ 병행


πŸ“ 마무리

MongoDB TTL μΈλ±μŠ€λŠ” κ°•λ ₯ν•˜μ§€λ§Œ, μ œμ•½μ΄ λΆ„λͺ…ν•œ κΈ°λŠ₯μž…λ‹ˆλ‹€.
μ‹€μ œ μš΄μ˜μ—μ„œλŠ” TTL이 μžλ™ μ‚­μ œλ₯Ό 보μž₯ν•˜μ§€ μ•Šμ„ 수 있고,
μ΄λ•ŒλŠ” μ›μΈ 뢄석과 λŒ€μ²΄ μ „λž΅μ΄ λ°˜λ“œμ‹œ ν•„μš”ν•©λ‹ˆλ‹€



λ‹€μŒ 이전