Study/CS

마이크로서비스의 개념

찬 주 2023. 10. 8. 20:11

마이크로서비스

마이크로서비스란 클라우드 네이티브 컴퓨팅의 핵심이 되는 기술로, 클라우드 네이티브 애플리케이션 개발/운영 아키텍처 스타일이다.

 

아키텍처 스타일이란?

더보기

아키텍처란 구성 요소와 구성 요소 간 관계를 표현한 것으로 건축물의 '구조'에 해당한다. 구조는 건축물의 근간을 이루는 것이지만, 그것만으로는 집이나 빌딩을 지을 수 없다. 건축물을 만들기 위한 기법이나 목조, 철근, 콘크리트 등의 재료, 그리고 장식 등이 있어서 집이나 빌딩을 완성할 수 있다. 이처럼 구조를 구체화하기 위한 주변 기술, 기법, 재료 등을 모아서 아키텍처 스타일이라고 한다.

 

 

마이크로서비스 아키텍처 (MSA)

마이크로서비스 아키텍처의 핵심은 독립적으로 개발 및 실행되는 소프트웨어 컴포넌트(서비스)를 여러 개 조합해서 하나의 애플리케이션을 구축하는 소프트웨어 구조에 있다. 이것을 구체화하기 위한 기술로 컨테이너, 오케스트레이션, REST, 메시징 등이 있으며, 기법으로는 데브옵스, 애자일, CD, 도메인 주도 설계가 있다. 이런 기법/기술들이 아키텍처 주변을 지탱하므로, 아키텍처 스타일로서의 마이크로서비스가 만들어지는 것이다. 

 

 

마이크로서비스 적용의 장단점

장점

  • 작은 단위의 애플리케이션 릴리스
    • 애플리케이션 전체를 한 번에 릴리스하는 빅뱅형 기법이 아니라, 일부를 단계적으로 릴리스 및 변경하게 하는 유연성을 가져다준다.
  • 빠르고 유연한 애플리케이션 변경 및 유지/관리
  • 작은 단위의 확장
    • scale-out이나 scale-in 관점에서 요청이 집중돼 있는 서비스만 확장 또는 축소할 수 있어서 시스템 리소스의 최적 사용 및 가동률 개선에 기여한다.
  • 장애 영향을 최소화
    • 서킷브레이커와 조합하면 장애 영향 범위를 극소화 할 수도 있다.
    • 장애 영향을 단일 서비스 내, 단일 요청 내로 제한한다.
  • 지속적 전달 실현의 기초
    • 이러한 세밀한 소프트웨어구조는 CD를 사용한 잦은 빈도의 배포에 적합하다.

단점

  • 서비스 간 통신 지연
    • 사용자 요청이 발생할 때마다 서비스 간 통신이 발생할 가능성이 있고, 이는 성능에 영향을 준다.
  • 분산 배치된 데이터의 동기화
    • 데이터도 분산 배치되므로 DB 간 일관성이나 동기화 기법, 운영 및 감시 구조를 정비해야 한다.
  • 분산 컴퓨팅 환경의 운영 및 감시 비용
  • 시스템 전체 설계 일관성 및 통일성
  • 서비스 모델링 기법의 학습 난이도

이러한 어려움이 있음에도 마이크로서비스를 적용하는 이유는 유연한 모듈 구조로 애플리케이션 개별 유지/보수를 실현할 수 있다는 것이다. 

 

 

마이크로서비스의 특징

마틴 파울러와 제임스 루이스가 언급한 마이크로서비스의 9가지 특징을 기반으로 설명해보겠다.

1. 서비스를 사용한 컴포넌트화
2. 비즈니스 기능을 기준으로 한 팀 편성
3. 프로젝트가 아닌 제품을 파악해서 개발 및 운영
4. 지능적인 엔드포인트와 단순한 파이프
5. 비중앙집권적인 언어와 툴 선택
6. 비중앙집권적인 데이터 관리
7. 인프라의 자동화
8. 장애와 오류를 전제로 한 설계
9. 선진적인 설계

 

서비스를 사용한 컴포넌트 설계

서비스를 사용한 컴포넌트화는 독립된 컨테이너상에 배포하는 서비스를 개별적으로 교체할 수 있으므로 애플리케이션 변경에 용이하며, 작은 단위의 확장성을 실현할 수 있다.

  모노리스 마이크로서비스
컴포넌트 간 결합도 높다 낮다
애플리케이션 변경 어렵다 쉽다

 

개발/운영 체제

마이크로서비스에서는 하나의 개발/운영 팀이 하나의 서비스를 개발 및 운영한다. 팀 규모는 가능하면 작게 만들되, UI 디자이너, 애플리케이션을 개발하는 소프트웨어 엔지니어, DB 전문가, 운영을 담당하는 사이트 안정성 엔지니어 등으로 구성한다.

아키텍처 스타일로 마이크로서비스와 궁합이 좋은 개발 프로세스는 애자일이다. 운영도 하면서 최종 사용자의 피드백이 있을 때마다 개발을 반복적으로 진행하며, 조금씩 그리고 적시에 애플리케이션 릴리스를 지속하는 방식이다. 

 

개발 환경과 영구 데이터 저장소의 거버넌스

마이크로서비스에서는 프로그래밍 언어나 데이터베이스를 각 개발/운영팀이 선정하게 한다. 따라서 명확한 이유가 있고 각 서비스 개발/운영에 적합한 선택이라면, 서비스마다 다른 프로그래밍 언어나 데이터베이스를 사용할 수도 있다.

이런 상황이 가능한 이유는 마이크로서비스의 서비스가 독립된 프로세스나 컨테이너상에서 실행되고, 각 서비스는 개별 팀에 의해 개발/운영되기 때문이다. 즉, 각 팀과 각 서비스가 독립된 프로젝트나 애플리케이션처럼 움직이므로 서로 다른 프로그래밍 언어나 데이터베이스를 사용해도 기술 및 운영 관점에서 전혀 문제가 없다.

 

인프라 환경 고려 사항

마이크로서비스에서는 인프라 환경 구축, 소프트웨어 컴파일, 빌드, 테스트, 배포 자동화 등의 CD를 권장한다. 자동화는 개발 릴리스 및 운영의 속도를 높이며, 운영 실수를 줄인다. 또한, 테스트가 필요할 때 자동으로 실시해서 시스템의 품질 향상에도 기여할 수 있다.