읽음 상태 추적이 중요한 이유

실시간 채팅 시스템에서 읽음/안읽음 상태를 정확히 추적하는 것은 사용자 경험의 핵심입니다.

따라서 정확성성능 모두 만족하는 설계가 필수적입니다.

핵심 고민: 어떻게 정확하고 빠르게 읽음 상태를 추적할 것인가?

초기 설계의 문제점

1. 단순 메시지 카운트 방식의 한계

-- PostgreSQL 방식 (성능 문제)
SELECT COUNT(*) FROM messages
WHERE room_id = ? AND created_at > ?;

문제점:

2. 각 메시지마다 읽음 여부 조회의 비효율

메시지를 조회할 때 각 메시지마다 개별적으로 읽음 여부를 판단하는 방식:

메시지 1개 조회 → 읽음 여부 확인
메시지 2개 조회 → 읽음 여부 확인
...
메시지 100개 조회 → 읽음 여부 확인 (100번 반복)

문제점: