아 정말 삽질을 많이했던 것 같다 순수 시간으로만 거의 1~2일 걸린 것 같다.
왜 안되는거지 왜 안되는거지 고민을 많이했었는데, 결국에는 내가 이겼다. ㅋㅋ
현재
현재 다음과 같은 구조로 다중서버에 로드밸런싱 라운드로빈 방식으로 서버에 들어온 요청을 순서대로 돌아가며 배정하는
방식으로 라우팅해주고있다. 이때 , oauth2 로그인을 하는데 있어서 오류가 발생했다.
왜? 오류가 발생했을까 ?
처음 카카오 로그인 화면이 뜨고 로그인을 하게됐을 때 401 unauthrization error 가 떳고
처음 카카오 인증서버에 인증에 성공하고 redirect하는 시점에 로드밸런싱 주소를 가르키고 있는데
이때 라운드로빈 방식이므로 처음 요청했던 서버와는 다른 서버에 다시 redirect가 되어 쿠키 및 세션이
제대로 유지가 안됐던 것이다.
그럼 해결방안은 ?
- 로그인 하는 동안 같은 spring 서버로 요청하면 되지 않을까?
어느 서버로 요청을 보낼 지 결정하는 것은 현재 서비스에서 AWS ALB 가 담당하고 있다.
따라서, 요청을 일정 시간 같은 서버로 보내도록 하기 위해서는 AWS ALB 를 설정해야 될 것 같았다.
동작 방식
- ALB 에는 그룹 수준 고정 활성화 라는 옵션이 있는데, 이는 일정 시간 동안 같은 대상으로 요청을 보내게 하는 옵션이다.
- 해당 옵션을 활성화하면 ALB에서 AWSALBTG 라는 쿠키를 설정하게 되고, 요청마다 쿠키를 보고 어느 대상으로 요청을 전송할 지 선택한다.
타켓그룹의 속성에 들어온다 편집 클릭
약 10초동안 처음 요청한 서버에 다시 접속할 수 있도록 일정 시간동안 같은 서버에게 request할 수 있도록 설정하면 된다.
이것을 찾아보니 stickey session 이라고한다. 예전에 session 방식으로 로그인 할 때 많이 사용했던 방식이다.
정말 모든 원천은 기본기에서 나오는 것 같다. 주의하고 또 생각하자.
주의
- 기간을 길게 잡게 되면 라운드 로빈 방식에서 부하 분산이 완벽히 이루어지지 않을 수 있다.
'AWS' 카테고리의 다른 글
nginx port 분리하여 blue/green 배포 (0) | 2023.10.04 |
---|---|
[Spring] 배포 서버의 도커 컨테이너에 크롤링 환경 구축하기 (0) | 2023.09.28 |
채팅서비스 sql vs nosql mongodb ? dynamodb ? (0) | 2023.09.10 |
aws codedeploy 블루/그린배포 중 오류 (0) | 2023.09.08 |
NAT Gateway를 왜 쓰는걸까 ? (0) | 2023.08.30 |