가지 주요 요점
1. 마이크로서비스: 함께 작동하는 작고 자율적인 서비스
마이크로서비스는 함께 작동하는 작고 자율적인 서비스입니다.
마이크로서비스의 기초. 마이크로서비스 아키텍처는 소프트웨어를 작고 독립적인 서비스 모음으로 개발하는 원칙에 기반을 두고 있습니다. 각 서비스는 하나의 작업에 집중하며, 자체 프로세스에서 실행되고 HTTP/REST API와 같은 경량 메커니즘을 통해 통신합니다. 이 접근 방식은 모놀리식 아키텍처에 비해 유연성, 확장성, 유지보수성을 크게 향상시킵니다.
장점과 도전 과제. 마이크로서비스의 주요 장점은 다음과 같습니다:
- 모듈화 개선
- 개별 구성 요소의 확장 용이성
- 기술 다양성
- 고장 격리 강화
- 빠른 배포 주기
그러나 마이크로서비스는 다음과 같은 도전 과제도 수반합니다:
- 운영 복잡성 증가
- 분산 시스템 문제 (예: 네트워크 지연, 고장 내성)
- 서비스 간 데이터 일관성
2. 진화적 아키텍처: 변화하는 요구사항에 적응하기
아키텍트의 역할은 큰 그림을 보고 이 균형을 이해하는 것입니다.
변화를 수용하기. 진화적 아키텍처는 시스템이 시간에 따라 변화하는 요구사항에 적응해야 한다는 필요성을 강조합니다. 이 접근 방식은 모든 미래의 요구를 예측하는 것이 불가능하다는 것을 인식하고, 대신 진화할 수 있는 유연한 기초를 만드는 데 중점을 둡니다.
핵심 원칙:
- 점진적 변화: 큰 변화를 드물게 하기보다는 작은 변화를 자주 수행
- 가이드된 변화: 아키텍처 결정을 안내하는 원칙과 관행 사용
- 다중 아키텍처: 시스템의 다른 부분이 다른 속도로 진화할 수 있음을 인식
이 모델에서 아키텍트는 모든 세부 사항을 지시하기보다는 가이드라인과 제약을 설정하는 도시 계획자와 같은 역할을 합니다. 이는 팀이 지역적 결정을 내리면서 전체 시스템의 일관성을 유지할 수 있게 합니다.
3. 서비스 모델링: 경계와 컨텍스트 정의하기
우리는 서비스 경계를 비즈니스 경계에 맞추어 특정 기능의 코드가 어디에 있는지 명확하게 합니다.
도메인 주도 설계. 서비스를 효과적으로 모델링하려면 비즈니스 도메인에 대한 깊은 이해가 필요합니다. 도메인 주도 설계(DDD)는 서비스 경계를 정의하는 데 유용한 개념을 제공합니다:
- 경계된 컨텍스트: 명확한 경계를 가진 도메인 영역
- 공통 언어: 개발자와 도메인 전문가가 공유하는 공통 언어
- 애그리게이트: 단위로 취급되는 도메인 객체의 클러스터
서비스 경계 식별:
- 비즈니스 기능에 맞추기
- 데이터와 행동 캡슐화
- 서비스 간 종속성 최소화
- 팀 구조와 커뮤니케이션 패턴 고려
잘 정의된 경계는 더 응집력 있는 서비스와 느슨한 결합을 촉진하여 독립적인 개발과 배포를 용이하게 합니다.
4. 통합 전략: 통신을 위한 적절한 접근 방식 선택
보수적으로 행동하고, 다른 사람으로부터 받아들이는 데는 관대하십시오.
통합의 중요성. 효과적인 통합은 마이크로서비스가 원활하게 작동하는 데 필수적입니다. 통합 기술의 선택은 시스템의 유연성, 성능, 유지보수성에 큰 영향을 미칩니다.
주요 통합 패턴:
- 동기 통신: REST, gRPC
- 비동기 통신: 메시지 큐, 이벤트 스트리밍
- API 게이트웨이: 요청 라우팅 및 구성
- 서비스 메쉬: 서비스 간 통신 처리
모범 사례:
- 기술 독립적인 프로토콜 사용 (예: HTTP)
- 변화를 우아하게 처리하는 관대한 리더 구현
- 회로 차단기와 벌크헤드를 사용하여 실패를 대비한 설계
- 느슨한 결합을 위한 이벤트 기반 아키텍처 고려
적절한 통합 전략은 특정 사용 사례, 성능 요구사항, 팀 전문성에 따라 다릅니다.
5. 모놀리식 분할: 마이크로서비스로 전환하기
우리의 모놀리스를 대리석 블록으로 생각하십시오. 전체를 폭파할 수도 있지만, 이는 거의 잘 끝나지 않습니다. 점진적으로 조금씩 깎아내는 것이 훨씬 더 합리적입니다.
점진적 접근. 모놀리식 아키텍처에서 마이크로서비스로 전환하는 것은 점진적으로 이루어지는 것이 가장 좋습니다. 이는 팀이 학습하고 적응하면서 위험을 최소화할 수 있게 합니다.
모놀리식 분할 단계:
- 기존 코드베이스에서 이음새 식별
- 경계된 컨텍스트를 별도의 모듈로 추출
- 공유 데이터 구조 및 데이터베이스 리팩토링
- 모듈 간 통신을 위한 API 생성
- 모듈을 별도의 서비스로 추출
- 새로운 기능을 마이크로서비스로 구현
고려해야 할 도전 과제:
- 서비스 간 데이터 종속성
- 서비스 경계를 넘는 트랜잭션 무결성
- 네트워크 통신의 성능 영향
- 여러 서비스를 관리하는 운영 복잡성
가장 쉬운, 위험이 적은 추출부터 시작하여 자신감과 경험을 쌓은 후 더 복잡한 부분을 다루십시오.
6. 배포 기술: 신뢰성과 확장성 보장
올바른 일을 하는 것이 어렵다면, 우리는 일을 더 쉽게 만들기 위해 노력해야 합니다.
자동화된 배포. 신뢰할 수 있고 확장 가능한 배포는 마이크로서비스 성공의 핵심입니다. 지속적 통합 및 지속적 배포(CI/CD) 관행은 증가된 배포 복잡성을 관리하는 데 필수적입니다.
주요 배포 기술:
- 코드로서의 인프라 (IaC)
- 컨테이너화 (예: Docker)
- 오케스트레이션 플랫폼 (예: Kubernetes)
- 블루-그린 배포
- 카나리아 릴리스
배포 고려사항:
- 서비스 검색 및 구성 관리
- 모니터링 및 로깅
- 보안 및 접근 제어
- 데이터베이스 마이그레이션 및 데이터 일관성
도구와 자동화에 투자하여 배포를 더 쉽고 빠르며 신뢰할 수 있게 만드십시오. 이는 팀이 자주 배포할 수 있게 하여 마이크로서비스 아키텍처의 모든 이점을 실현할 수 있게 합니다.
7. 마이크로서비스 테스트: 분산 시스템에서 품질 유지
움직이는 부품이 많을수록 테스트가 더 취약해지고, 결정론적이지 않을 수 있습니다.
포괄적인 테스트 전략. 마이크로서비스를 테스트하려면 개별 서비스 품질과 전체 시스템 동작을 모두 보장하기 위한 다층 접근 방식이 필요합니다.
마이크로서비스 테스트 피라미드:
- 단위 테스트: 개별 구성 요소에 대한 빠르고 집중된 테스트
- 통합 테스트: 서비스 간 상호작용 검증
- 계약 테스트: 서비스가 합의된 인터페이스를 충족하는지 확인
- 종단 간 테스트: 전체 시스템 동작 검증
테스트 도전 과제:
- 분산 특성으로 인한 복잡성 증가
- 서비스 간 테스트 데이터 관리
- 프로덕션과 유사한 환경 시뮬레이션
- 비동기 상호작용 처리
단위 및 통합 테스트를 통해 빠른 피드백 루프를 강조하고, 중요한 경로를 검증하기 위해 신중하게 선택된 종단 간 테스트를 사용하십시오. 소비자 주도 계약을 사용하여 서비스 종속성을 효과적으로 관리하는 것을 고려하십시오.
8. 모니터링 및 보안: 마이크로서비스를 건강하고 안전하게 유지
좋은 로깅, 특히 여러 시스템에서 로그를 집계할 수 있는 능력은 예방이 아니라, 나쁜 일이 발생했을 때 감지하고 복구하는 데 도움이 됩니다.
전체적인 접근. 효과적인 모니터링과 보안은 건강한 마이크로서비스 생태계를 유지하는 데 필수적입니다. 이러한 측면은 분산 시스템에서 더 도전적이고 중요해집니다.
모니터링 모범 사례:
- 중앙 집중식 로깅 및 로그 집계
- 분산 추적 (예: 상관 ID 사용)
- 실시간 경고 및 대시보드
- 애플리케이션 성능 모니터링 (APM)
- 중요한 경로에 대한 합성 모니터링
보안 고려사항:
- 서비스 간 인증 및 권한 부여
- 엣지 보안을 위한 API 게이트웨이
- 비밀 관리
- 네트워크 분할
- 정기적인 보안 감사 및 침투 테스트
깊이 방어 전략을 구현하여 주변과 개별 서비스를 모두 보호하십시오. 모든 서비스에 일관된 보안 정책을 적용하기 위해 자동화를 사용하십시오.
9. 콘웨이의 법칙: 조직과 시스템 설계의 정렬
콘웨이의 법칙은 조직과 일치하지 않는 시스템 설계를 강요하는 위험을 강조합니다.
조직적 영향. 콘웨이의 법칙은 시스템 설계가 조직 내 커뮤니케이션 구조를 반영한다고 말합니다. 이 원칙은 마이크로서비스 아키텍처에 중요한 영향을 미칩니다.
팀과 서비스 정렬:
- 비즈니스 기능을 중심으로 팀 구성
- 서비스의 종단 간 소유권을 팀에 부여
- 팀 간 종속성 최소화
- 협업과 공동 책임 문화를 조성
고려사항:
- 팀 크기와 구성
- 커뮤니케이션 패턴 및 도구
- 의사 결정 과정
- 기술 개발 및 지식 공유
조직 구조와 시스템 아키텍처가 상호 연관되어 있음을 인식하십시오. 성공적인 마이크로서비스 개발 및 운영을 위한 환경을 조성하기 위해 둘 다 함께 진화시키십시오.
10. 마이크로서비스 확장: 성장과 실패 처리
규모가 커지면 최고의 장비, 가장 비싼 하드웨어를 구입하더라도 실패를 피할 수 없습니다.
확장성과 회복력을 위한 설계. 마이크로서비스 아키텍처는 수요 증가와 불가피한 실패를 우아하게 처리할 수 있도록 설계되어야 합니다.
확장 전략:
- 수평 확장 (인스턴스 추가)
- 수직 확장 (인스턴스당 리소스 증가)
- 캐싱 (인메모리, 분산)
- 데이터베이스 샤딩 및 복제
- 비동기 처리 및 이벤트 기반 아키텍처
회복력 패턴:
- 연쇄 실패를 방지하기 위한 회로 차단기
- 고장 격리를 위한 벌크헤드
- 지수 백오프를 사용한 타임아웃 및 재시도
- 기능의 우아한 저하
CAP 정리 고려사항:
- 일관성
- 가용성
- 파티션 내성
분산 시스템을 확장할 때는 트레이드오프가 필요함을 이해하십시오. 특정 요구사항과 제약에 따라 우선순위를 정하십시오. 시스템 회복력을 지속적으로 개선하기 위해 가시성 및 혼돈 공학 관행을 구현하십시오.
마지막 업데이트 날짜:
FAQ
What's Building Microservices by Sam Newman about?
- Microservices Architecture: The book explores microservices, which are small, autonomous services that collaborate to form a system. It highlights how this architecture can enhance software delivery speed and flexibility.
- Business Domain Focus: Microservices are modeled around business domains, aligning software design with business needs and avoiding issues of monolithic architectures.
- Practical Guidance: Sam Newman provides real-world examples from companies like Netflix and Amazon, offering a comprehensive guide for adopting or understanding microservices.
Why should I read Building Microservices by Sam Newman?
- Comprehensive Resource: It covers design, development, deployment, testing, and maintenance of microservices, making it ideal for those transitioning from monolithic systems.
- Real-World Examples: The book includes insights from organizations that have successfully implemented microservices, providing practical perspectives and lessons learned.
- Continuous Learning: It encourages embracing continuous learning to keep up with the fast-evolving nature of microservices technology and practices.
What are the key takeaways of Building Microservices by Sam Newman?
- Microservices Benefits: The book outlines benefits like improved scalability, resilience, and quick adoption of new technologies due to service autonomy.
- Loose Coupling and High Cohesion: Emphasizes designing services to be loosely coupled and highly cohesive, facilitating easier maintenance and updates.
- Integration Strategies: Discusses synchronous and asynchronous communication strategies, crucial for maintaining service autonomy and effective collaboration.
What is the definition of microservices according to Building Microservices by Sam Newman?
- Small, Autonomous Services: Defined as "small, autonomous services that work together," highlighting their independence and functionality without reliance on others.
- Business Functionality Focus: Each microservice handles a specific business capability, aligning with organizational goals and prioritizing work effectively.
- Decoupled Communication: Services communicate through well-defined APIs, maintaining loose coupling and enabling independent development and deployment.
How does Building Microservices by Sam Newman suggest modeling services?
- Bounded Contexts: Introduces bounded contexts from Domain-Driven Design to define service boundaries, with each context representing a specific responsibility.
- Loose Coupling and High Cohesion: Stresses that related functionality should reside within the same service, while unrelated functionality should be separated.
- Iterative Approach: Recommends refining service boundaries over time to accommodate changes in business requirements and technology.
What are the integration strategies discussed in Building Microservices by Sam Newman?
- Synchronous vs. Asynchronous: Contrasts synchronous communication, where a service waits for a response, with asynchronous communication, where services operate independently.
- Event-Driven Architecture: Advocates for event-driven architectures, where services emit events to signal state changes, promoting loose coupling.
- REST and RPC: Discusses RESTful APIs and Remote Procedure Calls for service communication, emphasizing technology-agnostic APIs for flexibility.
What are the challenges of deploying microservices as outlined in Building Microservices by Sam Newman?
- Increased Complexity: Warns of the complexity due to interdependencies between services, which can lead to deployment challenges without proper management.
- Continuous Integration and Delivery: Emphasizes robust CI/CD practices to manage microservices effectively, ensuring quick and reliable deployments.
- Monitoring and Management: Suggests comprehensive monitoring solutions to track the health and performance of each service independently.
How does Building Microservices by Sam Newman address testing in microservices?
- Types of Tests: Categorizes tests into technology-facing and business-facing, including unit, integration, and end-to-end tests for service reliability.
- Consumer-Driven Contracts: Introduces consumer-driven contracts to validate service interactions, ensuring changes in one service don't break dependent services.
- Automated Testing: Advocates for automated testing to maintain quality and speed in deployment, allowing confident release of changes.
What is the significance of Conway’s Law in Building Microservices by Sam Newman?
- Organizational Structure and Architecture: Discusses Conway’s Law, which states that system designs reflect the communication structures of organizations.
- Team Autonomy: Emphasizes organizing microservices around autonomous teams that own specific services, fostering accountability and ownership.
- Impact on Design: Highlights the importance of aligning team structures with service boundaries for effective collaboration and faster feature delivery.
What are the best quotes from Building Microservices by Sam Newman and what do they mean?
- Freedom to React: "Microservices give us significantly more freedom to react and make different decisions," highlighting agility compared to monolithic architectures.
- Service Autonomy: "The golden rule: can you make a change to a service and deploy it by itself without changing anything else?" emphasizes designing independent services.
- Postel's Law: "Be conservative in what you do, be liberal in what you accept from others," underscores flexibility in service interactions while maintaining strict internal standards.
What are some architectural safety measures discussed in Building Microservices by Sam Newman?
- Circuit Breakers: Prevent cascading failures by stopping further calls to a failing service, allowing it to recover without being overwhelmed.
- Bulkheads: Isolate different parts of a system to prevent a failure in one area from affecting others, enhancing resilience and stability.
- Timeouts: Setting appropriate timeouts for service calls to avoid hanging requests, ensuring services can fail fast and recover effectively.
How does Building Microservices by Sam Newman suggest handling service discovery?
- Dynamic Service Registries: Discusses using tools like Consul and Eureka for managing service discovery, allowing easy registration and discovery of services.
- DNS as a Solution: Mentions DNS for service discovery, though it may not suit highly dynamic environments, suggesting load balancers to mitigate limitations.
- Human-Friendly Interfaces: Emphasizes creating user-friendly interfaces for service discovery, aiding developers in finding and understanding available services.
리뷰
마이크로서비스 구축은 다양한 평가를 받고 있으며, 많은 이들이 마이크로서비스 개념에 대한 포괄적인 개요와 실용적인 조언을 칭찬하고 있다. 독자들은 저자의 신중한 접근 방식과 실제 사례를 높이 평가한다. 비평가들은 일부 주제에 대한 깊이 부족과 마이크로서비스를 과대평가할 가능성을 지적한다. 많은 이들이 초보자에게는 유용하지만, 경험 많은 아키텍트에게는 덜 유용하다고 생각한다. 이 책은 마이크로서비스의 설계, 배포, 테스트, 확장 등 다양한 측면을 다루고 있다. 일부 독자들은 더 구체적인 구현 세부 사항을 원했지만, 다른 이들은 소프트웨어 아키텍처에 대한 고차원적인 관점을 가치 있게 여겼다.
Similar Books









