사이드 프로젝트로 간단한 실시간 채팅을 붙여보려는데 방식이 여러 개라 뭘 골라야 할지 모르겠어요. 검색하면 폴링, 롱폴링, 웹소켓, SSE 이렇게 나오는데 각자 언제 쓰는 건지 감이 안 와요.


지금 제가 생각한 건 그냥 setInterval로 1초마다 새 메시지 있는지 서버에 물어보는 방식이거든요.


setInterval(() => {
fetch('/messages?after=' + lastId)
.then(r => r.json())
.then(render);
}, 1000);


이렇게 해도 채팅처럼 보이긴 하는데 뭔가 서버에 요청을 계속 때리는 게 비효율적인 느낌이에요. 사람 많아지면 서버 터지는 거 아닌가 싶고요.


웹소켓이 실시간엔 제일 좋다는 얘기는 많이 들었는데 그럼 무조건 웹소켓 쓰면 되는 건가요? SSE라는 것도 있던데 이건 서버에서 클라이언트로 단방향으로만 보내는 거라던데 채팅은 양방향이라 안 맞는 건가요? 각 방식이 어떤 상황에 적합한지, 채팅 정도 규모면 뭐가 현실적으로 나은 선택인지 경험담 좀 듣고 싶습니다.