Microservice architcture 디자인

- MSA 시스템은 한가지만 담당하는 작은 시스템으로 이루어져야한다. 이래야만 명확할수 있다.

-code는 짧고 심플해야한다. Node 커뮤니티의 가이드라인은 100라인 근처의 프로그램을 제한한다. 이러면 유지보수가 편해진다.

-어떠한 서비스도 다른 서비스에 의존하면 안된다. 서비스가 decouple되야한다. 그래야지 scalability와 명확성 , maintainability가 향상된다.

-MSA패턴의 데이터 모델은 각자 데이터베이스를 유지해야하지 중앙집중되서는 안된다.

-독립적인 서비스는 쉽게 복제가 되거나 숨길수 있어야된다. MSA에서 Scaling은 자연스런 기능임 (줄이거나 늘리는 양방향). 이것의 장점은 프로토 타입 서비스가 테스트될수있고 새로운 기능을 추가할수 있게 한다.

-독립되고 stateless 서비스는 쉽게 붙있수 있고 업그래이드가 될수 있다. 그러면 프로토 타입 테스트가 쉽게 가능하다.

-Failure는 어쩔수 없다. 따라서 시스템은 Failure에 관대해야한다. Failure를 지역화, 격리화 되고 복구가 쉽게 되는 메커니즘을 구현해야함. 즉 의존성을 줄여서 견고함을 향상시킨다.

-어떠한 시스템에서도 테스트는 필수적이여야한다. 모호하지 않고 간단한 stateless서비스는 쉽게 테스트 가능한다. 테스트의 중요한것은 stubbing이나 mocking 으로, 서비스가 상호보완되게 테스트 가능하도록 하는 시뮬레이션이다. 깔끔하게 된 서비스는 쉽게 시뮬레이션 가능하다. 그러므로 지능적인 테스트 가능한 환경을 만들어라.

*test stub은 특정 시스템 컴포넌트의 개발이 완료되지 않은 상황에서도 필요한 시험을 진행하기 위해 생성된 더미 컴포넌트.단지 기능 또는 프로시저 헤더 등의 코드 루틴만 갖고 내부 프로세싱은 제한적으로 존재하거나 존재하지 않는 것이 일반적이다.