전체 글(25)
-
Spring cloud gateway에서 허가되지 않은 url character 사용하기
레거시 시스템에 Spring cloud gateway를 도입하면서 하나의 장벽에 부딪히게 되었습니다. 오랫동안 유지되어온 시스템에서 client들에게 완벽한 하위호환을 보장해주어야하는 상황에서 일부 client들이 url에 포함해서는 안되는 특수문자들을 인코딩을 하지 않고, 날 것으로 그대로 보내오고 있었습니다. http://localhost:8080/test/case/key/var1|var2 [2dd57409, L:/127.0.0.1:8080 - R:/127.0.0.1:59831] Decoding failed: REQUEST(decodeResult: failure(java.net.URISyntaxException: Illegal character in path at index 40: http://loc..
2024.02.07 -
커널 파라메터 tcp_tw_recycle 이슈
요즘 cloud 환경을 많이 사용하는 데, cloud 환경에서 NAT를 거쳐 onPrem 같은 구 환경으로 네트웍을 연결해놓은 상태라면, 구 커널 버전 환경에서 구동 중인 서버라면 해당 이슈가 발생할 수 있다는 걸 알게 되었습니다. 1) TIME WAIT (https://docs.likejazz.com/time-wait/) Active close 측에서 만들어지는 Socket status로 Timeout 설정이 끝날때 까지 Socket이 생존한채로 유지됩니다. tcp_tw_reuse : TIME WAIT 상태의 Socket 들로 인해서 Outgoing connection시 Socket 부족 현상이오면 Reuse (https://forum.vyos.io/t/linux-tcp-tw-reuse-2-how-is..
2024.02.07 -
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 -
개인용 Maven library github으로 셋업하기
Maven repo Maven repo는 library를 집합소이며, gradle, maven 빌드 타임에 해당 필요한 의존성을 Download해서 프로젝트 빌드할 때 사용됩니다. 실제 빌드시 다운받은 library들은 해당 위치(linux, mac)에 cache의 형태로 저장 되어있습니다. ~/.m2/repository 간혹 팀내에서 자체 라이브러리를 만들어서 공유하며 사용해야할 일이 있습니다. 오픈소스 라이브러리로 특별히 오픈할 의도는 아니었기에 계정을 등록하고해야하는 maven repo(https://mvnrepository.com) 에 직접 올리기는 뭔가 애매했습니다. 찾다보니 개인용 github계정에 public repo를 maven repo로 활용할 수 있는 방안이 있어 이를 적용하여 보았습니..
2023.01.24 -
bytebuddy로 Java class 일부 method 교체하기 (해킹)
java.net.URI$match Uri 에 특수문자가 들어가게되면 http protocal을 오갈때 보통 encoding을 통해서 parsing에 문제가 없도록 해주게 됩니다. 하지만 이게 언제부터 생긴 국룰인지 모르겠지만 과거에는 그렇지 않았음을 알게 되었습니다. Legacy client들이 encoding을 하지 않고, 심지어 해킹이 가능할 수 있는 특수문자 '파이프'와 같은 char를 날 것으로 보내오고 있었습니다. 현재 Spring cloud gateway(이하 SCG)를 apigateway로 준비하고 있는 중입니다. 그 과정에서 TC를 통해 해당 이슈가 드러나게 되었는 데, 내용인 즉슨 Netty에서 URI를 검수하면서 특정 특수 문자에 대해서는 그냥 400 Bad gateway를 내려버리는 ..
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