본문 바로가기

인프라/MSA

[MSA] MSA의 핵심 원칙

마이크로서비스 아키텍처(MSA)는 여러 서비스로 애플리케이션을 분할하고 독립적으로 배포하는 아키텍처 패턴입니다. 이를 구현하기 위해 몇 가지 핵심적인 원칙이 존재합니다.

 

Business Capabilities (비즈니스 기능)

MSA의 핵심 원칙 중 하나는 Business Capabilities입니다. 이 원칙은 전체 소프트웨어 시스템을 기능 단위로 나누는 것을 강조합니다.

 

비즈니스 기능은 비즈니스의 핵심 기능 또는 업무 프로세스를 나타냅니다. 각각의 기능은 독립적인 업무를 수행하고, 비즈니스의 목표를 달성하는 데 필수적입니다. 예를 들어, 전자상거래 웹 애플리케이션에서 주문, 결제, 재고 관리 등은 각각 다른 비즈니스 기능에 해당합니다.

 

Business Capabilities의 의미

1. 독립적인 서비스로 분리

각 비즈니스 기능은 독립된 마이크로서비스로 구현되어야 합니다. 이는 각 서비스가 특정 비즈니스 기능을 수행하며, 다른 서비스와 느슨하게 결합되어 있어야 한다는 의미입니다.

 

2. 각 서비스의 자체 데이터 관리

각 서비스는 자체적인 데이터베이스를 가지고 해당 비즈니스 기능을 수행하는 데 필요한 데이터를 독립적으로 관리합니다. 이는 각 서비스가 자율적으로 데이터를 소유하고 유지할 수 있게 합니다.

 

3. API를 통한 통신

각 서비스는 외부와 표준화된 API를 통해 통신합니다. 비즈니스 기능 간의 상호작용은 API 호출을 통해 이루어지며, 이는 느슨한 결합을 유지하면서 서비스 간의 통신을 허용합니다.

 

4. 자율적인 배포 및 업데이트

각 비즈니스 기능은 독립적인 배포 주기를 가지고 있어야 합니다. 이는 특정 비즈니스 기능에 대한 변경이나 업데이트가 해당 기능과 직접적으로 관련된 서비스에만 영향을 미치게 하는 것을 의미합니다.

 

5. 서비스 경계의 명확성

비즈니스 기능이 수행하는 서비스 간의 경계는 명확해야 합니다. 각 서비스는 특정 비즈니스 기능에 집중하며, 서비스 간의 업무 분리를 명확히 정의해야 합니다.

 

Business Capabilities의 이점

1. 유연성과 확장성 향상

비즈니스 기능을 독립적인 서비스로 분리함으로써, 특정 비즈니스 기능에 대한 변경이나 확장이 용이해지며, 전체 시스템이 유연하게 대응할 수 있습니다.

 

2. 서비스의 자율성 강화

각 서비스가 특정 비즈니스 기능에 중점을 둠으로써, 해당 서비스를 담당하는 팀이 자율적으로 서비스를 개발하고 운영할 수 있습니다.

 

3. 빠른 개발 주기

독립적인 배포 주기를 가진 각 서비스는 빠른 개발 주기를 유지할 수 있으며, 새로운 비즈니스 요구에 빠르게 대응할 수 있습니다.

 

Product, Not Project

Product, Not Project는 MSA의 중요한 원칙 중 하나로, 전통적인 프로젝트 중심의 접근 방식이 아닌 제품 중심의 관점을 강조합니다.

 

전통적인 소프트웨어 개발 방법에서는 주로 프로젝트가 중심이 되어왔습니다. 프로젝트는 특정 기간 동안 일정한 범위 내에서 일정한 목표를 달성하기 위해 일시적으로 진행되는 작업을 의미합니다. 그러나 이러한 프로젝트 중심의 개발 방식은 여러 제약과 한계를 가지고 있습니다.

 

Product, Not Project의 의미

1. 지속적인 관리 및 개선

제품 중심의 관점에서는 일정 기간에 한정되는 프로젝트가 아니라 지속적으로 관리되고 발전하는 소프트웨어 제품으로서의 시각을 채택합니다. MSA에서는 각 마이크로서비스가 별도의 제품으로 간주되며, 이를 지속적으로 개선하고 유지보수합니다.

 

2. 유연한 운영 및 확장

제품은 지속적인 운영이 필요하며, 사용자 또는 비즈니스의 요구에 따라 지속적으로 개선되어야 합니다. MSA에서는 각 서비스가 제품의 한 부분으로써 동작하며, 필요에 따라 독립적으로 확장이 가능하다는 개념을 포함합니다.

 

3. 서비스 소유권 강화

각 마이크로서비스는 특정 기능이나 비즈니스 영역을 담당하며, 이는 마치 독립된 제품처럼 관리됩니다. 서비스를 개발하고 유지보수하는 팀은 해당 서비스의 소유자로서, 그 서비스의 전체 수명 주기 동안 책임을 집니다.

 

4. 비즈니스 가치 중심

Product, Not Project는 비즈니스 가치에 중점을 둡니다. 각 제품 또는 서비스는 비즈니스 목표와 가치를 실현하기 위한 도구로 간주되며, 지속적인 개선과 최적화를 통해 비즈니스에 지속적인 가치를 제공합니다.

 

Product, Not Project의 이점

1. 지속적인 가치 제공

Product, Not Project는 소프트웨어를 단순한 프로젝트가 아니라 지속적으로 관리되고 향상되는 제품으로 여깁니다. 이는 개발 후에도 지속적인 가치를 비즈니스에 제공할 수 있도록 합니다.

 

2. 지속적인 피드백과 개선

제품은 지속적인 피드백을 통해 개선됩니다. 사용자 피드백, 모니터링 데이터, 성능 측정 등을 통해 지속적으로 시스템을 개선하여 최적화할 수 있습니다.

 

3. 고객 만족도 향상

지속적인 개선과 변경을 통해 고객의 요구에 빠르게 대응하는 것은 고객 만족도를 높일 수 있습니다. 제품 중심의 개발은 끊임없는 혁신과 최적화를 가능케 하여 고객 경험을 향상시킬 수 있습니다.

 

Design for Failure (장애를 고려한 설계)

Design for Failure는 MSA의 핵심 원칙 중 하나로, 시스템 내의 모든 구성 요소가 언제든지 실패할 수 있음을 가정하고 이에 대비하여 설계하는 원칙을 의미합니다.

 

장애는 언제든 발생할 수 있는 현상이며, 완전한 실패 없이 운영되는 것은 어려운 일입니다. 따라서 MSA에서는 모든 구성 요소가 언제든지 고장날 수 있음을 가정하고 이에 대비하여 설계해야 합니다.

 

Design for Failure의 의미

1. 회복성을 고려한 서비스 설계

각 서비스는 자체적인 회복 메커니즘을 가지고 있어야 합니다. 예를 들어, 서킷 브레이커(Circuit Breaker) 패턴, 재시도 로직 등을 활용하여 서비스가 일시적인 장애에도 적절하게 회복할 수 있도록 합니다.

 

2. 격리된 실패 처리

한 서비스의 실패가 전체 시스템에 영향을 미치지 않도록 설계해야 합니다. 격리된 실패 처리는 한 서비스의 문제가 다른 서비스로 확산되는 것을 방지하고, 시스템의 부분적인 동작을 유지할 수 있도록 도움을 줍니다.

 

3. 모니터링과 경고 시스템 구축

시스템 상태를 실시간으로 모니터링하고, 장애 발생 시 빠르게 감지하고 대응할 수 있는 경고 시스템을 구축합니다. 이는 문제는 더 빠르게 파악하고 대응할 수 있도록 도움을 줍니다.

 

4. 실패 시나리오 테스트

시스템이 어떻게 실패에 대응하는지를 검증하기 위해 실패 시나리오 테스트를 수행합니다. 이를 통해 시스템의 강건성을 확인하고 문제를 예측하여 대비할 수 있습니다.

 

5. 자동화된 회복과 롤백

서비스의 자동화된 회복과 롤백 기능을 구현하여, 문제가 발생했을 때 빠르게 복구할 수 있도록 합니다. 자동화된 프로세스는 더 신속하고 효율적인 대응을 가능하게 합니다.

 

Design for Failure의 이점

1. 높은 가용성과 안전성

Design for Failure는 시스템이 예상치 못한 상황에 대비하여 더 높은 가용성과 안정성을 제공합니다.

 

2. 유연한 대응 및 유지보수

장애를 예측하고 대응하는 시스템은 더 유연하게 변화에 대응하고, 유지보수를 용이하게 만듭니다.

 

3. 고객 만족도 향상

장애에 빠르게 대응하고 회복함으로써 서비스의 지속적인 가용성을 제공함으로써 고객 만족도를 향상시킬 수 있습니다.

 

'인프라 > MSA' 카테고리의 다른 글

[MSA] 분산 트랜잭션 - ACID  (1) 2023.12.18
[MSA] Hexagonal Architecture  (0) 2023.12.07
[MSA] MSA가 어려운 이유  (0) 2023.12.01
[MSA] MSA란 무엇인가?  (0) 2023.11.30
[MSA] 모놀리스 아키텍처란 무엇인가?  (0) 2023.11.30