๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
TIL

FeignClient vs RestClient

by bamDal 2025. 2. 28.

์™ธ๋ถ€  API ํ…Œ์ŠคํŠธ์ธ WireMock ์ฐพ์•„๋ณด๋‹ค๊ฐ€ FeignClient๋ฅผ ์•Œ๊ฒŒ๋˜์—ˆ๋‹ค.

์ง€๋‚œ๋ฒˆ์— RestTemplate, WebClient(webflux), RestClient ์ฐพ์•„๋ณผ ๋• ๋ชฐ๋ผ์„œ ํ•จ๊ป˜ ๋น„๊ตํ•˜์ง€ ๋ชปํ–ˆ๋‹ค.

 

FeignClient ๋ž€?

  • Netflix์—์„œ ๊ฐœ๋ฐœํ•œ ์„ ์–ธํ˜• HTTP ํด๋ผ์ด์–ธํŠธ๋กœ Spring Cloud์™€ ํ†ตํ•ฉ์ด ์›ํ™œํ•˜์—ฌ MSA์—์„œ ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ์„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์„ ์–ธํ˜• HTTP ํด๋ผ์ด์–ธํŠธ: ์ธํ„ฐํŽ˜์ด์Šค์™€ ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ REST API ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • Spring Boot์—์„œ ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์ž๋™์œผ๋กœ ์„ค์ •๋œ๋‹ค.
  • Ribbon ๋ฐ Hystrix๋ฅผ ํ™œ์šฉํ•œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ๊ณผ ์žฅ์•  ๋ณต๊ตฌ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— MSA์—์„œ ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ์ด ์‰ฝ๋‹ค.

 

 

Restclient ๋ž€?

  • Spring Boot 3 ์ด์ƒ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ HTTP ํด๋ผ์ด์–ธํŠธ์ด๋‹ค.
  • Spring์—์„œ ๊ถŒ์žฅํ•˜๋Š” RestTemplate์˜ ๋ชจ๋˜ํ•œ ๋ฒ„์ „์ด๋‹ค. 
  • RestTemplate๋ณด๋‹ค ๊ฐ„๊ฒฐ(fluent API)ํ•˜๊ณ , WebClient๋ณด๋‹ค ์‰ฝ๊ฒŒ(Spring boot ํ™˜๊ฒฝ์—์„œ ์˜์กด์„ฑ ์ถ”๊ฐ€ ํ•„์š” X) ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋™๊ธฐ ๋ฐ ๋น„๋™๊ธฐ์‹์„ ๋ชจ๋‘ ์ง€์›ํ•œ๋‹ค.

 

FeignClient VS RestClient

  RestClient FeignClient
Spring ๋ฒ„์ „ Spring 6 ๋ถ€ํ„ฐ (Boot 3 ๋ถ€ํ„ฐ) Spring Cloud ํ•„์š”
์‚ฌ์šฉ ๋ฐฉ์‹ ์ฝ”๋“œ ๊ธฐ๋ฐ˜ (์ง์ ‘ ํ˜ธ์ถœ) ์„ ์–ธํ˜• (์ธํ„ฐํŽ˜์ด์Šค ๊ธฐ๋ฐ˜)
๋น„๋™๊ธฐ ์ง€์› โœ… ๊ฐ€๋Šฅ โŒ ๊ธฐ๋ณธ ์ง€์› X (WebClient ์„ค์ • ํ•„์š”)
์„ค์ • ์œ ์—ฐ์„ฑ โœ… ๋†’์Œ (ํƒ€์ž„์•„์›ƒ, ๋ฆฌํŠธ๋ผ์ด ์„ค์ • ๊ฐ€๋Šฅ) โŒ ์ œํ•œ์  (์ž๋™ ์„ค์ •)
๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์ ํ•ฉ์„ฑ ์ผ๋ฐ˜์ ์ธ REST API ํ˜ธ์ถœ MSA ํ™˜๊ฒฝ์—์„œ ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ 

 

 

์ด๋ก ์ ์œผ๋กœ MSA ํ™˜๊ฒฝ ์™ธ์—๋Š” ํฐ ์ฐจ์ด๋ฅผ ๋ชป ๋Š๊ผˆ์ง€๋งŒ ์‹ค์ œ๋กœ ์‹ค๋ฌด์—์„œ๋Š” FeignClient๊ฐ€ ๋งŽ์ด ์“ฐ์ธ๋‹ค๊ณ  ํ•œ๋‹ค.

์™ธ๋ถ€ ๋‚ด๋ถ€ ๋ชจ๋‘ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ๋„ ํ•˜๊ณ , restClient๊ฐ€ ๋Šฆ๊ฒŒ ๋‚˜์˜จ ์ด์œ ๋„ ์žˆ๋‹ค๊ณ ..

 

์ถ”ํ›„์— RestClient๋กœ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ FeignClient๋กœ ๋ณ€๊ฒฝํ•  ์ƒ๊ฐ์ด๋ฏ€๋กœ ๋น„๊ต ์ฝ”๋“œ์™€ ์„ค์ • ๋ฐฉ๋ฒ•์€ ๋‚˜์ค‘์— ์˜ฌ๋ ค์•ผ๊ฒ ๋‹ค..!

 

์ด์ „์— ์˜ฌ๋ฆฐ ๊ธ€ (RestTemplate vs RestClient vs WebClient)
https://bamdal.tistory.com/entry/Spring-Boot-Webflux%EA%B0%80-%EB%AD%98%EA%B9%8C

 

WebClient์™€ RestTemplate ๊ทธ๋ฆฌ๊ณ  RestClient

์™ธ๋ถ€API์™€ ์—ฐ๋™ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” RestTemplate๊ณผ WebClient ๊ฐ„์— ์–ด๋–ค ์ฐจ์ด๊ฐ€ ์žˆ์„์ง€ ์ฐพ์•„๋ณด๊ณ , ์–ด๋–ค ๊ธฐ์ˆ ์„ ํ”„๋กœ์ ํŠธ์— ์‚ฌ์šฉํ• ์ง€ ๊ณ ๋ฏผํ•ด๋ดค์Šต๋‹ˆ๋‹ค. Webflux ?๋น„๋™๊ธฐ(Async), ๋…ผ๋ธ”๋กœํ‚น(Non-blocking) ๋ฐฉ์‹์˜ ๋ฆฌ์•ก

bamdal.tistory.com

 

์ฐธ๊ณ ๊ธ€
https://medium.com/@lahirurajapakshe.stack/feign-client-vs-rest-client-a-comprehensive-guide-ad227272537a

 

Feign Client vs Rest Client

A Comprehensive Guide

medium.com