프론트엔드에서의 동시성 제어? promise 활용!(supabase auth 코드 까보기)
- 프론트엔드 동시성 제어는 중복 요청 처리를 막고 첫 요청 결과를 공유하는 패턴 🔄.
- 문제 배경: Next.js와 Supabase 사용 시, 서버 사이드 렌더링에서
getSesstion
호출 시 Auth Rate Limit 에러 발생 🚨.
- Supabase Auth는 서버와 클라이언트에서 쿠키 파싱 방식으로 세션 데이터를 가져오지만, 서버는 스테이트리스, 클라이언트는 메모리 공유 가능 🧠.
getSesstion
은 엑세스 토큰이 유효하지 않을 때 리프레시 토큰을 사용하여 Supabase에 리프레시 요청을 보냄 🔑.
- 클라이언트의
getSesstion
메서드에는 동시성 제어가 적용되어 있어 중복 요청을 방지함 🛡️.
refreshingDefault
에 프로미스를 저장하여 첫 번째 요청 처리 중에는 해당 프로미스를 공유하고, 완료 후 결과를 다른 요청에 전달 🤝.
Default
클래스를 활용하여 프로미스처럼 동작하게 만들어 동시성 제어를 구현 💡.
- 서버에서는 스테이트리스 특성 때문에 동시성 제어가 불가능하여 Auth Rate Limit 에러가 발생할 수 있음 😥.
- 브라우저에서
getSesstion
을 호출하면 동시성 제어 덕분에 Auth Rate Limit 에러를 피할 수 있음 ✅.