시스템 아키텍트백엔드 개발자

마이크로서비스 아키텍처란 무엇이며 그 장점과 단점은 무엇인가요?

Hintsage AI 어시스턴트로 면접 통과

답변.

마이크로서비스 아키텍처는 애플리케이션이 각기 다른 비즈니스 문제를 담당하는 작고 독립적인 서비스로 구성되는 소프트웨어 시스템 구축 접근 방식입니다. 각 서비스는 다른 서비스와 독립적으로 개발되고 배포됩니다.

장점:

  • 확장성: 각 서비스는 별도로 확장할 수 있습니다.
  • 개발 독립성: 서로 다른 팀이 개별 서비스 를 신속하게 개발할 수 있습니다.
  • 장애에 대한 저항력: 하나의 서비스가 실패하더라도 전체 시스템이 중단되지 않습니다.

단점:

  • 관리 복잡성: 상호작용, 모니터링 및 로드 밸런싱의 설정이 필요합니다.
  • 배포의 복잡성: 여러 서비스의 조정이 어렵습니다.
  • 커뮤니케이션 비용 증가: 서비스가 네트워크를 통해 연결되므로 지연이 증가하고 안정적인 통합이 필요합니다.

Python (Flask)에서의 마이크로서비스 REST 모형 예:

from flask import Flask, jsonify app = Flask(__name__) @app.route('/user/<int:user_id>') def get_user(user_id): return jsonify({"user_id": user_id, "name": "Ivan"}) if __name__ == "__main__": app.run(port=5001)

주요 특징:

  • 각 서비스는 독립적인 애플리케이션입니다.
  • 다양한 서비스에 대해 새로운 기술이나 언어를 쉽게 도입할 수 있습니다.
  • 네트워크 상호작용 오류를 고려하고 데이터 일관성을 보장해야 합니다.

트릭 질문들.

마이크로서비스가 동일한 데이터베이스에서 작동할 수 있나요?

이는 모놀리식 애플리케이션에서 마이그레이션하는 단계에서 허용되지만, 각 서비스가 의존성을 최소화하고 독립적인 발전을 보장하기 위해 데이터를 별도로 저장해야 하므로 이론적으로는 반대됩니다.

마이크로서비스 아키텍처에 Docker를 반드시 사용해야 하나요?

아니요, Docker는 배포 및 격리를 용이하게 하지만, 마이크로서비스는 컨테이너화 없이도 가상 머신이나 심지어 독립적인 물리 서버를 사용하여 구현할 수 있습니다.

서비스 간 API 계약이 깨지면 CI/CD 파이프라인에서 모든 것이 녹색일 때 어떻게 되나요?

API 계약의 실패는 서비스 간의 상호작용 오류를 초래하며, 이는 통합 테스트로만 식별할 수 있습니다. CI/CD에서의 녹색 빌드는 서로 다른 서비스 버전이 호환된다는 보장을 하지 않습니다.