티스토리 뷰
개발을 하다보면 내부 또는 외부 API 를 호출하는 일이 생긴다.
(내가 말하는 내부 API는 내 프로젝트가 마이크로서비스 구조인 경우를 생각하고 작성한 것이다.🧐)
* JDK에서 지원하는 HttpURLConnection 클래스를 사용할 수 있다.
그렇다면 스프링에서는 다른 Rest API 를 호출할 때 어떠한 템플릿을 지원하는지 알아보자.
RestTemplate
- Spring 3.0 부터 지원
- thread-per-request 모델 기반
- Synchronous & Blocking 방식
RestTemplate 방식의 특징을 좀 풀어서 이해해보자.
thread-per-request 모델 기반 ?
정확하게 말하자면 RestTemplate 은 thread-per-request 모델을 기반으로 하는 Java Servlet API를 사용한다.
즉, 스레드는 클라이언트가 응답을 받기 전까지 block 상태라는 것이다.
만약 응답이 느린 서비스에 대해 많은 요청이 있다고 가정해보자.
모든 스레드에 대해 아직 응답을 받지 않았는데도 계속해서 요청이 들어온다면, 스레드 풀을 소진 시키거나 OS에서 사용할 수 있는 스레드까지 생성하여 시스템에 영향을 줄 수도 있다.
결국, Context Switching으로 인해 성능이 저하될 수도 있게 된다.
WebClient
- Spring 5.0 부터 지원
- Asynchronous & Non-Blocking 방식
WebClient 는 어떻게 비동기 방식인가?
바로 Spring Reactive Framework 에서 제공하는 비동기-논 블로킹 방식을 사용하고 있기 때문이다.
여기서 또 Spring Reactive Framework 는 무엇일까 하고 찾아보니 여기서 작성할 내용이 아닌 것 같다.
WebClient 사용하려면 dependency 추가하기!
https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-webflux
추가로, WebClient는 동기 방식으로 구현이 가능하지만, RestTemplate은 비동기 방식으로 구현이 불가능하다.
참고
'Framework > Spring' 카테고리의 다른 글
[JPA] 플러시 (0) | 2022.10.25 |
---|---|
[JPA] 패러다임 불일치 (0) | 2022.10.24 |
[Spring] 데이터 유효성 검증 (0) | 2022.10.04 |
[Spring] Component Scan (0) | 2022.08.24 |
[Spring] Singleton Container (0) | 2022.08.22 |
- Total
- Today
- Yesterday
- 다중화
- object
- 추상클래스
- HashMap
- Sticky Session
- spring boot
- java
- 로드 밸런서
- 인스턴스변수
- Spring
- nginx
- Hash
- 정적변수
- @conditional
- 오블완
- nosql
- 고정 세션
- AutoConfiguration
- 인터페이스
- 자동구성
- JPA
- Load Balancer
- 티스토리챌린지
- syncronized
- fail-safe
- Red-Black Tree
- fail-fast
- Security
- HashSet
- Caching
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |