IT 세상
MSA 심층 서술형 예상 문제
엉클케빈
2024. 8. 11. 22:37
1. MSA 도입의 장점과 단점
- 문제: "전통적인 모놀리식 아키텍처를 마이크로서비스 아키텍처(MSA)로 전환하려고 합니다. MSA 도입의 장점과 단점에 대해 설명하세요."
- 답변:
- 장점:
- 독립적인 배포: 각 서비스가 독립적으로 배포 가능하여, 특정 서비스의 업데이트나 수정이 다른 서비스에 영향을 주지 않도록 할 수 있습니다.
- 확장성: 특정 서비스에만 트래픽이 집중될 경우, 해당 서비스만 확장할 수 있어 리소스를 효율적으로 사용할 수 있습니다.
- 유연한 기술 선택: 각 마이크로서비스가 독립적으로 개발되기 때문에, 서비스마다 적합한 프로그래밍 언어, 데이터베이스, 기술 스택을 선택할 수 있습니다.
- 신속한 개발 및 배포: 서비스별로 작은 팀이 독립적으로 개발 및 배포를 진행할 수 있어, 전체 개발 속도가 빨라질 수 있습니다.
- 단점:
- 복잡한 관리: 다수의 서비스가 존재하기 때문에, 서비스 간 통신, 데이터 일관성, 배포 파이프라인 관리가 복잡해질 수 있습니다.
- 테스트 어려움: 마이크로서비스 간의 상호작용을 테스트하기 위해 통합 테스트 및 E2E(End-to-End) 테스트가 더 복잡해질 수 있습니다.
- 데이터 일관성 문제: 분산된 데이터베이스 간의 일관성을 유지하는 것이 어려울 수 있으며, 이를 해결하기 위해 추가적인 설계가 필요합니다.
- 서비스 간 통신 지연: 서비스 간 네트워크 통신이 필수적이므로, 성능 이슈가 발생할 수 있으며, 네트워크 장애에 취약할 수 있습니다.
2. 서비스 간 통신 방법
- 문제: "MSA에서 서비스 간 통신을 처리하기 위한 다양한 방법에 대해 설명하고, 각각의 장단점을 비교하세요."
- 답변:
- HTTP/REST:
- 장점:
- REST API는 HTTP를 기반으로 하여, 사용하기 쉽고 표준화된 방법입니다.
- 대부분의 프로그래밍 언어에서 쉽게 구현 가능하며, 널리 사용되고 있습니다.
- 단점:
- 동기식 통신 방식으로, 호출 대기 시간과 타임아웃 문제가 발생할 수 있습니다.
- 네트워크 지연 및 장애에 취약합니다.
- gRPC:
- 장점:
- HTTP/2를 기반으로 하여, 빠르고 효율적인 바이너리 형식으로 데이터를 전송합니다.
- 양방향 스트리밍을 지원하며, 다중 프로그래밍 언어를 위한 인터페이스 정의 언어(IDL)를 제공합니다.
- 단점:
- REST에 비해 복잡하며, 개발자가 직접 인터페이스를 정의해야 합니다.
- HTTP/1.1 지원이 필요한 환경에서는 적합하지 않을 수 있습니다.
- 메시지 큐 (Message Queue):
- 장점:
- 비동기식 통신 방식으로, 메시지를 큐에 저장하고 나중에 처리할 수 있어, 서비스 간의 의존성을 줄일 수 있습니다.
- 서비스 장애 시에도 메시지를 손실하지 않고, 재처리할 수 있는 내구성을 제공합니다.
- 단점:
- 큐의 복잡성 및 큐를 관리하는 인프라의 부담이 증가합니다.
- 메시지 순서 보장, 중복 메시지 처리 등 추가적인 복잡성이 필요합니다.
- GraphQL:
- 장점:
- 클라이언트가 원하는 데이터만 요청할 수 있어, 효율적인 데이터 전송이 가능합니다.
- 하나의 엔드포인트로 여러 리소스를 처리할 수 있어, API 호출을 줄일 수 있습니다.
- 단점:
- 복잡한 쿼리 작성 및 최적화가 필요할 수 있습니다.
- 캐싱 및 보안 설정이 더 복잡할 수 있습니다.
3. 데이터베이스 설계 전략
- 문제: "MSA 환경에서 각 서비스가 독립된 데이터베이스를 가질 때의 장점과 단점, 그리고 데이터베이스 간의 일관성을 유지하는 방법에 대해 설명하세요."
- 답변:
- 장점:
- 서비스 독립성: 각 서비스가 독립된 데이터베이스를 가짐으로써, 서비스 간의 결합도가 낮아지고, 서비스별로 최적화된 데이터베이스를 선택할 수 있습니다.
- 확장성: 서비스별로 데이터베이스를 분리하면, 특정 서비스의 데이터베이스를 독립적으로 확장할 수 있습니다.
- 데이터 보호: 각 서비스가 별도의 데이터베이스를 사용함으로써, 서비스 간 데이터 접근 권한을 분리하고 보호할 수 있습니다.
- 단점:
- 데이터 중복: 동일한 데이터가 여러 서비스에 걸쳐 중복 저장될 수 있으며, 이는 데이터 일관성 문제를 유발할 수 있습니다.
- 복잡한 쿼리: 데이터를 결합하여 조회해야 하는 경우, 여러 데이터베이스를 조인하는 복잡한 쿼리가 필요할 수 있습니다.
- 데이터 일관성 유지: 데이터베이스 간의 트랜잭션 일관성을 보장하기 어렵습니다.
- 일관성 유지 방법:
- 사갸(Saga) 패턴: 분산 트랜잭션 관리의 한 방법으로, 각 서비스가 독립적으로 트랜잭션을 관리하고, 실패 시 보상 트랜잭션을 실행하여 일관성을 유지합니다.
- CQRS (Command Query Responsibility Segregation): 명령과 쿼리를 분리하여, 쓰기와 읽기를 독립적으로 처리합니다. 쓰기 모델에서 발생한 변경 사항을 이벤트 소싱을 통해 읽기 모델에 반영합니다.
- 이벤트 소싱: 상태 변경을 이벤트로 기록하여, 이벤트를 재생함으로써 데이터베이스 간 일관성을 유지할 수 있습니다.
4. MSA에서의 배포 전략
- 문제: "MSA 환경에서 서비스 배포를 위한 다양한 전략을 설명하고, 각 전략의 장단점을 비교하세요."
- 답변:
- 블루/그린 배포:
- 장점:
- 새로운 버전 배포 후 문제가 발생할 경우, 즉시 이전 버전으로 롤백이 가능합니다.
- 단점:
- 두 개의 환경을 동시에 운영해야 하므로, 리소스 비용이 증가합니다.
- 카나리 배포:
- 장점:
- 새로운 버전을 일부 사용자에게만 제공하여, 단계적으로 배포 및 테스트가 가능합니다.
- 단점:
- 카나리 그룹의 피드백이 충분히 수집되지 않으면, 전체 배포 시 문제가 발생할 수 있습니다.
- 롤링 배포:
- 장점:
- 점진적으로 서버를 교체하면서 배포할 수 있어, 배포 중에도 서비스가 계속 운영됩니다.
- 단점:
- 배포 중 일부 사용자는 새로운 버전을, 일부 사용자는 이전 버전을 사용할 수 있어, 일관성 문제가 발생할 수 있습니다.
- A/B 테스트:
- 장점:
- 두 가지 버전의 성능을 비교하여, 더 나은 성과를 보이는 버전을 선택할 수 있습니다.
- 단점:
- 테스트를 위해 더 많은 리소스가 필요하며, 사용자의 경험이 일관되지 않을 수 있습니다.