안녕하세요 오늘은 WebFlux에서 WebClient를 사용해보겠습니다.
1. 의존성 추가
먼저, 프로젝트의 의존성 관리 파일(예: pom.xml 또는 build.gradle)에
Spring WebFlux와 WebClient 의존성을 추가해야 합니다.
메이븐:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
그래들:
implementation 'org.springframework.boot:spring-boot-starter-webflux'
2. WebClient 생성
WebClient를 사용하기 위해 먼저 WebClient 인스턴스를 생성해야 합니다.
일반적으로 WebClient.builder() 메소드를 사용하여 인스턴스를 생성합니다.
WebClient webClient = WebClient.builder()
.baseUrl("https://api.example.com") // 기본 URL 설정 (선택 사항)
.build();
위 예시에서는 baseUrl을 설정하였지만, 필수적으로 설정해야 하는 것은 아닙니다.
baseUrl을 설정하면 각 요청에서 상대 URL을 사용할 수 있습니다.
3. HTTP 요청 보내기
WebClient를 사용하여 HTTP 요청을 보내려면
다음과 같이 메소드 체인을 사용하여 원하는 요청 구성을 할 수 있습니다.
webClient.get()
.uri("/api/resource") // 요청 URI 설정
.header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) // 헤더 설정 (선택 사항)
.retrieve() // 응답 받기
.bodyToMono(Resource.class) // 응답 본문을 객체로 변환 (예시: Resource 클래스)
.subscribe(resource -> {
// 응답 처리 로직
System.out.println("Received resource: " + resource);
});
위 예시에서는 GET 메소드를 사용하여 "/api/resource" 경로로 요청을 보내고,
Content-Type 헤더를 설정하였습니다.
그리고 retrieve() 메소드를 호출하여 실제로 서버에 요청을 보냅니다.
그리고 나서 bodyToMono() 메소드를 호출하여 응답 본문(JSON)을 자바 객체(Resource 클래스)로 변환합니다.
최종적으로 subscribe() 메소드를 호출하여 비동기적으로 응답 결과를 처리합니다.
4. 에러 처리
WebClient는 예외와 에러 처리에 대한 기능도 제공합니다.
예를 들어, onStatus() 메소드를 사용하여 특정 상태 코드에 대한 처리를 할 수 있습니다.
webClient.get()
.uri("/api/resource")
.retrieve()
.onStatus(HttpStatus::is4xxClientError, response -> {
// 4xx 클라이언트 에러 처리 로직
return Mono.error(new CustomException("Client error occurred"));
})
.onStatus(HttpStatus::is5xxServerError, response -> {
// 5xx 서버 에러 처리 로직
return Mono.error(new CustomException("Server error occurred"));
})
.bodyToMono(Resource.class)
.subscribe(resource -> {
// 응답 처리 로직
System.out.println("Received resource: " + resource);
}, error -> {
// 에러 처리 로직
System.err.println("Error occurred: " + error.getMessage());
});
위 예시에서는 onStatus() 메소드를 사용하여 4xx와 5xx 상태 코드에 대한 에러 처리 로직을 구성하였습니다.
해당 상태 코드가 발생하면 Mono.error()를 사용하여 원하는 예외(CustomException)를 발생시킵니다.
5. 결론
Spring WebFlux의 WebClient는 비동기, 논블로킹 방식으로 HTTP 요청을 보내는 데 매우 유용합니다.
WebClient는 함수형 프로그래밍 스타일로 작성되어 있으며,
리액티브 스트림(Reactive Streams)과 통합되어 비동기 작업을 효율적으로 처리할 수 있습니다.
이를 통해 더 빠르고 확장 가능한 웹 애플리케이션을 개발할 수 있습니다.
참고 자료:
감사합니다.
'스프링부트' 카테고리의 다른 글
Spring에서 카프카(Kafka)를 사용하여 데이터를 받아보자 (0) | 2023.10.14 |
---|---|
Spring에서 RabbitMQ를 사용하여 데이터를 받아보자 (0) | 2023.10.14 |
Java 스프링부트를 이용한 RESTful API 작성하기: JPA와 데이터베이스를 사용한 api 기본 예제 (0) | 2023.09.27 |
Spring WebFlux 알아보기 - Mono 예제 (0) | 2023.09.01 |
Spring WebFlux 시작하기 - 리액티브 웹 애플리케이션 개발과 R2DBC 소개 (2) | 2023.08.21 |
댓글