[MSA] FeignClient ์˜ˆ์™ธ์ฒ˜๋ฆฌ : ErrorDecoder

Updated:

Categories:

Tags: ,

๐Ÿ“Œ ๊ฐœ์ธ์ ์ธ ๊ณต๊ฐ„์œผ๋กœ ๊ณต๋ถ€๋ฅผ ๊ธฐ๋กํ•˜๊ณ  ๋ณต์Šตํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.
์ •ํ™•ํ•˜์ง€ ์•Š์€ ์ •๋ณด๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ฐธ๊ณ ๋ฐ”๋ž๋‹ˆ๋‹ค :๐Ÿ˜ธ
[ํ‹€๋ฆฐ ๋‚ด์šฉ์€ ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์‹œ๋ฉด ๋ณต๋ฐ›์œผ์‹ค๊ฑฐ์—์š”]

์ธํ”„๋Ÿฐ Dowon Lee๋‹˜์˜ Spring Cloud๋กœ ๊ฐœ๋ฐœํ•˜๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(MSA) ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.๐Ÿ˜Š
Spring Cloud๋กœ ๊ฐœ๋ฐœํ•˜๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(MSA) ๊ฐ•์˜ ๋“ค์œผ๋Ÿฌ ๊ฐ€๊ธฐ๐Ÿ‘ฉโ€๐Ÿซ


FeignClient ์˜ˆ์™ธ์ฒ˜๋ฆฌ : ErrorDecoder

์ด๋ฒˆ์—๋Š” Feing ํŒจํ‚ค์ง€์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” ErrorDecoder ๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌeign Client์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ–ˆ๋‹ค.

ErrorDecoder

ErrorDecoder ์ธํ„ฐํŽ˜์ด์Šค๋Š” FeignClient ํ˜ธ์ถœ ์‹œ ๋ฐœ์ƒํ•œ ์—๋Ÿฌ๋ฅผ ์ƒํƒœ ์ฝ”๋“œ๋ณ„๋กœ ๊ตฌ๋ถ„ํ•ด ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•œ๋‹ค.

์ด๋ฅผ ํ†ตํ•ด ๋” ์„ธ๋ถ€์ ์ด๊ณ  ์ฒด๊ณ„์ ์ธ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ƒํƒœ ์ฝ”๋“œ์— ๋”ฐ๋ผ ์ปค์Šคํ…€ ์˜ˆ์™ธ๋ฅผ ๋˜์งˆ ์ˆ˜ ์žˆ๋‹ค.

  • decode ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด FeignClient ํ˜ธ์ถœ ์‹œ ๋ฐœ์ƒํ•œ ์˜ค๋ฅ˜์— ๋Œ€ํ•ด ์ƒํƒœ ์ฝ”๋“œ๋ณ„๋กœ ์ปค์Šคํ…€ ๋กœ์ง์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

ErrorDecoder๋ฅผ ์ƒ์†๋ฐ›๋Š” ํด๋ž˜์Šค ์ƒ์„ฑ

๋จผ์ €, ErrorDecoder๋ฅผ ์ƒ์†๋ฐ›๋Š” ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ƒํƒœ ์ฝ”๋“œ๋ณ„๋กœ ๋กœ์ง์„ ์ž‘์„ฑํ•œ๋‹ค.

  • ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ response ์•ˆ์— ํฌํ•จ๋˜์–ด์žˆ๋Š” status ๊ฐ’์œผ๋กœ ํŒ๋‹จ
  • switch case ๋ฌธ์ž์„ ํ†ตํ•ด 400, 500, 404 ์˜ค๋ฅ˜์— ๋Œ€ํ•ด์„œ ์ฒดํฌ
    • 404 ์˜ค๋ฅ˜์—์„œ getOrders ๋ฉ”์†Œ๋“œ์—์„œ ๋ฐœ์ƒํ–ˆ๋˜ ์—๋Ÿฌ๋ผ๋ฉด ๊ทธ๋ƒฅ ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•ด์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญํ–ˆ๋˜ ์ฃผ๋ฌธ์ด ์—†๋‹ค๊ณ  ํ‘œ์‹œ๋ฅผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
    • ๋‘˜๋‹ค ์•„๋‹ˆ๋ผ๊ณ  ํ•˜๋ฉด default ๋ฌธ์œผ๋กœ ์˜ˆ์™ธ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜

Application ํด๋ž˜์Šค์— ErrorDecoder ๋นˆ ๋“ฑ๋ก

