스케일아웃과 세션 — 연결은 외부화할 수 없다
서버를 두 대로 늘리는 순간 세 가지가 동시에 깨진다. 트래픽 분배, 로그인 세션, 그리고 서버 간 메시지 전파다. 이 글은 앞의 둘이 왜 일반적인 문제이고 마지막 하나만이 WebSocket 고유의 난점인지, 그리고 브로커를 넣어도 남는 것이 무엇인지를 다룬다.
태그
6편
서버를 두 대로 늘리는 순간 세 가지가 동시에 깨진다. 트래픽 분배, 로그인 세션, 그리고 서버 간 메시지 전파다. 이 글은 앞의 둘이 왜 일반적인 문제이고 마지막 하나만이 WebSocket 고유의 난점인지, 그리고 브로커를 넣어도 남는 것이 무엇인지를 다룬다.
알림은 지워지는 계기가 없어 무한히 쌓이는데 실제로 읽히는 것은 언제나 최신 스무 건뿐이다. 이 비대칭 위에서 저장소를 문서형으로 고른 근거를 도메인 특성에서 끌어내고, 기준값을 넘겨 받는 페이징과 읽음 경계를 시각 한 값으로 푸는 설계, 가장 자주 불리는 엔드포인트를 캐시로 받는 자리, 그리고 90일이 지난 문서를 배치 없이 치우는 만료 인덱스까지 차례로 본다.
캐시 무효화 방식 네 가지와 TTL 설계 원칙, Stampede·Penetration·Avalanche 방어, Spring Cache 구현 3계층의 함정, 그리고 원자 카운터와 분산 락으로 동시성을 다루는 법을 정리한다.
캐시를 붙이기 전에 끝내야 할 세 가지 결정을 정리한다. 캐싱 대상 판별 기준, 요구사항에 맞는 Redis 자료구조 선택, 그리고 Look-Aside부터 Write-Back까지 네 가지 캐시 전략의 트레이드오프다.
캐시 전략과 자료구조 선택지를 한 표로 모으고, 운영에서 실제로 밟는 실패 모드 여덟 가지와 대응, 그리고 설계·무효화·동시성·운영에 걸친 25개 질문에 결론부터 답한다.
좋아요·구독을 Set으로 푸는 근거와 멱등 API 설계, 댓글을 Redis가 아닌 저장소에 두는 판단, 단일 스레드 모델이 낳는 운영 제약, 영속화·축출 정책·고가용성 구성을 정리한다.