개발/Spring

maxLifeTime 무제한으로 발생한 이슈

hojak99 2023. 5. 16. 19:03

요즘 대부분의 회사에서는 MSA 로 서비스가 구성되어 있다. 그렇다면 자신이 담당하고 있는 서비스에서 다른 서비스에 API 를 호출하게 되는 경우가 필연적으로 생기게 되는데 이 때 파악하지 못한 곳에서 문제가 생겨 훗날 기억하기 위해 글을 작성하게 되었다.

WebClient 기반으로 A 서비스의 API 를 호출하고 있다고 가정해보자. 이 때 A 서비스는 AWS EB 기반의 blue-green 으로 구성되어 있으며, beanstalk 의 environment url (active.beanstalk.com) 은 route 53 에 test.com 에 연결되어 있다고 해보겠다.

A 서비스가 배포할 시에 각 blue - green 환경의 url 을 스왑하는 형식으로 구성되어 있다.
좀 더 쉽게 표현하면 다음과 같다.

blue 배포 시
green 배포 시

 

이 때 WebClient 를 이용하여 A 서비스의 API 를 호출할 경우 maxLifeTime 등의 옵션을 통하여 특정 주기마다 connection 을 새로 맺도록 해주어야 한다. 

예를 들어 A 서비스의 API 호출 시 blue 환경에 대한 connection 이 맺어져 있을 때 green 환경으로 url 스왑이 발생한다면 connection 새로 맺지 않고 계속 blue 환경에 대한 IP 를 물고 있기 때문에 green 환경이 아닌 blue 환경에 대해 요청이 들어가게 된다. 그렇기 때문에 특정 주기마다 connection 새로 맺게 하여 green 환경으로 요청이 들어가게 끔 하도록 설정을 해야한다.

서비스 특성에 맞게 docs 를 내용을 기반으로 하여 유의미한 설정 값을 사용할 수 있도록 하자.
keep-alive 와 유사한 역할을 하니 이것도 참고하면 좋을 듯 싶다.

https://projectreactor.io/docs/netty/snapshot/reference/index.html

반응형