─━ IT ━─

FeignClient를 활용한 MSA 간 API 통신 최적 설계 및 요청 방안

DKel 2024. 11. 5. 15:51
반응형
Microservices Architecture(MSA) 환경에서는 여러 도메인이 서로 API를 통해 통신해야 합니다. 이때 `FeignClient`를 활용하면 간단하게 다른 서비스와의 RESTful API 통신을 수행할 수 있습니다. 하지만 API 설계의 일관성과 성능 최적화를 위해 몇 가지 설계 규약을 따르는 것이 중요합니다. 또한, 다른 도메인의 API 설계를 요청할 때 효과적인 방안이 필요합니다.

 
### FeignClient 설계 규약
 
1. **인터페이스 기반 설계:**
   FeignClient는 인터페이스 기반으로 설계되어야 합니다. 이는 코드의 가독성과 유지보수성을 높입니다.
 
   ```java
   @FeignClient(name = "order-service")
   public interface OrderServiceClient {
       
       @GetMapping("/orders/{id}")
       Order getOrderById(@PathVariable("id") Long id);
   }
   ```
 
2. **Fallback 처리:**
   각 FeignClient에는 서비스 장애에 대비한 Fallback 클래스를 구현하여 서비스 가용성을 높일 수 있도록 합니다.
 
   ```java
   @Component
   public class OrderServiceFallback implements OrderServiceClient {
       
       @Override
       public Order getOrderById(Long id) {
           // Fallback 로직 작성
           return new Order("default", 0);
       }
   }
   ```
 
3. **타임아웃 설정:**
   외부 서비스 호출 시 적절한 타임아웃 설정을 통해 응답 지연 시 애플리케이션 전체에 영향을 미치지 않도록 합니다.
 
   ```yaml
   feign:
     client:
       config:
         default:
           connectTimeout: 5000
           readTimeout: 5000
   ```
 
### API 설계를 요청하는 효과적인 방식
 
1. **명확한 스펙 문서화:**
   API 통신을 요청할 때는 요구사항을 상세히 문서화하여 제공하는 것이 중요합니다. 이 문서에는 엔드포인트, 파라미터, 응답 형식 및 오류 처리 방법이 포함되어야 합니다.
 
   **예시:**  
   - **엔드포인트:** `GET /orders/{id}`
   - **파라미터:** `id` (Long, 필수)
   - **응답 형식:** JSON  
     ```json
     {
       "orderId": "123",
       "amount": 2500,
       "status": "SHIPPED"
     }
     ```
   - **오류 처리:** HTTP Status Code 및 에러 메시지 제공
 
2. **Swagger/OpenAPI 활용:**
   API 문서화를 위해 Swagger/OpenAPI와 같은 도구를 사용하면 보다 직관적으로 이해할 수 있는 문서를 제공할 수 있습니다.
 
   ```yaml
   openapi: 3.0.1
   info:
     title: Order Service API
     version: 1.0.0
   paths:
     /orders/{id}:
       get:
         summary: Get order by ID
         parameters:
           - name: id
             in: path
             required: true
             schema:
               type: integer
         responses:
           '200':
             description: Successful response
             content:
               application/json:
                 schema:
                   $ref: '#/components/schemas/Order'
           '404':
             description: Order not found
   ```
 
3. **정기적 의사소통:**
   타 도메인 팀과 정기적인 미팅을 통해 요구사항을 명확히 하고, 양쪽의 의견이나 개선점을 논의함으로써 효과적인 협업을 유지합니다.
 
FeignClient를 활용한 MSA 간 API 통신에서 중요한 것은 명확하고 일관된 규약을 따르는 것입니다. 이렇게 하면 개발 속도를 높이고 에러를 줄일 수 있습니다. 또한, 타 도메인과의 협업에서는 명확한 문서화와 의사소통이 성공적인 설계의 열쇠입니다.

반응형