728x90
HTTP Client(RestTemplate vs WebClient vs FeignClient)
서비스를 개발할 때는 외부의 서비스를 필요로해서 호출하는 경우가 많습니다.
다시 말해 내가 개발하는 서버가 클라이언트처럼 다른 서버에 요청을 하는 것입니다.
이 때 HTTP Client를 사용해서 외부 서버에 요청을 보냅니다.
HTTP Client에는 RestTemplate & Web Client & FeignClient가 있습니다.
주로 사용한 것은 RestTemplate일 것입니다. 하지만 Spring에서 WebClient를 사용하도록 권장하고 있습니다.
Web Client는 Spring WebFlux에 있는 기능으로 비동기적인 REST API통신이 가능합니다.
Feign Client는 선언적인 방식을 사용해서 통신이 가능합니다.
이 처럼 각 기능마다 장단점이 있기 때문에 어떤 걸 사용할지 고민을 해야합니다.
제 기준은 대용량 트래픽의 유무로 결정합니다.
비동기 방식의 통신이 필요한 경우가 아니라면 Web Client의 기능을 모두 활용하지 못하고, Feign Client는
선언과 사용이 간단하기 때문에 사이드 프로젝트를 할 때는 대용량 트래픽이 일어나는 경우가 거의 없기 때문에
Feign Client를 선호하는 편입니다.
Feign Client
Feign Client는 선언적인 방식으로 사용할 수 있다고 했듯이 사용법이 정말 간단합니다.
우선 Feign Client 의존성을 추가해야합니다.
다음으로 Feign Client를 사용할 Class의 main 파일에 @EnableFeignClients를 선언한 뒤에 JPA와 같이 Feign Client의 기능을 사용할 인터페이스를 선언합니다.
인터페이스를 선언한 뒤 @FeignClient(name="FeignClient의 이름",url="호출할 API의 url",configuration="설정클래스")
로 FeignClient의 설정을 하는 것으로 사용할 준비가 모두 끝났습니다.
Feign Client를 사용할 API 호출
Open API를 호출하는 방법을 알아보겠습니다.우선 요청할 구체적인 URL을 명시해 줘야 합니다.
위 인터페이스에 메서드가 URL을 명시해준 것입니다.
저는 이 부분에서 이해가 가지 않은 부분이 Controller에서 사용하는 Mapping어노테이션과 메서드들은 요청을 받는
입장에서 사용하는 것이 었는데 요청을 할때도 같은 방식으로 하는게 맞는 것인가 였습니다.
예를 들어 보겠습니다.
https://api.themoviedb.org/3/search/movie?
query=아이언맨
&api_key=73b8a45b717547a965c0d9a015f1fdf9
&language=ko-kr
위의 URL로 사용자가 요청한다면 메서드에 @RequestParam을 선언한 매개변수에 해당 Query들이 매핑 되고
매핑된 매개변수들을 통해 DB에서 원하는 Data를 꺼내오는 것이 Controller에서 하는 기능이었습니다.
그렇다면 서버에서 다른 서버에 통신을 하기 위해서는 위와 같은 URL을 만들어서 요청을 보내야 원하는 Data를
꺼내올 수 있을 것입니다.
이 부분에서 제 API 호출에 대한 개념이 부족하다는 것을 알고, 다시 정리해 보았습니다.
Client입장에서 요청을 보낼 때에도 같은 방식으로 요청을 하면 됩니다. @RequestParam을 통해서 QueryParameter를
만들 수 있다고 생각하시면 됩니다. 단, 여기서 name속성을 생략하시면 안됩니다.
아래와 같이 메서드를 수정해주시면 됩니다
메서드를 단위 테스트를 통해 잘 동작하는지 확인하는 것으로 마무리 하겠습니다.
'Spring Cloud' 카테고리의 다른 글
Spring Cloud Config (0) | 2024.01.24 |
---|---|
Spring Cloud 동작 과정 (0) | 2024.01.22 |
Spring Cloud 구조 (0) | 2024.01.21 |