코딩공부/MSA

[마이크로서비스] 마이크로서비스의 원칙

내일의기대 2024. 4. 1. 01:42

본 글은 책 「샘뉴먼, "마이크로서비스 아키텍처 구축", 2017」의 마지막장을 정리한 글입니다.

마이크로 서비스의 7가지 원칙

1. 비즈니스 개념에 맞춘 모델링

  • 비즈니스 경계로 나눠진 콘텍스트가 기술적 개념에 맞춰 구성된 인터페이스보다 안정적
  • 도메인 경계를 정의하기 위해 경계가 있는 콘텍스트(Bounded Context)를 이용

2. 자동화 문화의 적용

  • 서비스들의 동작을 보장하는 것이 모놀리식 시스템보다 복잡하므로 자동화 테스팅이 중요
  • 명령행 호출을 통한 배포와 지속적 배포 이용
  • 배포 시 환경 차이를 구체화 하기 위한 환경 정의 (ex OS)
  • 더 빠른 배포를 위한 커스텀 이미지 생성과 불변 서버를 이용

3. 내부 세부 구현의 은폐

  • 경계가 있는 콘텍스트로 모델링을 통해 세부 구현을 은폐
  • 테이터베이스를 감추고 데이터 펌프, 이벤트 데이터 펌프를 통해 여러서비스 데이터 통합

4. 모든것을 분권화

  • 각 서비스를 소유한 팀이 의사결정과 통제를 가짐
  • 개발, 테스트팅, 배포가 쉽게하여 별도의 팀이 이를 수행할 필요가 없음
  • 콘웨이의 법칙에 따라 팀을 조직에 맞춰 조정
  • 공유 거버넌스를 시도
  • 오케스트레이션과 미들웨어 대신 코레오그래피 선호

5. 독립적인 배포

  • 마이크로 서비스가 독자적으로 배포되로록 노력
  • 여러 버전의 엔드포인트 공존
  • 강력히 결합된 클라이언트/서버 스텁의 생성은 피하기 (like Java RMI)
  • 호스트당 단일 서비스 모델 사용
  • 소비자 주도 계약(Consumer-Driven Contract) 사용

6. 장애 격리

  • 네트워크 호출을 할때 지역 호출처럼 처리하지 말 것. (지나치게 추상화한 클라이언트 사용 하지 말 것)
  • 항상 장애가 발생할 것을 염두해둘 것
  • 타임아웃 설정, 격벽, 회로 차단기를 언제 어떻게 사용할지 이해할 것
  • 가용성과 일관성 중 어느것을 희생하는것인지 옳은지 판단 (CAP 이론 관련)

7. 매우 식별 가능한 

  • 시스템 정상 동작 판단을 위한 통합된 뷰가 필요
  • 합성(가상) 트랜잭션을 주입하여 실사용자 행위를 모의하는 유의적 모니터링 사용
  • 로그와 통계를 수집
  • 모든 호출을 추적할 수 있도록 상관관계 ID를 사용