MSA(MicroServices Architecture) 관련 FAQ
마이크로서비스 아키텍처(MSA: MicroServices Architecture) 관련해서 자주 묻는 질문을 정리해봤습니다.
1. 모놀리딕 기반 객체지향 프로그래밍으로 만들어진 애플리케이션을 MSA로 변경할 때의 단계는?
이 부분은 워낙 광범위해서 별도의 포스트로 작성할 것이지만 핵심만 뽑자면...
- 현재 비즈니스 로직에 대한 고찰 (무엇이 core이고 무엇이 부속인지?)
- 비즈니스 로직 -> API와 API 게이트웨이 기반의 서비스로 flow 변경.
- UI/서비스 레이어/데이터 레이어 마이크로서비스 아키텍처 생성
- SLO(Service Level Objective) 결정
- 마이크로서비스 모니터링 방식 결정
2. 가상 머신(VM)이 아닌 컨테이너 기반으로 MSA를 구축했을 때 장단점은?
가상 머신은 Guest OS를 사용해 독립 인스턴스를 생성하는 방식이지만 컨테이너는 Host OS 하나와 도커 이미지, 라이브러리, 실행 코드를 조합해 애플리케이션을 구동할 수 있는 가벼운 구조입니다. 따라서 프로비저닝과 트래픽 증감 시 스케일링(scaling)이 가상 머신에 비해 유연하고 빨라서 많은 서비스를 배포하고 조립하여 사용하는 MSA 구조에 적합합니다. 유일한 단점이러면 마이크로 서비스는 약결합(loosely coupled)로 생성하지만 서비스의 개수가 늘어날수록 애플리케이션 복잡도는 증가하게됩니다.
3. MSA를 클라우드에 구현할 때 어떤 서비스와 어떤 기술이 필요한가?
컨테이너 기반의 환경을 사용한다면 클라우드 가상 머신 인스턴스에 직접 쿠버네티스를 설치하여 사용하는 방법과 완전 관리형 컨테이너 서비스를 사용하는 방법이 있습니다.
후자의 경우 Registry에 배포할 도커 이미지를 저장하고 컨테이너가 이를 가져와 배포하는 구조가 적합하여 이를 CI/CD 방식으로 빌드 및 배포할 수도 있습니다.
4. MSA에서 자주 사용하는 디자인 패턴은? (CQRS, SAGA, ....)
CQRS는 Command Query Responsibility Segregation을 의미합니다. 즉, 명령(Command)와 질의(Query) 로직을 분리하여 사용하는 패턴입니다. 애플리케이션 서비스는 Query Model과 Command Model로 각각 구현하고 이 모델들은 Services Interfaces를 통해 사용자 UI와 통신하여 명령을 받고 질의 결과를 전달하고 데이터베이스를 연결하여 Query 결과를 READ 하고 Command 결과를 WRITE 합니다.
SAGA는 트랜잭션이 단일 서비스 내의 데이터를 갱신하는 일련의 로컬 트랜잭션입니다. 여러 종류가 있지만 짧게 정의하면 첫 번째 트랜잭션이 완료되고 난 후 두 번째 트랜잭션은 이전의 작업 완료에 의해 트리거 되는 방식을 사용합니다. 즉 내부의 트랜잭션이 순차적으로 완료되면서 다음 트랜잭션을 호출하는 구조입니다.