티스토리

별거있나
검색하기

블로그 홈

별거있나

wenys.tistory.com/m

웨니스 님의 블로그입니다.

구독자
0
방명록 방문하기

주요 글 목록

  • 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.. 공감수 0 댓글수 0 2024. 2. 7.
  • 개인용 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로 활용할 수 있는 방안이 있어 이를 적용하여 보았습니.. 공감수 0 댓글수 0 2023. 1. 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를 내려버리는 .. 공감수 0 댓글수 0 2023. 1. 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.. 공감수 0 댓글수 0 2023. 1. 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가 만들어져있고, 실제 사용하는 방법을 .. 공감수 0 댓글수 0 2023. 1. 24.
  • Server test용 General Mock server 만들기 Mock server Micro service architecture 에서는 내부 타 Service와 Interaction을 하는 경우가 많이있고, 새로운 Micro service를 개발할 때 외부 호출을 통해 동작을 테스트 해야하는 경우가 종종있어왔습니다. 이때 mock server를 이용했으면 하는 케이스가 많이 있어서, 좀 더 쉽게 셋업을 할 수 있는 Mock server에 대한 고민을 하다가 이번에 토이 프로젝트 삼아 서비스를 만들게 되었습니다. Github repo Repo : https://github.com/wen-ys/GeneralMock.git Config routingPolicies: - path: "/books/1" filters: - type: "DelayFilter" args: |.. 공감수 0 댓글수 0 2023. 1. 24.
  • GSON - Composite pattern class https://wenys.tistory.com/11 GSON https://github.com/google/gson Google에서 내어놓은 open source library이다, 용도는 간단합니다. java class object json json은 워낙 유명한 데이터 저장 포멧이므로 특별히 설명은 하지 않으려고 합니다. java에서는 기본적으로 serialize(직렬화)라는 기능이 제공되어집니다. 이 기능은 java object를 dump를 뜨는 것 처럼 그대로 byte 포멧으로 바꾸어주고, 다시 역직렬화도 가능합니다. 다만 여러 제약사항이 존재하는 데, deserialize로만 복원이 가능하며 class가 가진 맴버 변수들의 변화에 민감해서 장기 저장용이나 serialize하는 곳과 deseria.. 공감수 0 댓글수 2 2023. 1. 24.
  • Design pattern - Composite pattern Design pattern "객체 지향 프로그래밍 설계를 할 때 자주 발생하는 문제들을 피하기 위해 사용되는 패턴" 디자인 패턴이라는 정의에 대해서 누군가에게 설명 해본 적이 없어 구글링해서 나온 위키에 첫 문구를 발췌 해왔습니다. 실제 저도 처음 접한 개념은 객체 지향 프로그래밍에서의 좀 더 효과적이고 우아한 문제 해결을 솔루션세트 라는 느낌이었던 것 같았습니다. 하지만 현재는 패턴이라는 것은 객체 지향 뿐만 아니라 모든 영역에서 문제 해결 방법에 대한 탬플릿과 같은 개념으로 나에게는 정의되어 있는 느낌입니다. 사실 놀라운 발명이라고 하기에는 의외로 누구나 생각해낼 수 있는 아이디어에 가까운 것 같고, 소프트웨어 개발자들이 특정 유사한 상황에서 많이들 사용하고 좋은 방향이라고 판단된 구조들을 모아서 정.. 공감수 0 댓글수 0 2023. 1. 24.
  • golang GO routine channel 테스트 요즘 핫하다는 golang, 과거에는 Android app개발을 주로 해왔던 터라, Java를 사용하다가 근래에 주로 사용하는 언어가 Python으로 변경이 되면서 초반에는 심플한 문법... 파이써닉하다. 라는 표현에 매료되어 찬양할 수 밖에 없는 경험을 해왔습니다. 하지만 사용하면 할수록 단점들도 보이기 시작했습니다. 물론 단점이 있다고 나쁘다는 건 아닙니다. 단점이 없는 언어는 없을 것이기에... 넘쳐나는 다양한 Module들과 이로인해 간단한 기능을 수행하기 위한 코드를 작성하는 데는 아직도 Python이 가장 먼저 떠오릅니다. 하지만 좀 더 복잡도 있고, 안정적인 프로그램을 만들어야하는 상황이 되면 Python을 택하는 데 조금 고민이 되기 시작했습니다. Type... 이건 Python에게 양날의.. 공감수 0 댓글수 0 2023. 1. 24.
  • OIDC Login 구현해보기 Part-3 앞서 Part에서 Frontend 측에서 Browser를 통해 IDP를 거쳐 code를 받는 것 까지 진행되었습니다. Confidential Type의 인증은 최종적으로 Secret을 이용하여 access token을 받게 되는 데 이 Secret은 Backend 에서 보관하고 있는 것이 안전할 것입니다. Static에 해당하는 부분은 Browser에 보여질 때 실제로 Client측에 그대로 Download 되어지기 때문에 Client측에서 Secret을 사용하려고 하면 그대로 노출이 되게 될 것 입니다. 앞서 User가 ID, PASSWORD를 입력해서 받은 CODE를 가지고 backend로 가져와서 실제 Token을 발급받고, 이 Token을 이용해서 IDP로 부터 USER의 정보도 받아보도록 하려고.. 공감수 0 댓글수 1 2023. 1. 24.
  • OIDC Login 구현해보기 Part-2 사용할 IDP를 설정했으므로, 이제 본격적으로 User에게 Input을 받을 Frontend 그리고 최종적으로 인증을 완료하고 Token을 받게될 Backend를 구현해보려고 합니다. Frontend쪽은 React 기반의 Javascript, Backend쪽은 Gin 기반의 GO 언어를 이용해보려고 합니다. 실제 Flow을 이해하고 나면 어떤 Framework, Language를 사용할지에 대한 건 큰 문제는 아닙니다. 구현하는 과정에서도 단순히 Curl 명령으로도 이를 수행할 수 있음을 짚고 넘어갈 것 입니다. IDP로 인증 요청하기 이제부터 단계별로 진행 해나갈 FLOW 입니다. 먼저 [Request static page]는 Browser로 Service하는 웹사이트에 접속하는 단계이므로 지금부터 진.. 공감수 0 댓글수 0 2023. 1. 24.
  • OIDC Login 구현해보기 Part-1 OIDC... Open ID Connect 일명 OIDC ... 요즘 많은 사이트에서 볼 수 있는, 카카오, 네이버 로그인, 페이스북, 구글 계정 등으로 로그인과 같이 서비스를 제공해주는 측에서는 민감한 사용자의 개인정보 (아이디, 패스워드등)을 회원가입을 통해 수집/보관하지 않고 사용자를 인증하는 과정을 Provider측에 위임하는 형태의 서비스를 많이 볼 수 있습니다. 이는 사용자 입장에서도 불필요하게 작은 사이트에도 회원가입을 일일이 해야하는 수고로움을 덜어주는 좋은 방향인 듯 합니다. Provider 측에서는 사용자가 접속하는 서버의 정보들을 다 수집할 수 있긴하겠지만... 사실 OIDC 이전에 SAML 2.0, OAuth 2.0 등의 IDP(IDentity Provider)도 있지만, 가장 최근.. 공감수 0 댓글수 0 2023. 1. 24.
    문의안내
    • 티스토리
    • 로그인
    • 고객센터

    티스토리는 카카오에서 사랑을 담아 만듭니다.

    © Kakao Corp.