본문 바로가기

전체글139

WebClient 인코딩 중복 이슈 이전글 에서 WebClient 인코딩 중복에 대해서 한번 다룬적 있다. 간단히 요약하면, uriBuilder 를 이용해서 만들면 이미 인코딩된 query string 값을 또 인코딩 해서 이중 인코딩 한 결과가 나온다. 그래서 미리 인코딩 할 필요가 없다. // 아래처럼 만들면, 최종 request 는 이중 인코딩된 결과로 보내진다. this.webClient .get() .uri(uriBuilder -> uriBuilder .path("/api") //.query("name=양봉수") .query("name=%EC%96%91%EB%B4%89%EC%88%98") .build() ) .retrieve() 그런데 query string 이 json 일때는 미리 인코딩 해야만 한다. 안하면 에러가 발생한다... 2023. 3. 13.
DID 스터디 2회차 1. DID 샘플 프로젝트 로컬에서 띄우기 1. web 을 띄워야함(node 서버) - https://github.com/conanoc/indy-sample-agents 2. npm install 해야함 3. node version 16.13.0 으로 down grade 해야함. -> npm 과 궁합 4. indy-sdk 설치 $ brew tap conanoc/libindy $ brew install --build-from-source libindy $ sudo ln -s /opt/homebrew/lib/libindy.dylib /usr/local/lib/libindy.dylib (M1 mac) - 참고 : https://github.com/hyperledger/indy-sdk/#macos 샘플 프로젝트.. 2023. 2. 25.
Enum 타입 에 따른 테스트(DynamicTest) 커머스 관련 개발을 하다보니 수많은 Enum 들을 만나게 된다. 아래 Enum 은 간단한 상품타입 코드다. 단순 옵션과 복잡한 옵션 두개의 타입이 있다. public enum ProductType { SIMPLE_OPTION, COMPLEX_OPTION } 상품타입에 따라 달라지는 부분을 테스트 하기 위해선 ParameterizedTest 와 EnumSource 를 사용하면 된다. @ParameterizedTest @EnumSource(names = {"SIMPLE_OPTION", "COMPLEX_OPTION"}) void enumSourceTest(ProductType productType) { System.out.println(productType); } 하지만 Enum 들 관계에 따라 비지니스 로직.. 2023. 2. 18.
DB Connection Storm 1. DB Connection 일반적으로 DB 서버와 애플리케이션 서버는 물리적으로 분리해 운영한다. 그래서 네트워크 통신을 해야하고 서로 Connection을 맺어야 한다. 2. DB Connection Pool TCP 기반 네트워크 통신으로 Connection을 맺어야 하는데 연결을 맺을때는 3 way handshake, 연결을 끊을 때는 4 way handshake 가 필요하다. 즉 연결을 맺고 끊는데 시간이 걸린다. 사용자 요청마다 Connection 을 맺고 끊는 작업을 하게 되면 비효율적이다. 그래서 DB Connection Pool 을 이용해 애플리케이션 서버가 배포될 때 미리 DB 서버와 통신할 때 사용할 Connection 들을 만들어 놓는다. 그리고 사용자 요청이 오면 Pool 에 있는.. 2023. 2. 11.
자바로 같은 상품 Grouping 아래 장바구니 페이지를 보면 손목 보호대는 같은 상품 2개가 묶여서 담겨있다. 하지만 팔꿈치 보호대는 같은 상품임에도 1개씩 개별적으로 담겨있다. 그래서 같은 상품끼리 Grouping 해주는 작업이 추가적으로 필요하다. 먼저 Product 와 Item 의 관계를 이해해야한다. 위에서 Product 는 '슈퍼비스트 손목보호대' '슈퍼비스트 팔꿈치, 무릎 관절보호대' 이고 Item 이 블랙, 팔꿈치(무릎은 선택안함) 이다. 쉽게 생각하면 Item 은 옵션정보다. 그래서 Product 는 여러개의 Item 들을 가질 수 있다. import java.util.List; import lombok.Builder; import lombok.Value; @Value @Builder public class Product.. 2023. 2. 5.
DID 스터디 1회차 1. SSI(Self Sovereign Identity) 와 DID(Decentralized Identifier) SSI 에 대해 설명하기전에 먼저 기존 ID 시스템에 대해 설명하려한다. 1세대: 서비스마다 각자 ID 관리 2세대: SSO(Single Sign On) 페이스북인증, 구글인증 0. 페이스북의 개발자 포털에 접속하여, 페이스북 인증을 사용하고자 하는 애플리케이션 정보를 등록한다(서비스명, 서비스 URL, 그리고 인증이 성공했을 때 인증 성공 정보를 받을 콜백 URL) 그리고 Client ID와 Client Secret을 발급받는다. 1. 사용자가 웹 브라우저에서 Client Application(페이스북 로그인 기능 사용)을 이용하려고 요청한다. 2. Client Application 은 사.. 2023. 1. 28.