21.04.28 02:02 작성
·
289
0
선생님 강의 잘 듣고있습니다. 질문드리겠습니다.
서버에 접속 시, SessionAffinity 옵션이 http의 stateless 를 보완하기 위해 처음 접속했던 포드에서 세션을 가지고 있게 함으로 연결을 지속할 수 있다 라고 이해했습니다. 그래서 SessionAffinity 옵션을 사용해서 클라이언트가 처음 접속했던 포드로 접속하는 기능을 제공한다 이해했는데.. 여기서 이해가 안가는 것이 있습니다.
처음 클라이언트가 서버에서 로그인 기능을 요청했을 때, 서버의 A포드가 로그인을 담당하는 역할을 한다면 원할하게 서비스가 제공될 것일텐데요. 그리고 그 이후 클라이언트가 장바구니 기능을 사용하였을 때는 B포드에 서비스 요청을 한다는 상황에서 연결이 끊긴다는 가정하에 클라이언트는 B포드에 다시 서비스 요청을 하는게 일반적인 상황인데 여기서는 그럼 A포드로 다시 요청하는 건가요? 그렇다면 사용자는 계속 로그인을 해야하는 상황일텐데.. 이해가 잘 안갑니다ㅠ
답변 2
1
안녕하세요 강사 최일선입니다.
처음 클라이언트가 서버에서 로그인 기능을 요청했을 때, 서버의 A포드가 로그인을 담당하는 역할을 한다면 원할하게 서비스가 제공될 것일텐데요. 그리고 그 이후 클라이언트가 장바구니 기능을 사용하였을 때는 B포드에 서비스 요청을 한다는 상황에서 연결이 끊긴다는 가정하에 클라이언트는 B포드에 다시 서비스 요청을 하는게 일반적인 상황인데 여기서는 그럼 A포드로 다시 요청하는 건가요? 그렇다면 사용자는 계속 로그인을 해야하는 상황일텐데.. 이해가 잘 안갑니다ㅠ
위 사례는 사실 극단적인 사례를 하나 들어들인 예입니다. 뒤에 말씀 하신 A와 B 포드가 별도로 운영되는 경우와는 다른 경우로 이해하시면 좋겠습니다. 말씀하신 경우에는 다음 방법 중에 하나로 해결하시면 좋을 듯 합니다.
api gateway에서 인증을 수행하고 뒤쪽에 실제 기능이 있는 API로 연결하는 방법입니다. 아래는 AWS를 사용한 사례이지만 구성 자체는 비슷하다고 이해하시면 좋을 듯 합니다. gateway를 통과할때마다 인증을 수행하는 방식입니다. 허용되지 않는 API 요청을 수행하는 경우에는 403을 반환합니다.
그림 출처: https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html
두번째 방법은 프론트에서 JWT 토큰을 사용해 auth 서버에 저장하고 이 저장된 권한을 각각의 API 서버에서 확인하는 방법입니다.
https://taes-k.github.io/2019/06/20/spring-msa-4/
다시 말씀드리지만 앞서 제시해드린 사례는 극단적인 하나의 사례를 말씀드린 내용입니다. 세션의 연결을 연속적으로 처리해야 하는 경우에는 세션어피니티를 사용해주시면 좋겠습니다. 그리고 인증관련된 다양한 처리를 위해서는 말씀드린 사례와 같이 여러 형태로 인증을 수행하실 수 있습니다.
감사합니다.
0