Q&A 피드

정적 Q&A 피드가 answered 상태를 놓치지 않게 하려면 어떤 렌더링 전략을 써야 하나요? 1776793880

Q&A 피드

정적 Q&A 피드가 answered 상태를 놓치지 않게 하려면 어떤 렌더링 전략을 써야 하나요? 1776793880

정적 Q&A 피드에서는 answered 여부를 빌드 시점에 고정하지 말고 서버 데이터 기반의 동적 렌더링이나 짧은 주기 재검증으로 상태를 다시 읽는 구조를 써야 합니다.

상태

answered

토픽

Q&A 렌더링 전략

답변 버전

1

핵심 답변 answered 상태를 놓치지 않으려면, Q&A 피드를 완전 정적으로 고정하지 말고 서버 기준 상태를 다시 읽는 렌더링 전략을 써야 합니다.

가장 안전한 방식은 아래 둘 중 하나입니다.

1. 동적 렌더링(SSR / force-dynamic) 요청이 올 때마다 DB에서 최신 질문 상태를 읽어 렌더링합니다. 이 방식이 pending -> answered 전환을 가장 덜 놓칩니다.

2. ISR + 짧은 재검증(revalidate) 완전 SSR이 부담되면, 피드 페이지를 몇 초~수십 초 단위로 재검증해서 최신 answered 상태를 다시 반영합니다.

왜 정적 피드에서 놓치기 쉬운가 정적 생성만 해두면 빌드 시점의 pending 상태가 HTML에 박혀 버립니다. 그 뒤 백그라운드에서 답변이 완료되어도, 다음 재생성 전까지는 피드가 예전 상태를 계속 보여줄 수 있습니다.

즉 문제의 본질은:

  • 답변 상태는 비동기로 바뀌는데
  • 피드는 오래 캐시된 정적 결과를 보고 있어서
  • answered 전환이 늦게 보이거나 아예 누락된 것처럼 보이는 것

추천 전략 ### 1) Q&A 목록 페이지는 가능하면 동적으로 질문/답변 상태가 자주 바뀌는 목록은 정적 페이지보다 동적 페이지가 맞습니다.

적합한 경우:

  • 방금 질문한 사용자가 바로 피드에서 결과를 보고 싶을 때
  • pending, retrying, failed, answered 상태가 수시로 바뀔 때
  • “질문이 사라졌다”는 인상을 주면 안 될 때

2) 완전 동적이 어렵다면 짧은 ISR 예를 들어 5초, 10초, 30초 단위 재검증처럼 짧게 잡으면 실사용에서 덜 놓칩니다.

다만 이 경우도 한계가 있습니다.

  • answered 직후 즉시 반영되지는 않을 수 있음
  • 트래픽이 적으면 재검증 타이밍이 늦어질 수 있음

그래서 실시간성이 중요하면 SSR 쪽이 더 안전합니다.

3) 상세 페이지와 제출 직후 UI는 클라이언트 폴링 병행 피드만으로 모든 즉시성을 해결하려 하지 말고, - 질문 상세 페이지 - 질문 제출 직후 결과 카드 에서는 /api/questions/[id] 같은 상태 API를 주기적으로 폴링해서 최신 상태를 반영하는 게 좋습니다.

이렇게 하면:

  • 피드는 서버 렌더링으로 전반적인 최신성을 유지하고
  • 방금 질문한 사용자는 자기 질문만 더 빠르게 갱신해서 볼 수 있습니다.

실무적으로 가장 안정적인 조합 추천 우선순위는 이렇습니다.

가장 권장 - /qna 피드: 동적 렌더링 - /qna/[id] 상세: 동적 렌더링 + 필요 시 폴링 - 제출 직후 카드: 클라이언트 폴링

차선책 - /qna 피드: ISR 짧은 revalidate - 상세/제출 직후: 클라이언트 폴링

추가로 중요한 점 렌더링 전략만 바꿔도 부족할 수 있습니다. 피드 쿼리 자체가 아래 상태를 제대로 포함해야 합니다.

  • pending
  • retrying
  • failed
  • answered
  • 필요하면 flagged

즉, answered만 따로 뽑기보다 상태 전환 중인 질문도 목록에 남겨 두고, 상태 뱃지나 문구만 바뀌게 만드는 편이 “놓친 것처럼 보이는 문제”를 줄입니다.

한 줄 정리 Q&A처럼 상태가 비동기로 바뀌는 피드는 정적 고정보다 서버 기준의 동적 렌더링 + 부분 폴링 조합이 가장 안전하고, 최소한 짧은 재검증이라도 걸어야 answered 상태를 덜 놓칩니다.