본문 바로가기
IT정보&정보처리기사

마이크로서비스(Microservice) 개요

by Technocrat 2024. 3. 5.

마이크로서비스(Microservice)는 클라우드 기반에 적합한 애플리케이션으로 클라우드 네이티브 애플리케이션을 위한 개발/운영 아키텍처 스타일이다. 마이크로서비스 아키텍처는 독립적으로 개발 및 실행되는 소프트웨어 컴포넌트를 여러 개 조합해서 하나의 애플리케이션을 구축하는 소프트웨어 구조이며 위의 소프트웨어 컴포넌트가 서비스이다.

요청을 처리하기 위해 각 서비스는 REST나 메시징으로 통신하는 분산 컴퓨팅 환경을 구성한다.

이를 구현하기 위한 기술에는 컨테이너, 오케스트레이션, REST, 메시징 등이 있으며 기법으로는 데브옵스, 애자일 개발 프로세스, CI/CD, 도메인 주도 설계 등이 있다.

마이크로서비스 아키텍처의 장점은 각각의 마이크로서비스 단위로 릴리스 및 변경이 가능하고 스케일아웃이나 스케일인이 마이크로서비스단위로 가능하다. 즉 애플리케이션 개발과 운영, 인프라의 유연성이 증대된다. 게다가 서킷브레이커를 도입하면 장애 영향범위를 최소화 할 수 있다. CI/CD를 통해 잦은 배포도 가능하다.

반면에 단점도 있는데 서비스간 통신이 증대되고 데이터도 분산 배치 되므로 DB간 일관성 유지나 동기화 기법, 운영 및 감시 구조를 정비해야 한다. 

 

마이크로서비스를 처음 정의 했다고 알려지는 마틴 파울러와 제임스 루이스는 마이크로서비스의 아홉가지 특징을 도출했다. 모두 반영해야 하는 게 아니라 필요에 따라 선택적으로 적용할 수 있다.

1) 서비스를 사용한 컴포넌트화

2) 비즈니스 기능을 기준으로 팀 편성

3) 프로젝트가 아닌 제품을 파악해서 개발 및 운영

4) 지능적인 앤드포인트와 단순한 파이프라인

5) 비중앙집권적인 언어와 툴 선택

6) 비중앙집권적인 데이터 관리

7) 인프라의 자동화

8) 장애와 오류를 전제로 한 설계

9) 선진적인 설계

 

독립된 컨테이너 상에 배포되는 서비스는 개별적으로 교체할 수 있으므로 애플리케이션 변경이 용이하고 확장성을 가질 수 있다. 기존의 모노리식은 애플리케이션이 하나의 거대한 패키지로 만들어져 하나로 관리된다. 따라서 애플리케이션의 일부만 수정하려고 해도 전체를 컴파일, 빌드, 테스트, 배포해야 했다. 마이크로서비스간 통신은 REST 나 경량메시징을 사용하여 느슨한 결합을 갖게 된다.

 

마이크로서비스 아키텍처에서는 하나의 개발/운영 팀이 하나의 서비스를 개발 및 운영한다. 팀이 자율적으로 개발 및 운영할 수 있도록 인원구성을 하는데(UI, 백앤드 개발자, DB전문가, 운영자 등) 규모는 가급적 작게 만든다. 

이러한 팀 편성 지침을 콘웨이 법칙이라고 하는데 IT시스템의 구조는 프로젝트 체제를 반영한다는 것이다. 

마이크로서비스 아키텍처와 잘 맞는 개발 프로세스는 애자일이다. 운영을 하다가 사용자의 피드백에 따라 개발을 반복적으로 진행하며 자주 릴리즈를 하는 방식이다. 

마이크로서비스 아키텍처에서는 프로그래밍 언어나 데이터베이스를 각 개발/운영팀이 선정한다. 그러다 보면 각 서비스마다 다른 언어나 데이터베이스를 사용 할 수도 있다. 

또한 마이크로서비스 아키텍처에서는 인프라 환경 구축, 소프트웨어 컴파일, 빌드, 테스트, 배포 자동화를 통해 개발 릴리스의 속도를 높이는 것을 권장한다. 즉 오케스트레이션, CI/CD 체계를 구축하는 것이 좋다.

 

이제까지 내용을 보자면 마이크로서비스 아키텍처를 적용해야 하는 시스템은 작고 단순한 시스템이 아닌 크고 복잡한 시스템이다. 크고 복잡한 시스템은 개발 및 통합의 일관성을 유지하기 힘들고 대규모 개발, 운영 팀을 관리하는 것도 어렵다. 따라서 거대하고 복잡한 시스템을 도메인 영역으로 세분화하여 서비스로 분류하고 서비스 단위로 독립적으로 유연하게 설계, 개발, 운영하는 것이다.  

 

 

 

'IT정보&정보처리기사' 카테고리의 다른 글

마이크로서비스 아키텍처의 데이터베이스  (2) 2024.03.08
마이크로서비스의 레이어 아키텍처  (0) 2024.03.06
컨테이너(Cotainer)  (0) 2024.03.04
Cloud Native Computing  (0) 2024.03.03
CNCF  (0) 2024.02.26