👉 기본 환경
- Language: Java
- DB: MySQL
- IDE: IntelliJ
WebClient
- HTTP 클라이언트(서버에 API 요청을 보내는 주체) 라이브러리
- 비동기적으로 요청하는 non-blocking 처리 방식
▶ 요청을 보내고 응답을 받을 때까지 대기하지 않기 때문에 처리 속도가 빠름
1. Dependency 추가
1
2
3
4
5
6
|
dependencies {
...
implementation 'org.springframework.boot:spring-boot-starter-webflux' // HTTP 클라이언트 라이브러리
}
|
2. WebClient 사용
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
32
33
34
35
36
|
import com.example.demo.dto.srt.RqstParams;
import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;
@Service
public class SrtFcstInfoServiceImpl implements SrtFcstInfoService {
// UltraSrtNcst
@Override
public void getUltraSrtNcst(RqstParams rqstParams) {
WebClient webClient = WebClient.builder()
.baseUrl("https://apis.data.go.kr/1360000/VilageFcstInfoService_2.0/getUltraSrtNcst")
.build();
String url = "?serviceKey=" + rqstParams.getServiceKey() +
"&numOfRows=" + rqstParams.getNumOfRows() +
"&pageNo=" + rqstParams.getPageNo() +
"&dataType=" + rqstParams.getDataType() +
"&base_date=" + rqstParams.getBase_date() +
"&base_time=" + rqstParams.getBase_time() +
"&nx=" + rqstParams.getNx() +
"&ny=" + rqstParams.getNy();
Mono<String> result = webClient.get().uri(url)
.retrieve()
.bodyToMono(String.class);
String response = result.block();
System.out.println(response);
}
}
|
- WebClient webClient
- Spring에서 제공하는 비동기적인 웹 요청을 처리하는 클래스
- 웹 리소스에 대한 요청을 보내고 응답을 받아올 수 있음
- WebClient.builder()
- WebClient 인스턴스 생성을 위한 빌더 패턴 사용
- 요청 보낼 대상의 URL 설정
- build()
- 이전 단계에서 설정한 정보를 기반으로 실제 WebClient 인스턴스를 생성하고 반환
- Mono<String>
- 웹 요청의 결과인 Response Body 저장
- 비동기적으로 값을 처리하고 반환하는데 사용
- webClient.get().uri(url)
- webClient.get(): 생성한 WebClient 인스턴스를 이용하여 HTTP GET 요청 생성
- uri(url): baseUrl 메서드로 이미 설정한 기본 URL에 상대 경로를 추가
- retrieve()
- 실제로 HTTP 요청을 보내고, 응답을 받아오는 역할
- bodyToMono(String.class)
- HTTP Response Body를 Mono로 변환
- String.class: Response Body를 문자열 형태로 받아옴
+ retrieve return
- toEntity: response 자체를 얻기 위해 사용
- bodyToMono: response body 데이터를 얻기 위해 사용
- bodyToFlux: response body 데이터를 stream*으로 처리하기 위해 사용
* Steam: 데이터를 한 번에 모두 받아오는 것이 아니라, 조금씩 조각 조각 나누어 비동기적으로 처리하는 방식
- result.block()
- 비동기적인 작업을 동기적으로 블로킹
- Mono 작업이 끝날 때까지(=웹 요청의 응답을 받을 때까지) 현재 스레드를 블로킹하고, 응답을 받으면 해당 응답을 문자열 형태로 반환
📚 참고 자료
'Java > Spring' 카테고리의 다른 글
[SpringBoot] 스프링 부트 프로젝트 생성 (0) | 2023.08.23 |
---|---|
[SpringBoot_JPA_1] resources/static and templates (0) | 2023.05.20 |