๋นˆ์œผ๋กœ ๋“ฑ๋กํ•ด์•ผ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— application class ์— ๋นˆ์œผ๋กœ ๋“ฑ๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ธฐ์กด UserServiceImpl ์ฝ”๋“œ ์ˆ˜์ •

  • ์ง€๋‚œ๋ฒˆ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด try~catch ๋ฌธ์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ๋˜ ์ฝ”๋“œ๋ฅผ ์ฃผ์„์ฒ˜๋ฆฌ

  • ErrorDecoder๋ฅผ ์ด์šฉํ•ด์„œ error handling ํ•˜๋Š” ์ฝ”๋“œ๋กœ ์ˆ˜์ •

    1
    2
    3
    4
    5
    
        /* ErrorDecoder */
              List<ResponseOrder> ordersList = orderServiceClient.getOrders(userId);
              userDto.setOrders(ordersList);
        
              return userDto;
    
  • Test

์„ค์ • ํŒŒ์ผ์— ๋“ฑ๋กํ•˜์—ฌ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•

  1. user-service.yml์—์„œ ์˜ˆ์™ธ ๋“ฑ๋ก

    1
    2
    3
    4
    
     order_service:
     	url: http://ORDER-SERVICE/order-service/%s/orders
     	exception:
     		order_is_empty: User's orders is empty
    
  2. FeignErrorDecoder ์— ์ƒ์„ฑ์ž ์ฃผ์ž… ๋ฐ @Component ๋“ฑ๋ก

    ErrorDecoder์—์„œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ฃผ์ž…๋ฐ›์•„ ๋ฉ”์‹œ์ง€๋ฅผ ๋™์ ์œผ๋กœ ์„ค์ •ํ•œ๋‹ค

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
     @Component
     public class FeignErrorDecoder implements ErrorDecoder {
         Environment env;
        
         @Autowired
         public FeignErrorDecoder(Environment env) {
             this.env = env;
         }
        
    
  3. Component ๋กœ ๋“ฑ๋กํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— Application ํด๋ž˜์Šค์— ๋นˆ์„ ์ œ๊ฑฐํ•ด์•ผ ํ•œ๋‹ค.


์ผ๋ฐ˜์ ์ธ try-catch์™€ ErrorDecoder์˜ ์ฐจ์ด์ 

  • try-catch ๋ฐฉ์‹
    • ๊ฐ„๋‹จํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ์—๋Š” ์ ํ•ฉํ•˜๋‚˜, ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์ง€๊ณ  ๋ฐ˜๋ณต์ ์ด๊ธฐ ์‰ฌ์›€.
    • ๋ชจ๋“  Feign ํ˜ธ์ถœ์— try-catch๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜๋Š” ๋น„ํšจ์œจ์ด ๋ฐœ์ƒ.
  • ErrorDecoder ๋ฐฉ์‹
    • ์ƒํƒœ ์ฝ”๋“œ์— ๋”ฐ๋ผ ์ค‘์•™ ์ง‘์ค‘์‹์œผ๋กœ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅ.
    • ์ƒํƒœ ์ฝ”๋“œ ๊ธฐ๋ฐ˜ ์ปค์Šคํ…€ ์˜ˆ์™ธ ์ƒ์„ฑ์ด ๊ฐ€๋Šฅ.
    • Feign๊ณผ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ†ตํ•ฉ๋˜๋ฉฐ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ๊ฐ„ํŽธ.

๐Ÿ“ ์ •๋ฆฌ

ErrorDecoder๋Š” Feign Client ํ˜ธ์ถœ ์‹œ ๋ฐœ์ƒํ•˜๋Š” ๋‹ค์–‘ํ•œ ์—๋Ÿฌ๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์œ ์šฉํ•˜๋‹ค.

try-catch์— ๋น„ํ•ด ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•˜๋ฉฐ, ์ƒํƒœ ์ฝ”๋“œ๋ณ„๋กœ ์„ธ๋ถ„ํ™”๋œ ๋กœ์ง์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์–ด ์ถ”์ฒœํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

๋˜ํ•œ, ์„ค์ • ํŒŒ์ผ์„ ํ†ตํ•ด ๋ฉ”์‹œ์ง€๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉด ํ™˜๊ฒฝ ๋ณ€ํ™”์—๋„ ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

MSA ์นดํ…Œ๊ณ ๋ฆฌ ๋‚ด ๋‹ค๋ฅธ ๊ธ€ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ

Leave a comment