- 마이크로서비스 아키텍처
- 서비스를 분리하여 여러 개의 작은 애플리케이션으로 쪼개 변경과 조합이 가능하도록 만든 아키텍처
- 장점
- 효율적인 자원사용이 가능하다.
- 시스템의 아키텍처가 개발 조직 문화에 큰 영향을 미친다.
- 독립적인 테스트 구축이 용이하기 때문에 품질이 증가한다.
- 단점
- 서비스 간의 통신에 대한 처리가 추가적으로 필요하다
- 사용자의 요청을 처리하기 위한 응답속도 증가에도 영향을 미친다
- DB가 분산되어 트랜잭션 관리가 용이하지 않기 때문에, 데이터의 정합성을 맞추기 위한 추가적인 노력이 필요하다.
- 네트워크 지연으로 대기시간이 길어질 수 있다.
- 위의 단점을 보완하는 방법?
- API 게이트웨이를 둔다.
- 시스템의 아키텍처를 내부로 숨기고 외부의 요청에 의한 응답만을 적합한 형태로 응답한다.
- 이벤트 주도 데이터 관리
- 분산된 데이터베이스, 또는 시스템들이 이벤트의 발행(publish) 및 구독(subscribe)을 통해 트랜잭션이나 연산 처리를 할 수 있도록 만들어진 아키텍처 Kafka
마이크로서비스
여러 개의 다른 역할을 수행하는 애플리케이션으로 분리하였을 때 각 애플리케이션을 의미하며, 이렇게 마이크로서비스를 분리하여 여러 개의 작은 애플리케이션으로 쪼개어 변경과 조합이 가능하도록 만든 아키텍처를 마이크로서비스 아키텍처라고 말합니다. → 추상화 가능
최근 REST API의 일반화, 도커(DOCKER)같은 컨테이너 기술, 클라우드 컴퓨팅 환경 발전 등에 의해 마이크로서비스가 좀 더 쉽게 구현 가능하게 되었다.
- 마이크로서비스 아키텍처가 필요한 상황
- 애플리케이션의 배포에 한 시간 이상 소요된다.
- 단순한 기능 하나를 수정해도 전체 기능에 대한 QA가 필요하다.
- 단순한 버그 수정이 더 중대한 버그를 생산하는 일이 많아졌다.
- 현재의 애플리케이션을 기능별로 나눈다고 가정했을 때 수십개의 마이크로서비스가 가능하다.
모놀리틱 아키텍처
모놀리틱 아키텍처는 마이크로서비스 아치텍처에 반대되는 개념이다.

이런 단순한 구성의 애플리케이션은 소규모 프로젝트에서는 좋지만, 규모가 커지면
- 간단한 기능 하나 추가를 위해 매우 많은 줄의 코드 변경이 필요하다.
- 간단한 변화 하나에도 통합 테스트가 필요하다.
- 재활용 가능한 모듈을 무시하고 중복된 코드를 생산하게 된다.
- 간단한 버그 수정이 더 큰 버그를 양산하게 된다.
마이크로서비스 아키텍처

효율적인 자원사용이 가능하고, 시스템의 아키텍처가 개발 조직 문화에 큰 영향을 미친다. 독립적인 테스트 구축이 용이하기 때문에 품질이 증가한다. 모놀리틱 아키텍처와 다르게 데이터베이스가 분리되어 있다.
하지만 마이크로서비스 아키텍처도 단점이 있다.
- 서비스 간의 통신에 대한 처리가 추가적으로 필요하다 → 사용자의 요청을 처리하기 위한 응답속도 증가에도 영향을 미친다.
- DB가 분산되어 트랜잭션 관리가 용이하지 않기 때문에, 데이터의 정합성을 맞추기 위한 추가적인 노력이 필요하다.
- 서비스가 늘어날수록, 응답속도가 늦어진다 → 네트워크의 지연속도 때문
- 모든 마이크로서비스가 웹 통신에 적합한 프로토콜로 통신하지는 않는다,
API Gateway를 이용한 해결책
API Gateway : 서비스로 전달되는 모든 API 요청의 관문 역할을 하는 서버이다. 시스템의 아키텍처를 내부로 숨기고 외부의 요청에 의한 응답만을 적합한 형태로 응답한다.

API Gateway는 전체 시스템의 부하를 분산시키는 로드 밸런서의 역할, 불필요한 반복작업을 줄일 수 있는 캐싱, 요청과 응답에 대한 모니터링 역할을 수행할 수 있다.
→ 특정 서비스가 변경, 통합, 분리 되더라도 API 내부의 변경사항만으로 처리가 가능
→ 시스템 내부의 아키텍처를 숨길 수 있다.
이벤트-주도 데이터 관리
분산된 데이터베이스에서 트랜잭션 관리 이슈
- 모놀리틱 아키텍처에서는 단일 데이터베이스를 사용하기 때문에, ACID 트랜잭션이 가능하다.
- 하지만 마이크로서비스 아키텍처에서는 다양한 종류의 데이터 저장소에서 독립적으로 데이터를 관리해야 하고, ACID의 장점을 이용할 수 없다.
- 이러한 단점을 해결하기 위해 고안된 대표적인 아키텍처가 이벤트 주도 아키텍처 이다,
- 이벤트 주도 아키텍처는 한 마디로, ‘분산된 데이터베이스, 또는 시스템들이 이벤트의 발행(publish) 및 구독(subscribe)을 통해 트랜잭션이나 연산 처리를 할 수 있도록 만들어진 아키텍처를 말한다.

- 이벤트 주도 아키텍처에서 가장 중요하게 다뤄야 하는 부분은, 트랜잭션의 원자성을 보장하는 것
- 이벤트 주도 아키택처에서, 트랜잭션을 보장하는 방법으로는
- 로컬 트랜잭션을 이용하는 방법
- 로컬 트랜잭션에서 ACID 보장이 가능하다는 점을 이용해서, 특정 테이블의 레코드가 갱신될 때 이벤트 테이블에서 해당 이벤트를 기록하는 방식
- 트랜잭션 로그를 이용하는 방법
- 앞선 방법에서는 이벤트 퍼블리셔가 이벤트 발행을 담당했다면, 이번에는 트랜잭션 로그 마이너가 그 역할을 담당한다.
- 이벤트 소싱
- 순수하게 이벤트에만 의존하여 원자서을 보장하는 방식
Share article