매일 매일, 차곡 차곡 쌓기



완벽하지 않은 것을 두려워 말며,
완성도를 높히는데 집중하자.

분류 전체보기 77

[WebClient] RequestBody

RequestBody는 다음 예제와 같이 Mono나 Kotlin의 Deferred와 같이 ReactiveAdapterRegistry에서 처리되는 비동기 형식에서 인코딩될 수 있습니다. Mono personMono = ... ; Mono result = client.post() .uri("/persons/{id}", id) .contentType(MediaType.APPLICATION_JSON) .body(personMono, Person.class) .retrieve() .bodyToMono(Void.class); 아래 예제와 같이 객체의 스트림을 인코딩할 수도 있습니다. Flux personFlux = ... ; Mono result = client.post() .uri("/persons/{id}", ..

Spring/WebClient 2024.03.28

[WebClient] Exchange

exchangeToMono() 및 exchangeToFlux() 메서드(또는 Kotlin에서 awaitExchange { } 및 exchangeToFlow { })는 응답 상태에 따라 응답을 다르게 디코딩해야 하는 고급 케이스에 유용합니다. Mono entityMono = client.get() .uri("/persons/1") .accept(MediaType.APPLICATION_JSON) .exchangeToMono(response -> { if (response.statusCode().equals(HttpStatus.OK)) { return response.bodyToMono(Person.class); } else { // 에러로 전환 return response.createError(); } })..

Spring/WebClient 2024.03.28

[WebClient] Retrieve

retrieve() 메서드를 사용하여 응답을 추출하는 방법을 선언할 수 있습니다. 예를 들면 WebClient client = WebClient.create("https://example.org"); Mono result = client.get() .uri("/persons/{id}", id) .accept(MediaType.APPLICATION_JSON) .retrieve() .toEntity(Person.class); 또는 바디(body)만 가져오려면 WebClient client = WebClient.create("https://example.org"); Mono result = client.get() .uri("/persons/{id}", id) .accept(MediaType.APPLICATIO..

Spring/WebClient 2024.03.28

[WebClient] Configuration Timeout

연결 시간 초과를 구성 import io.netty.channel.ChannelOption; HttpClient httpClient = HttpClient.create() .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 10000); WebClient webClient = WebClient.builder() .clientConnector(new ReactorClientHttpConnector(httpClient)) .build(); 읽기 또는 쓰기 시간 초과 구성 import io.netty.handler.timeout.ReadTimeoutHandler; import io.netty.handler.timeout.WriteTimeoutHandler; HttpClient h..

Spring/WebClient 2024.03.28

[WebClient] Configuration Reactor Netty

Reactor Netty 란? Reactor Netty는 Reactor 프로젝트 일부로서 Reactor Core와 함꼐 사용되는 Non-blocking I/O 네트워크 프레임워크입니다. 이 프레임워크는 SpringFramework와 함께 사용되며, 웹 애플리케이션의 클라이언트 및 서버 사이드의 비동기 HTTP 가능하게 합니다 https://projectreactor.io/docs/netty/1.1.16/reference/index.html#getting-started-introducing-reactor-netty Reactor Netty Reference Guide ./../../reactor-netty-examples/src/main/java/reactor/netty/examples/documentat..

Spring/WebClient 2024.03.28

[WebClient] Configuration MaxInMemorySize

MaxInMemorySize 설정 Codecs는 어플리케이션 메모리 문제를 피하기 위해 메모링레서 데이터를 버퍼링하는데 제한이 있다. 기본적으로 이 값은 256KB로 설정되는데, 이 값이 충분하지 않으면 다음과 같은 오류가 발생한다. org.springframework.core.io.buffer.DataBufferLimitException: Exceeded limit on max bytes to buffer 기본 Codecs의 한계는 다음과 같이 변경한다. WebClient webClient = WebClient.builder() .codecs(configurer -> configurer.defaultCodecs().maxInMemorySize(2 * 1024 * 1024)) .build(); Codec..

Spring/WebClient 2024.03.28

[WebClient] Configuration Default

기본적인 사용방법 WebClient를 사용하는 가장 간단한 방법은 정적 팩토리 메서드를 사용하여 WebClient를 생성하는 것 WebClient.create() WebClient.create(String baseUrl) WebClient.builder()를 통해 추가적인 옵션을 설정할 수 있으며, 옵션은 다음과 같다. uriBuilderFactory: 기본 URL로 사용할 사용자 정의 UriBuilderFactory. defaultUriVariables: URI 템플릿 확장 시 사용할 기본 값. defaultHeader: 모든 요청에 대한 헤더. defaultCookie: 모든 요청에 대한 쿠키. defaultRequest: 모든 요청을 사용자 정의하는 Consumer. filter: 모든 요청에 대한..

Spring/WebClient 2024.03.28

[WebClient] WebClient 란?

WebClient 란? Spring5 부터 도입된 웹 클라이언트 라이브러리 내부적으로 HTTP 클라이언트 라이브러리에게 HTTP Request를 위임하며, 기본 HTTP 클라이언트 라이브러리는 Reactor Netty Non-blokcing/Blocking HTTP Request를 모두 지원하기 때문에 RestTemplate 대체 가능 왜 WebClient를 배워야 하나? 1. WebClient의 장점 비동기/Non-Blocking 방식을 지원하여 높은 처리량과 확장성을 가짐 리액티브 프로그래밍으로 데이터 스트림을 효과적으로 처리 할 수 있음 선언적 방식으로 API 호출을 정의하므로 가독성이 좋음 2. WebClient의 단점 웹플럭스 학습곡선이 존재한다. WebClient 공식 가이드 공식가이드를 먼저..

Spring/WebClient 2024.03.27

싱글톤 패턴

싱글톤 패턴은 하나의 객체만을 생성하고 그것을 전역적으로 사용하는 패턴을 의미합니다. 해당 클래스의 생성자는 private로 선언되어 있으며, 멤버 변수는 private static으로 선언됩니다. 유저들은 getInstance 메서드를 통해 동일한 인스턴스를 공유하여 사용할 수 있습니다. 싱글톤 패턴으로 고정된 메모리 영역을 사용하여 메모리 낭비를 방지할 수 있습니다. 또한 싱글톤으로 생성된 인스턴스는 전역적으로 접근이 가능하므로 다른 클래스간 데이터 공유가 용이합니다. 주로 JDBC Driver 연결을 위해 사용됩니다. 싱글톤 패턴은 멀티 스레드 환경에서 동기화 처리를 하지 않을 경우 인스턴스가 두번 생성될 수 있으므로 주의해야합니다.