Q&A 피드
홈에서도 내가 보낸 질문이 바로 보이는 구조를 설명해줘 1776832552607
핵심은 질문 저장 직후 그 질문을 현재 브라우저 세션에 연결하고, 홈에서는 공개 전체 목록이 아니라 ‘내 최근 질문’ 뷰를 따로 읽어 바로 보여주는 구조로 가는 것입니다.
기사 정보
핵심 답변 홈에서도 내가 방금 보낸 질문이 바로 보이게 하려면, 구조를 공개 질문 피드와 내 질문 피드로 분리해야 합니다.
가장 실무적으로 안전한 방식은 이렇습니다.
- 질문 작성 API가 요청을 받으면 먼저 DB에 질문을 저장합니다.
- 이때 질문 상태는 바로
answered로 만들지 말고, 보통pending으로 저장합니다. - 저장한 질문 레코드에 현재 사용자 브라우저를 식별하는
anon_sid같은 세션 값을 연결합니다. - 홈 화면은 전체 공개 질문만 가져오는 것이 아니라, 별도로 현재 브라우저 세션 기준의 최근 질문 목록도 함께 읽습니다.
- 그래서 아직 답변 전인 질문도 작성자 본인 화면에서는 즉시 보이고, 나중에 답변이 달리면 같은 카드가 상태만 바뀌도록 만듭니다.
즉, “홈에서도 바로 보인다”는 건 홈이 공개 피드 하나만 보는 구조가 아니라, 공개 영역 + 내 세션 전용 영역을 같이 렌더링하는 구조여야 자연스럽게 됩니다.
왜 이렇게 해야 하는지 이 문제에서 가장 흔한 실패는 질문 저장은 됐는데, 화면에서는 공개된 answered 질문만 보여주는 경우입니다.
그러면 사용자는 실제로 질문을 잘 보냈어도 이렇게 느낍니다.
- "보냈는데 사라졌네?"
- "실패한 건가?"
- "반영이 안 된 건가?"
하지만 운영 관점에서는 또 아무 질문이나 홈 공개 영역에 즉시 노출시키면 문제가 생깁니다.
- 아직 검토되지 않은 질문까지 공개될 수 있음
- 저품질/도배 질문이 메인 화면을 어지럽힐 수 있음
- 답변 대기 상태가 공개 UX를 지저분하게 만들 수 있음
그래서 보통은 두 레이어로 나눕니다.
공개 피드 - 답변 완료된 것 위주 - 모두에게 보이는 영역 - 홈 메인 신뢰도를 유지
내 질문 피드
- 현재 브라우저 세션에서 내가 보낸 질문
- pending, answered, 필요하면 flagged 같은 상태 포함
- 홈에서도 "내가 방금 보낸 게 사라지지 않았다"는 확신 제공
이 구조가 좋은 이유는, 운영 품질과 사용자 체감 즉시성을 동시에 잡기 때문입니다.
바로 실행할 구조 구현 순서는 아래처럼 잡으면 됩니다.
질문 저장 시 세션 연결 질문 제출 API에서 해야 할 일은 단순 저장이 아닙니다.
- 쿠키에서
anon_sid를 읽음 - 없으면 새로 발급
- 질문을 DB에 저장
- 저장된 질문 row에
session_id또는 대응 필드를 연결
중요한 건, 질문과 브라우저 세션의 연결이 빠지면 나중에 "내 질문만 다시 불러오기"가 안 됩니다.
저장 직후 응답 payload에 방금 저장된 질문 포함 API 응답에 최소한 아래 정보는 바로 돌려주는 게 좋습니다.
- 질문 id
- 질문 본문/요약
- 상태(
pending) - 작성 시각
- 홈/질문 페이지에서 즉시 꽂아 넣을 수 있는 카드 데이터
이렇게 하면 프론트는 서버 재조회 전에도 낙관적으로 바로 렌더링할 수 있습니다.
홈 API 또는 홈 서버 컴포넌트에서 두 종류 데이터를 함께 준비 홈은 하나의 리스트만 가져오면 안 됩니다.
권장 구조는:
publicQuestions: 모두에게 보이는 answered 질문 목록viewerQuestions: 현재anon_sid기준 최근 질문 목록
렌더링할 때는 보통 이렇게 갑니다.
- 홈 상단 또는 질문 작성 박스 근처에
내 최근 질문 - 그 아래 기존 공개 질문/콘텐츠 피드
이렇게 분리하면 사용자 입장에서 이해가 쉽습니다.
상태 폴링 또는 재조회로 카드 업데이트
질문은 처음엔 pending으로 보이더라도, 답변 워커가 처리한 뒤 answered로 바뀔 수 있습니다.
그래서 프론트는 다음 중 하나를 넣는 게 좋습니다.
- 주기적 폴링
- 페이지 재방문 시 최신 조회
- 홈 포커스 복귀 시 재조회
운영 난이도까지 고려하면 처음엔 짧은 폴링 + 페이지 재진입 재조회 정도면 충분합니다.
홈에서의 표시 문구는 차분하게
pending 상태를 너무 기술적으로 드러내지 않는 게 좋습니다.
예:
- 답변 준비 중
- 질문 접수됨
- 검토 후 답변 반영 예정
피해야 할 표현:
- 큐 대기 중
- 작업 실패 시 재시도
- 내부 처리 중
사용자는 내부 파이프라인보다 "내 질문이 안 사라졌고, 진행 중이다"를 원합니다.
추천 데이터 흐름 예시 실제로는 아래 흐름이 가장 깔끔합니다.
- 사용자가 홈에서 질문 작성
- 서버가 질문 저장 + 세션 연결
- 응답으로 저장된 질문 카드 반환
- 홈 UI가 즉시
내 최근 질문영역 맨 위에 삽입 - 백그라운드 답변 로직이 나중에 해당 row 업데이트
- 홈이 재조회/폴링하면서 같은 카드가
answered상태로 전환
여기서 포인트는, 질문을 바로 공개 메인 피드에 섞는 게 아니라, 작성자 전용 뷰에 먼저 안정적으로 붙이는 것입니다.
주의할 점 ### 공개 피드와 개인 피드를 섞어버리면 생기는 문제 둘을 한 쿼리로 억지로 합치면 조건이 꼬입니다.
- 공개 기준과 개인 기준이 다름
- 상태 필터가 다름
- 정렬 기준도 달라질 수 있음
그래서 쿼리 레벨부터 분리하는 게 유지보수에 좋습니다.
세션 연결 누락
가장 치명적인 실수입니다.
질문은 저장됐는데 session_id가 안 붙으면, 사용자는 다시 와도 자기 질문을 찾을 수 없습니다.
pending을 공개 홈에 그대로 노출 초기엔 편해 보여도 금방 지저분해집니다. 특히 익명 질문 구조에서는 더 그렇습니다.
프론트만 낙관 업데이트하고 서버 진실값을 안 맞춤 프론트에서만 추가하고 서버 재조회가 없으면 새로고침 순간 사라질 수 있습니다. 반드시 서버 기준 조회가 뒤에서 따라와야 합니다.
추천 시작 범위 처음부터 복잡하게 하지 말고, 아래 범위로 시작하는 걸 권합니다.
- 질문 테이블에
session_id보장 - 질문 제출 응답에 저장된 질문 카드 포함
- 홈에
내 최근 질문섹션 추가 - 이 섹션은 현재
anon_sid기준 최근 5개만 표시 - 상태는 우선
pending/answered두 가지만 명확히 처리
이 정도만 해도 사용자는 체감상 "보내자마자 홈에서 확인된다"고 느낍니다.
추천 다음 단계 그 다음 확장 순서는 이렇게 가면 좋습니다.
- 홈과 질문 페이지 모두에서 같은
viewerQuestions로직 재사용 pending카드에 마지막 업데이트 시각 표시- 답변 완료 시 카드 강조 애니메이션 또는 배지 추가
- 너무 오래 대기 중인 질문은 운영자가 다시 확인할 수 있도록 별도 관리 뷰 연결
정리하면, 이 기능의 본질은 단순히 "홈에 바로 렌더링"이 아니라, 질문 저장과 동시에 현재 세션에 소유권을 연결하고, 홈이 그 세션 전용 질문 목록을 함께 읽도록 설계하는 것입니다. 그렇게 해야 사용자 입장에서 질문이 사라지지 않고, 운영 측면에서도 공개 피드 품질을 지킬 수 있습니다.