티스토리 뷰
RestTemplate
기존에 사용하던 RestTemplate은 동기 blocking 기반의 webClient이다. 스프링 5.0부터 더이상의 개발은 하지 않고 유지만 하고 있으며, WebClient를 사용하길 권장하고 있다.
WebClient
WebClient는 Non-blocking reactive http 클라이언트이며, thread safe하기 때문에 여러 쓰레드에서 동시에 접근해도 문제가 없다. Reactor Netty, Jetty, apache의 HttpComponent를 이용해서 구현되어 있고, http 호출을 위한 여러 설정들을 메서드 체이닝을 통해 유연하게 설정할 수 있다는 특징이 있다.
WebClientBuilder
WebClientBuilder는 WebClient를 만들면서 필요한 설정들을 제공한다.
baseUrl
: webClient의 기본 url. 모든 요청의 path에 prefix로 들어간다defaultHeaders
: 기본으로 제공되는 헤더 변경defaultCookies
: 기본으로 제공되는 쿠키 변경filters
: WebHandler와 WebFilter처럼 webClient가 요청을 보내기 전후에 동작하는 filterclientConnector
: webClient에서 사용되는 clientConnector 변경codecs
: client에의 CodecConfigurer 설정exchangeFunction
: http 요청을 수행하는 exchangeFunction을 변경
WebClient 생성
val webClientBuilder = WebClient.builder()
val webClient = WebClient.create()
val webClientWithUrl = WebClient.create("https://hyuuny.tistory.com/") // baseUrl 제공
WebClient는 builder를 직접 호출하거나, create(baseUrl 제공 가능)를 통해서 생성 가능하다.
WebClient 메서드
WebClient의 메서드로는 get, head, post, put, patch, delete, options, method가 있다. post, put, patch의 경우에는 RequestBodyUriSpec을 반환하고, 나머지는 RequestHeadersUriSpec을 반환한다.
RequestBodySpec
RequestBodySpec은 request의 body를 설정할 수 있는 메서드를 제공하며, publisher 또는 BodyInserter를 이용해서 변환할 수 있다.
bodyValue
: 객체를 받아서 내부적으로 codec을 이용해서 변환
RequestHeadersSpec
accept, acceptCharset
: Accept 헤더 변경cookie, cookies
: 요청의 쿠키 변경header, headers
: 요청의 header 변경attribute
: webClient의 filter들에 제공되는 attribute 설정httpRequest
: HTTP 라이브러리의 요청에 직접 접근할 수 있게 callback 제공
RequestHeadersSpec
RequestHeadersSpec은 실제 요청을 보낼 수 있는 메서드들이 제공된다. retrieve, exchangeToMono, exchangeToFlux를 실행하면 요청을 서버에 전달하고 응답을 받는다.
retrieve
: ResponseSpec을 반환exchangeToMono
: ClientResponse를 인자로 받고 body를 Mono형태로 반환하는 callbackexchangeToFlux
: ClientResponse를 인자로 받고 body를 Flux형태로 반환하는 callback
UriSpec
uri를 변경할 수 있는 Spec으로써, RequestHeadersUriSpec과 RequestBodyUriSpec에서 구현하고 있다.
ResponseSpec
onStatus
: response를 확인하고 문제가 발생 한 경우 Mono.error를 반환하여 error 전파bodyToMono, bodyToFlux
: response를 mono나 flux로 변환toEntity, toEntityList, toEntityFlux
: response를 ResponseEntity로 반환하고 각 각의 body를 하나의 객체 혹은 List나 Flux로 변환toBodiessEntity
: response를 ResponseEntity로 변환하고 body는 포함하지 않는다
'Spring' 카테고리의 다른 글
[Spring] JDBC와 데이터베이스 접근 이해하기 (0) | 2024.12.21 |
---|---|
[Spring Webflux] Spring Security Reactive (0) | 2024.05.09 |
[Spring Webflux] Functional Endpoints (0) | 2024.05.07 |
[Spring Webflux] DispatcherHandler (0) | 2024.05.06 |
[Spring Webflux] 컨텍스트 (Context) (0) | 2024.01.28 |
- Total
- Today
- Yesterday
- kotlin
- 노마드
- 문자열
- 북클럽
- 노마드코더
- Spring
- 구현
- 백준
- 릿코드
- 리팩토링
- Real MySQL
- 스프링부트
- 코틀린
- 그리디
- 데이터베이스
- Algorithm
- spring boot
- 파이썬
- 스프링 부트
- 인프런
- 알고리즘
- 스프링
- 김영한
- 자료구조
- MySQL
- mysql 8.0
- leetcode
- 정렬
- 코테
- webflux
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |