[MSA] Feign Client ์์ธ ์ฒ๋ฆฌ : try-catch
Categories: MSA
Tags: MSA, SpringCloud
๐ ๊ฐ์ธ์ ์ธ ๊ณต๊ฐ์ผ๋ก ๊ณต๋ถ๋ฅผ ๊ธฐ๋กํ๊ณ ๋ณต์ตํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ธ๋ก๊ทธ์
๋๋ค.
์ ํํ์ง ์์ ์ ๋ณด๊ฐ ์์ ์ ์์ผ๋ ์ฐธ๊ณ ๋ฐ๋๋๋ค :๐ธ
[ํ๋ฆฐ ๋ด์ฉ์ ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์๋ฉด ๋ณต๋ฐ์ผ์ค๊ฑฐ์์]
์ธํ๋ฐ Dowon Lee๋์ Spring Cloud๋ก ๊ฐ๋ฐํ๋ ๋ง์ดํฌ๋ก์๋น์ค ์ ํ๋ฆฌ์ผ์ด์
(MSA) ๊ฐ์๋ฅผ ๋ฃ๊ณ ์ ๋ฆฌํ ๋ด์ฉ์
๋๋ค.๐
Spring Cloud๋ก ๊ฐ๋ฐํ๋ ๋ง์ดํฌ๋ก์๋น์ค ์ ํ๋ฆฌ์ผ์ด์
(MSA) ๊ฐ์ ๋ค์ผ๋ฌ ๊ฐ๊ธฐ๐ฉโ๐ซ
Feign Client ์์ธ ์ฒ๋ฆฌ ์ ๋ฆฌ
Feign Client ์ฌ์ฉ ์ค API ํต์ ์์ ๋ฐ์ํ๋ ๋ค์ํ ์์ธ ์ํฉ์ ๋ํด ๋ค์๊ณผ ๊ฐ์ด ์ ๋ฆฌํ๋ค.
1. ์๋ชป๋ ์๋ํฌ์ธํธ๋ก ์์ฒญํ์ ๋ ๋ฐ์ํ๋ ๋ฌธ์
API ์์ฒญ ์ ํน์ ์๋น์ค์ ๊ฒฝ๋ก(endpoint)๊ฐ ๋ค๋ฅธ ๋ถ์๋ ๋ฒค๋์ ์ํด ๋ณ๊ฒฝ๋๊ฑฐ๋ ์๋ชป ์ ๋ฌ๋ ๊ฒฝ์ฐ, ์์์น ๋ชปํ ์๋ฌ๊ฐ ๋ฐ์ํ ์ ์๋ค.
-
์๋ฅผ ๋ค์ด,
order-service
์ ๊ฒฝ๋ก๊ฐ ๋ณ๊ฒฝ๋์ด ์ค์ ๋ก ์กด์ฌํ์ง ์๋ ๊ฒฝ๋ก๋ก ์์ฒญ์ด ๋ค์ด๊ฐ๋ฉด, ์๋ฒ์์๋404 Not Found
์ค๋ฅ๋ฅผ ๋ฐํํ์ง๋ง, ํด๋ผ์ด์ธํธ ์ชฝ์์๋500 Internal Server Error
๋ก ์๋ชป ์ธ์๋ ์ ์๋ค. ์ด๋ ๊ฒฝ๋ก ์ค๋ฅ์ด๋ฏ๋ก, 500๋ณด๋ค๋ 404 ์๋ฌ๊ฐ ๋ ์ ์ ํ๋ค.
์์ธ ์ฒ๋ฆฌ ์ฝ๋
1
2
3
4
5
6
7
8
9
// Feign Client๋ฅผ ํตํด API ํธ์ถ
List<ResponseOrder> ordersList = null;
try {
ordersList = orderServiceClient.getOrders(userId);
} catch (FeignException ex) {
log.error(ex.getMessage());
}
- ์ด ์ฝ๋์์๋ FeignClient ํธ์ถ ์ ๋ฐ์ํ๋
FeignException
์ try-catch๋ก ๊ฐ์ธ ๋ก๊ทธ๋ฅผ ๊ธฐ๋กํจ์ผ๋ก์จ ๋ฌธ์ ๋ฐ์ ์ ์์ธ์ ํ์ธํ ์ ์๋๋ก ํ๋ค. - ๋ฌธ์ ๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ๋ฐ์ดํฐ๊ฐ ์ถ๋ ฅ๋๊ณ , ๋ฌธ์ ๋ฐ์ ๋ถ๋ถ์ ๋ฐ์ดํฐ๊ฐ ๋ฐ์๋์ง ์๋๋ก ์กฐ์ ํ๋ค.
2. UserService์ ๋ก๊น ์ถ๊ฐ
๋ก๊น ์ ํตํด ์ค๋ฅ๋ฅผ ๊ธฐ๋กํ๊ณ ์ถ์ ํ ์ ์๋ค. UserService์ ๋ก๊น ์ ์ถ๊ฐํ์ฌ ๋ฌธ์ ์ํฉ์ ํ์ ํ๊ณ ๊ธฐ๋กํ๋ ๋ฐฉ๋ฒ์ ์ค์ ํ๋ค.
- UserServiceApplication์ ๋ก๊น
๋ฉ์๋ ์ถ๊ฐ ํ ๋น ๋ฑ๋ก
-
UserServiceApplication์ ๋ก๊น ์ ์ํ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๊ณ ๋น์ผ๋ก ๋ฑ๋กํด ๋ก๊น ์ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ค.
-
- OrderServiceClient ๊ฒฝ๋ก ์์ ํ
์คํธ
OrderServiceClient
์ ๊ธฐ์กด ๊ฒฝ๋ก์์ ์๋ชป๋ ๊ฒฝ๋ก๋ก ์์ ํ์ฌ ์์ธ ๋ฐ์ ์ํฉ์ ์ฌํํ๋ค.
1 2 3 4 5
@FeignClient(name = "order-service") public interface OrderServiceClient { @GetMapping("/order-service/{userId}/orders_ng") // ์๋ชป๋ ๊ฒฝ๋ก๋ก ์์ List<ResponseOrder> getOrders(@PathVariable String userId); }
3. ์์ธ ์ฒ๋ฆฌ ์ ์ฉ ํ ํ ์คํธ
-
์ฌ์ฉ์ ๋ฑ๋ก
- userId ๋ณต์ฌ
-
userId๋ฅผ ๋ฃ์ด ์ฌ์ฉ์ ์ ๋ณด ์กฐํ
- ์ฌ์ฉ์ ๋ฑ๋ก ํ ํด๋น
userId
๋ก ์ฃผ๋ฌธ ์กฐํ๋ฅผ ์ํํ๋ฉด, ์๋ชป๋ ๊ฒฝ๋ก๋ก ์ธํด404 Not Found
๊ฐ ๋ฐ์ํ์ง๋ง500 Internal Server Error
๊ฐ ๋ฐํ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
- ์ฌ์ฉ์ ๋ฑ๋ก ํ ํด๋น
-
log ์ถ๋ ฅ ํ์ธ
- ๋ก๊ทธ๋ฅผ ํตํด order-service feignClient ์์ order-service/์ฌ์ฉ์id/orders_ng๋ฅผ ์๋ชป๋ ๊ฒฝ๋ก๋ก ํธ์ถ๋ ๊ฒ์ ํ์ธ ํ ์ ์๋ค.
์์ธ ์ฒ๋ฆฌ ์ฝ๋ ๊ฐ์
์๋ชป๋ ๊ฒฝ๋ก๋ก ์ธํด ์์ธ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ, ์์ธ๋ฅผ ์บ์นํ๊ณ ๋ก๊ทธ์ ๊ธฐ๋กํ ๋ค ๊ธฐ๋ณธ์ ์ผ๋ก ๋น ๋ฆฌ์คํธ๋ฅผ ๋ฐํํ๋๋ก ์กฐ์ ํ์ฌ ์ค๋ฅ๊ฐ ๋ฐ์ํ ๋ถ๋ถ๋ง ๋น์์ง๋๋ก ํ๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
// Feign Exception handling
List<ResponseOrder> ordersList = null;
try {
ordersList = orderServiceClient.getOrders(userId);
} catch (FeignException ex) {
log.error("Failed to fetch orders for user {}: {}", userId, ex.getMessage());
ordersList = new ArrayList<>(); // ๋น ๋ฆฌ์คํธ๋ก ์ฒ๋ฆฌ
}
userDto.setOrders(ordersList);
return userDto;
4. ํ ์คํธ ๊ฒฐ๊ณผ
- ์๋ชป๋ ๊ฒฝ๋ก๋ก ์์ฒญ์ ๋ณด๋ด๋ฉด
404 Not Found
๊ฐ ์๋ฒ์์ ๋ฐ์ํ๋ฉฐ, ์์ธ๋ฅผ ์บ์นํ์ฌ ๋น ๋ฆฌ์คํธ๋ฅผ ๋ฐํํจ์ผ๋ก์จ ์๋ฌ๊ฐ ์๊ธด ์ฃผ๋ฌธ ์ ๋ณด๋ ๋น์์ง๊ณ , ์ ์์ ์ธ ์ฌ์ฉ์ ์ ๋ณด๋ ์ถ๋ ฅ๋๋ค. - ์ต์ข
์ ์ผ๋ก ์ฃผ๋ฌธ ์กฐํ ์์ฒญ ์ 200 OK๋ฅผ ๋ฐํํ๋ ์ฃผ๋ฌธ ์ ๋ณด๊ฐ ์ถ๋ ฅ๋์ง ์๋ ์ํฉ์ ํ์ธํ ์ ์๋ค.์ด ๋ฐฉ์์ผ๋ก Feign Client์์์ ์์ธ ์ํฉ์ ํจ๊ณผ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ค.
- ์ฃผ๋ฌธ ๋ฑ๋ก
- ์ฃผ๋ฌธ ๋ฑ๋ก ํ ์ฃผ๋ฌธ ์กฐํ ์ 200 OK๋ฅผ ๋ฐํํ๋ ์ฃผ๋ฌธ ์ ๋ณด๊ฐ ์ถ๋ ฅ๋์ง ์๋ ์ํฉ
๋น์ทํ ์ํฉ์ผ๋ก ํ๋ก์ ํธ ํ ๋ ์ ๋๊ณ ์๋ feign ์์ฒญ์ด ์๋ ์ ์ด ์์๋๋ฐ employee ๋ด๋นํ๋ ํ์์ด ๊ฐ์๊ธฐ endpoint๋ฅผ ๋ณ๊ฒฝํด์ ๋ช ์๊ฐ์ ๊ณ ์ํ ์ ์ด ์๊ฐ๋ฌ๋ค.
๊ทธ๋๋ ๋ฐํ ํ์
๋ ๋ฌ๋ผ์ง๋ ๋ฐ๋์ ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋๋ฐ ์ค๋ ๊ฑธ๋ ธ์ง๋ง, ์ด๋ฐ ์์ธ์ฒ๋ฆฌ์ log๋ฅผ ์์ธํ ๋จ๊ฒผ๋๋ผ๋ฉด ์กฐ๊ธ ์์ํ๊ฒ ํด๊ฒฐํ์ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ค์๋ค.
์ด ๋ฐฉ๋ฒ ์ธ์ ๋ค๋ฅธ ๋ฐฉ๋ฒ๋ ์๋ ๊ฒ ๊ฐ์์ ๋ ์๊ฐํด๋ณธ ๋ค์์ ํ๋ก์ ํธ์ ์ ์ฉํด๋ด์ผ๊ฒ ๋ค.
Leave a comment