blessflow 사이트에 SSO 적용, (중간과정 셀프 정리)
https://youtube.com/shorts/phqesaqYzfU?feature=share
[영상]
브라우저에서 모든 통신은 cloudflare tunnel과 연결된 edge_proxy서버에서 받아서 봇 차단과 라우팅을 수행해서 백엔드와 관련된 요청은 backend_gateway서버로 전달하고, backend_gateway서버에서는 JWT인증을 담당하며 각 로컬통신 하위 서버들(Auth서버, Notification서버 등)과의 통신 허브 역할을 합니다.
현재 Auth 서버에서 로그인 토큰을 발급하고 게이트웨이를 통해서 프록시로 나가서 브라우저에 전달합니다. 브라우저는 다음 요청을 할 때 그 jwt 토큰을 http-only로 보관하고 있다가 api요청에 함께 실어서 보냅니다.
그러면 다시 프록시를 거쳐 게이트웨이에서 jwt토큰의 서명과 만료 시간을 확인합니다. 문제가 있다면 게이트웨이 선에서 거절하고, 문제가 없다면 산하의 로컬 auth서버에 api/auth/me 를 보내어 실제 이메일, 닉네임, 역할, 정지 여부 등을 확인합니다. 그래서 예를 들어 탈퇴한 회원이면 거절을 돌려보내겠죠.
이렇게 하는 이유는 1차 검증으로 Stateless한 JWT검증을 하고 2차 검증으로 Stateful한 DB나 캐시 조회 검증을 해서, 성능을 최적화 하기 위해서입니다.
한편,
Notification 서버에는 특정 시간 마다 polling을 요청해서 업데이트된 정보를 가져옵니다. Websocket을 사용하지 않은 이유는 Websocket이 무겁고 비용이 들기 때문입니다. polling은 가볍지만 실시간성이 부족하죠.
그래서 실시간성이 필요한 알림은 좀더 빠르게 받아오게 하기 위해서, SSO 로그인과 연계하여, 타 서비스에서도 알림이 필요한 일을 예약했을 때 이 중앙 대시보드에서 그 polling 주기를 동적으로 짧게 변경 가능하도록 하였습니다. 중요한 일이 있을 때에만 polling주기를 짧게 가져가는 겁니다.