Monolithic은 단일 서비스 개발 방식, 즉 하나의 프로젝트로 구성되어 있으며 단일 패키지로 배포하는 아키텍쳐입니다. 서버 애플리케이션은 단일체로서 작은 수정에도 전체를 다시 빌드해 재배포해야 했고, 확장이 필요한 경우에도 로드밸런서를 두고 큰 앱을 복제해 수평적으로 확장해야 했습니다. 즉, 수평적으로 확장된 여러 대의 모놀리식 서버에 수정사항을 적용하려면 시스템 전부를 다시 빌드하고 배포해야 하는 문제가 발생했습니다.
장점
단점
MSA(Micro Service Architecture)는 여러 개의 작은 어플리케이션으로 쪼개어서 배포하는 아키텍처로, 독립적인 기능을 수행하는 작은 단위의 서비스로 나누어 개발하는 방식입니다. 서버 어플리케이션은 별개의 인스턴스로 로딩되고, 각기 다른 저장소를 사용해 모듈 경계가 명확하게 구분됩니다.
장점
단점
MSA 서비스를 구성할때 어떤 기준으로 서비스를 분리를 해야할까요? MSA는 DDD를 기반으로, 좋은 서비스를 개발하기 위한 핵심 기본 요소인 Loose Coupling(느슨한 결합)과 High Cohesion(높은 응집)을 원칙으로 합니다.
1. 서비스 하나에 책임도 하나
마이크로서비스의 가장 큰 장점은 모듈 경계가 명확하다는 것입니다. 즉, 시스템 변경 사항이 발생하면, 변경할 특정 도메인 내 마이크로서비스 단위만 이해하고 처리하면 된다는, 단일 책임 원칙을 지킵니다. 만약 제대로 된 경계를 가지지 못한다면, MSA로 인한 마이크로서비스로의 분리는 장점이 아닌 큰 핸디캡이 될 수 있습니다. 따라서 MSA를 설계할 때 도메인을 잘 나누는 것이 얼마나 중요한지 생각해 보실 수 있습니다.
2. 마이크로서비스는 자율적
MSA의 각각의 마이크로서비스는 하나의 단독 서비스로서, 독립적으로 배포가 가능해야 합니다. 그런 의미에서 가상 인프라 발전은 MSA의 일등 공신이라고 할 수 있습니다. DevOps 환경에서 CI/CD 자동화와 수많은 서비스 배포환경을 관리하기 위한 인프라 구성 도구 개발은 MSA에 필수적인 조건인 동시에 MSA를 성공적으로 자리잡게 해주었습니다.
3. 폴리글랏 프로그래밍
각각의 마이크로서비스의 독립성이 강화되면서, 마이크로서비스 내의 기술 선택이 자유로워졌습니다. Loose Coupling의 원칙에 따라 각 마이크로 서비스팀은 서비스를 빠르고 효율적으로 개발할 수 있는 방법론과 도구, 기술을 적용할 수 있고, 자신의 팀에 맞는 개발 언어와 저장소를 선택할 수 있게 된 것입니다.
개발의 요구사항이 관리자 백오피스, 일반 사용자로 나눠져있어서 유저를 확인하고 토큰을 발급하는 인증(auth)서버, 발급된 토큰을 기반으로 인가를 받는 user서버와 admin서버로 분리했습니다. 이어지는 글에서는 개발에 적용된 주요 스택들에 대해 기술하겠습니다.
기본적인 시스템 아키텍처와 워크 플로우는 다음과 같습니다.
[Kakao Tech]이모티콘 서비스는 왜 MSA를 선택했나?
[마이크로서비스] 스프링 마이크로서비스 요약 정리 (spring microservice, msa)
DDD와 MSA