<aside> 💡 모노리스 아키텍처 단점
<aside> 💡 프로젝트에 필요한 부분
</aside>
마이크로서비스에 대한 공식적인 정의는 없지만 일반적으로 설명되는 것으로는 마이크로서비스란 단일 애플리케이션을 작은 규모의 서비스 조합은로 나눠 개발하는 방식을 말한다. 서비스는 자체 프로세스로 실행되며 가벼운 메커니즘으로 통신한다. 마이크로서비스는 결국 궁극적으로 넓은 범위에 걸쳐있는 크고 복잡한 시스템을 다루는 것이다.
마이크로서비스 스타일
주의해야할 점
영향 범위 판단
결정 사항이 추후 문제로 발생할 수 있다. 문제가 발생하기 전가지 결정의 영향을 판단하기 어렵기 때문에 각 옵션을 평가하고 선택하기 어렵다.
복잡한 시스템 구조
기본적으로 마이크로서비스는 복잡한 적응형 시스템이다. 시스템의 각 파트가 어떤 식으로든 다른 부분에 영향을 미친다. 새로운 기술을 도입할 때에 변화에 따라 대응하는 부분에서 복잡성 때문에 설계가 어렵다. 도입된 변경 사항의 구체적인 영향을 예측하기 어렵기 때문에 새로운 아키텍처 사용으로 득보다 실이 더 클 수도 있다.
분석 마비
잘못된 종류의 시스템을 만드는 것에대한 결정을 끝없이 추측, 토론, 평가를 하게 만든다. 시스템을 구축하는 대신에 선택에 대해 끝없이 고민만 반복하는 상황에 빠진다. 이러한 상태를 일반적으로 분석 마비라 한다.
아키텍처 결정 기록(ADR)
설계 결정을 문서화한다는 의미를 가진 도구를 말하며 명확한 결정을 내릴 수 있는 방법이다.
콘텍스트
목표, 해결해야 하는 문제, 제약은 무엇인지에대한 요약 기록
대안
결정을 내릴 수 있는 선택지가 없다면 좋은 결정이 아님을 알아야한다. 좋은 결정이 무엇일지 이해하는데 도움이 되어야한다.
선택
모든 선택 사항을 문서화해야한다.
영향
결정에 따른 결과와 중요한 내용은 문서화되어야한다. 장단점은 무엇인지, 일하는 방식이나 내려야 할 다른 결정에 어떤 영향을 미치는지에 대한 구체적인 내용이 포함되어야한다.
Build-Time Integration
수정사항을 반영하기 위해서 모든 패키지들을 만들어서 빌드해야하고 배포해야함
Run-Time Integrations
런타임에 통합된 각 애플리케이션들이 서로의 코드를 공유하는 방식의 기술이다. Next.js와 호환이 가능하다.