728x90
반응형
개인 프로젝트를 진행하면서
Flask 서버와 Spring 서버가 통신해야했어요
즉, 외부 API와 소통해야했습니다!
어떻게 코드를 작성해야할지 전혀 감이 잡히지 않아서
많은 삽질을 한 결과 연결을 성공했습니다!🤩
그 과정에서 알게 된 여러 통신 방법들에 대해 정리하면서
어떤 상황에서 어떤 통신 방법을 사용해야 하는지 작성해서
또 삽질하지 않으려 합니다ㅎㅎ
1) RestTemplate
Spring 3부터 지원된다.
REST API를 호출할 수 있는 내장 클래스이며 JSON, XML 응답을 모두 받을 수 있다.
Spring 5부터는 WebClient가 도입되어 WebClient 사용을 강력 권고하고 있다.
Blocking VS Non-Blocking
Blocking : 호출되는 함수가 호출하는 함수에게 제어권을 넘기지 않고 대기 ex) RestTemplate
Non-Blocking : 위 상황에서 제어권을 바로 넘김 ex) WebClient
자세한 로직은 아래 사진과 함께 작성했다.
- Application이 RestTemplate를 생성하고 URI, HTTP 메소드 등의 헤더를 담아 요청
- RestTemplate는 HttpMessaageConverter를 사용하여 RequestEntity를 요청 메시지로 변환
- RestTemplate는 ClientHttpRequestFactory로부터 ClientHttpRequest를 가져와서 요청을 보냄
- ClientHttpRequest는 요청메시지를 만들어 HTTP 프로토콜을 통해 서버와 통신
- RestTemplate는 ResponseErrorHandler로 오류를 확인하고 있다면 처리로직 진행
- ResponseErrorHandler는 오류가 있다면 ClientHttpResponse에서 응답데이터를 가져와서 처리
- RestTemplate는 HttpMessageConverter를 이용해서 응답메시지를 Java Object(Class Response Type)로 변환
- Application에 반환
2) WebFlux
설명에 이해를 돕기 위해 Spring MVC 프레임워크에 대해 알아야 한다.
해당 프레임워크는 Multi-Thread와 Blocking 방식을 사용한다.
하여 접속수가 증가하면 Thread가 부족하여 성능이 떨어질 수 있다.
그렇다고 Thread를 늘리면 메모리, CPU 성능이 저하된다. (보통 Thread를 늘려 처리)
Spring MVC 프레임워크와 달리 Single-Thread와 Non-Blocking방식을 사용한다.
하여 적은 Thread로 관리할 수 있다.
또한 반응성, 비동기성을 보장하는 Spring React 프레임워크를 사용한다.
[1] WebClient
WebFlux에서 HTTP Client로 사용되는 비동기 모듈이다.
+ WebSocket
위에서 설명한 외부 API 통신 방법이 아닌
서버와 클라이언트 간의 메시지 교환을 위한 프로토콜이다.
양방향 통신과 실시간 네트워킹이 가능하여
실시간으로 데이터를 전송할 때 사용된다.
728x90
반응형
'JAVA > [개인프로젝트] GooGoo' 카테고리의 다른 글
JDBC, JPA, Spring Data JPA 차이 그리고 Hibernate와 ORM (0) | 2023.10.13 |
---|---|
CSR VS SSR (0) | 2023.09.10 |
[Spring Security] 일반 로그인과 소셜 로그인 (oauth2) 그리고 JWT (0) | 2023.09.06 |
[Spring Boot] 최고의 프로젝트 구조는 무엇일까? (0) | 2023.08.30 |
[JAVA] Selenium으로 구글 로그인 자동화 만들기 (0) | 2023.07.29 |