ECS에 spring boot task 를 2개 배포하면서, 구글 로그인이 되지 않는 문제가 발생하였다.
매 번 로그인이 되지 않는 것이 아니라, 10번 중 7번 정도 로그인 에러가 발생하였다.
문제점
매 요청마다 다른 spring 서버로 요청을 보내기 때문에 구글이 다른 서버에서 온 요청으로 판단하여 401 에러를 보낸다.
해결 방안
로그인 하는 동안 같은 spring 서버로 요청하면 되지 않을까?
어느 서버로 요청을 보낼 지 결정하는 것은 현재 서비스에서 AWS ALB 가 담당하고 있다.
따라서, 요청을 일정 시간 같은 서버로 보내도록 하기 위해서는 AWS ALB 를 설정해야 될 것 같았다.
동작 방식
ALB 에는 그룹 수준 고정 활성화
라는 옵션이 있는데, 이는 일정 시간 동안 같은 대상으로 요청을 보내게 하는 옵션이다.
해당 옵션을 활성화하면 ALB에서 AWSALBTG 라는 쿠키를 설정하게 되고, 요청마다 쿠키를 보고 어느 대상으로 요청을 전송할 지 선택한다.
설정하기
ALB 의 리스너에서 리스너 편집
으로 이동
그룹 수준 고정 활성화
옵션을 통해 일정 기간 같은 대상으로 요청을 보내도록 설정
대상 그룹으로 이동해 대상 그룹 속성 편집
으로 이동
대상 선택 구성에서 고정
옵션을 키고, 로드밸런서 생성 쿠키
선택 후 기본적으로 설정되어 있는 로드 밸런서 속성에서 이어 받기
옵션으로 구성
일정 시간동안 같은 대상으로 요청을 보내게 된다
주의
기간을 길게 잡게 되면 라운드 로빈 방식에서 부하 분산이 완벽히 이루어지지 않을 수 있다.