X(Twitter) API 캐싱 도입 (2편)

2025. 11. 4. 13:43·개발일지/개발로그 (실무)

1차 캐싱 적용 이후 실제 운영 환경에서 QA를 진행하던 중 콜드스타트(Empty Cache) 문제가 발생하였다.
초기 조회 시 트윗이 없을 경우, 빈 캐시가 TTL 동안 유지되어 신규 트윗이 반영되지 않는 현상이 확인되었는데,
이는 since_id 기반 비교 로직이 “LastId 없음(null)” 상태를 올바르게 처리하지 못해 전체 갱신이 생략되는 것이 원인이었다.

 

 

👀 What I Faced

  • 초기 조회 시 0건인 상태 → 빈 캐시 저장
  • 15분 내 새 트윗이 생성되어도 search/recent 호출 시 hasNew=false 로 판단
  • 캐시 만료 전까지 계속 0건 반환
  • TTL 만료 후 /users/:id/tweets 전체 조회 시점에서야 데이터 갱신

🧩 Root Cause / Theory

  • 캐싱 로직이 “빈 캐시 + LastId 없음(null)” 상태를 정상적으로 처리하지 못함
  • 이로 인해 since_id 비교에서 항상 “신규 없음”으로 인식 → 전체 조회 생략
  • 결과적으로 0건 상태가 TTL이 끝날 때까지 유지됨

🧰 How I Solved / How I Learned

1️⃣ 캐싱 시간 조정

  • 첫 조회 시 /users/:id/tweets 결과의 TTL: 15분 → 10분 단축
  • 콜드스타트 상태에서 더 빠르게 재검증 가능하도록 수정

2️⃣ 확인 로직 개선

  • 캐시 없음: /users/:id/tweets 전체 조회 후 캐시 생성
  • 캐시 있음: /search/recent 로 신규 여부 확인
    • 신규 없음 → 캐시 그대로 반환
    • 신규 있음 → 병합 후 캐시 갱신
  • 오류(400 이상)
    • /search/recent 재조회 후 캐싱
    • data 가 비어있어도 [] 로 반환 (null 방지)
    • 프론트에서도 빈 리스트 바인딩 지원

⚙️ Caching Strategy

  • TTL: 10분
  • Key: tw:media:{userId}:{fromYmd}:v1
  • 정책: Cache-Aside + Fallback + Negative Caching
  • 에러 대응: 400 이상 시 재조회, 429 시 캐시 리턴 유지

🧪 Test & Verification

  • 로컬 환경에서 정상 갱신 확인
  • 콜드스타트 이후 5분 내 신규 트윗 반영 확인

📋 Results

  • “빈 캐시 유지” 문제 해결
  • 신규 트윗 생성 시 10분 내 반영
  • TTL 단축으로 캐시 재검증 주기 개선

🔍 Key Takeaways

  • 캐싱 구조 설계 시 “빈 상태(empty)”도 만료 주기를 가져야 함
  • since_id 비교 로직에 “기준 없음(null)” 상태를 명시적으로 처리해야 함
  • TTL 단축 + fallback 처리로 실시간성 확보

🧾 References / Links

  • Twitter API v2 Docs
  • Redis / InMemory Cache TTL 전략

🧭 Reflection

  • 삭제된 트윗 캐시 처리 필요
  • 다중 캠페인 조회 시 캐시 충돌 방지 로직 보완
  • 장기 등록 캠페인(>7일) 구간별 조회 로직 추가 검토
  • 캐싱 정책 추가 검토

✍️ Afterthoughts

이번 프로젝트를 진행하면서, 국내외 여러 서비스들의 SNS 연동 구조를 꽤 많이 들여다봤다.
그중에서도 국내 서비스들은 Twitter 연동이 거의 없다는 걸 새삼 깨달았다.
진심으로 이유가 이런 Rate Limit 문제 때문이 아닐까 싶었다. 😅

Twitter API는 다른 API들과는 뭔가 다르다.
처음 포스트맨으로는 요구하는것도 없이 너무 간단하게 보였는데...까다롭 API 원탑 드립니다

덕분에 캐싱도 새로 도입하고, 레이트리밋을 모델링하고, 스테일 캐시를 직접 돌려보는 등 좋은 경험을 했다.^^... 다 네 덕이야🤬

솔직히 국내 서비스였다면

“Twitter 연동은 나중에 붙이죠...”

라고 제안했을지도 모르겠다.

하지만 해외 사용자를 대상으로 하는 서비스니까, 이건 피할 수 없는 과정이었고, 결국 또 하나의 큰 경험이 되었다.

 

 

잘될 거다.... 잘 돼야 한다.....
잘 되게 해주세요.....

'개발일지 > 개발로그 (실무)' 카테고리의 다른 글

X(Twitter) API 캐싱 도입 (1편)  (0) 2025.11.04
'개발일지/개발로그 (실무)' 카테고리의 다른 글
  • X(Twitter) API 캐싱 도입 (1편)
yeah구리
yeah구리
백엔드를 공부하는 초심자입니다.
  • yeah구리
    개발일지_헤맨만큼 내땅이다
    yeah구리
  • 전체
    오늘
    어제
    • 분류 전체보기 (114)
      • 스파르타 부트캠프(spring) (75)
      • 스파르타 기술면접 (10)
      • 코딩연습 (0)
      • 항해 (10)
      • 개발일지 (4)
        • 개인 회고 (1)
        • 개발로그 (실무) (2)
      • 공부노트 (0)
      • 코딩테스트 (0)
        • 프로그래머스 (0)
        • 백준 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    X(Twitter) API #캐싱 #트러블슈팅 #개발
    비전공개발자 #개발로그 #커리어
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
yeah구리
X(Twitter) API 캐싱 도입 (2편)
상단으로

티스토리툴바