WebSocket 실전 패턴: 실시간 알림을 직접 구현하며 배운 것들
실시간 알림을 구현하려고 WebSocket을 공부했다. HTTP 폴링부터 Supabase Realtime까지, 실시간 통신의 선택지와 실전 패턴을 정리했다.

개발과 기술에 대한 이야기를 기록합니다.
실시간 알림을 구현하려고 WebSocket을 공부했다. HTTP 폴링부터 Supabase Realtime까지, 실시간 통신의 선택지와 실전 패턴을 정리했다.

매일 수동으로 데이터를 정리하다가 지쳤다. 서버리스 환경에서 크론잡과 백그라운드 작업을 구성하면서 배운 것들.

3개월 전에 만든 내 API를 보고 이게 뭔지 몰랐다. 일관된 REST API를 설계하기 위한 네이밍, 버전 관리, 페이지네이션 패턴을 정리했다.

REST API를 만들 때마다 프론트엔드와 백엔드의 타입이 어긋났다. tRPC를 도입하고 API 명세서 없이 타입이 자동으로 맞춰지는 경험을 했다.

사용자가 회원가입 버튼을 누르면 이메일을 보낼 때까지 로딩 바가 돌아가고 있었습니다. 이메일 서버가 죽으면 회원가입도 실패했죠. 이 강결합(Tightly Coupled) 문제를 해결하기 위해 메시지 큐(Redis/BullMQ)를 도입하고, '식당 주문표' 비유로 비동기 처리를 이해한 과정을 공유합니다.

Rate Limiter 없이 API를 공개하면 사용자 자신이 DDOS 공격자가 될 수 있다. Token Bucket, Leaky Bucket, Sliding Window 등 핵심 알고리즘을 비교하고, Redis와 Lua Script를 사용해 분산 환경에서도 완벽하게 동작하는 Rate Limiter를 구현하는 방법을 정리해본다.

사용자가 늘어나서 서버를 증설했는데, 로그인이 자꾸 풀린다는 항의가 들어왔습니다. 세션(Session) 인증의 한계와 토큰(Token, JWT) 인증으로의 전환, 그리고 Refresh Token 도입기입니다.

기능 하나를 추가했을 뿐인데, DB CPU가 100%를 찍는 상황이 있다. 원인은 ORM의 '지연 로딩'이 만든 N+1 문제다. 1000번의 쿼리를 1번으로 줄인 최적화 과정과, 주니어 개발자가 흔히 저지르는 ORM 실수들을 정리해본다.
