페이지 2: 마이크로서비스 설계

2. 마이크로서비스 설계

성공적인 MSA 구현의 핵심은 서비스를 어떻게 분리하고 설계하는지에 달려 있습니다. 도메인 주도 설계 (DDD)는 서비스 경계를 정의하는 데 유용한 접근 방식입니다.

2.1. 도메인 주도 설계 (DDD)를 통한 서비스 경계 정의

DDD는 비즈니스 도메인에 초점을 맞춰 소프트웨어를 설계하는 방법입니다. 바운디드 컨텍스트(Bounded Context) 개념을 사용하여 각 마이크로서비스의 명확한 경계를 설정합니다.

// DDD를 통한 서비스 분리 예시
// 'Order' 바운디드 컨텍스트
class OrderService {
  createOrder(orderData) { /* ... */ }
  getOrderDetails(orderId) { /* ... */ }
}

// 'Customer' 바운디드 컨텍스트
class CustomerService {
  createCustomer(customerData) { /* ... */ }
  getCustomerInfo(customerId) { /* ... */ }
}

2.2. API 설계 (REST, gRPC)

마이크로서비스 간 통신을 위해 잘 정의된 API가 필수적입니다. 일반적으로 REST (Representational State Transfer) 또는 gRPC가 사용됩니다.

2.3. 서비스당 데이터 관리

각 마이크로서비스는 자체 데이터베이스를 소유하는 것이 일반적입니다. 이는 서비스 간의 느슨한 결합을 강화하고, 독립적인 배포를 가능하게 합니다.

// 'Product' 서비스의 데이터베이스
// Product DB (e.g., PostgreSQL)
//    - products (table)
//    - categories (table)

// 'Inventory' 서비스의 데이터베이스
// Inventory DB (e.g., MongoDB)
//    - stock_levels (collection)
//    - suppliers (collection)