spring cloud gateway(3)
-
Connection reset by peer 이슈
Connection reset by peer io.netty.channel.unix.Errors$NativeIoException: readAddress(..) failed: Connection reset by peer Spring cloud gateway 도입을 위해 dev 환경에 배포를 해놓고 Monitoring 중이었습니다. 간간히 발생하는 500 에러... 에러 메시지는 위와 같았습니다. 처음에는 backend 서버에서 connection을 어떤 오류와 같은 이유로 단순히 connection이 끊어지는 건가? 라고 추측하고, 관련해서 backend와 연동해서 로그를 보기위해 Sleuth를 적용하고 trace-id를 이용해서 해당 이슈가 발생할때 backend server에는 무슨일이 일어나는 가, ..
2023.01.24 -
Spring cloud gateway response body cache
Reponse body cache Request body에 이어 Response body도 리턴하기 전에 읽어야 하는 요구사항이 나타났습니다. 최우선으로는 구현된 library나 내부 필터가 존재하면 이용하는 방향으로 가려고 했지만 신기하게도 사용빈도가 떨어지는 이유인지 Response body의 경우 만들어진 캐싱 코드가 없는 것 같아보여 직접 구현을 해야했습니다. @Component public class ResponseBodyCheckFilter implements GlobalFilter, Ordered { @Override public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { return chain.filter( ex..
2023.01.24 -
Spring cloud gateway request body cache
Request body cache Spring cloud gateway를 도입하는 과정에서 backend 로의 routing 전에 request body를 열어보아야하는 요구사항이 있었습니다. 특별히 손을 대지 않는 다면, filter들을 통해서 라우팅을 하는 과정에서 body가 읽혀지게 됩니다. 하지만 rest call에서 body는 상대편에서 보내오는 data stream을 직접 읽어오는 식이다보니 버퍼에 있는 내용을 꺼내게 되면 비게 됩니다. 버퍼에서 두번 읽을 수 없기 때문에 두 곳에서 사용을 하려면 처음 읽은 데이터를 어떤 식으로든 보존해 두었다가 재사용을 해야합니다. Spring cloud gateway에는 이를 cache를 통해서 해결하게끔 filter가 만들어져있고, 실제 사용하는 방법을 ..
2023.01.24