-
마이크로서비스 아키텍처STUDY/Docker 2022. 10. 18. 22:09
이전 애플리케이션 구축 방식에서는 모놀리식 아키텍처에 중점을 두었는데, 모놀리식 아키텍처는 애플리케이션에서 구축 가능한 모든 부분이 하나의 애플리케이션에 포함하는 방식이다. 이 방식의 단점은 애플리케이션이 커질수록 새로운 문제를 해결하고 새로운 기능을 추가하는 것이 어려워진다는 것인데, 이를 해결하기 위해 등장한 것이 마이크로서비스 아키텍처이다.
마이크로서비스 아키텍처는 시스템 전체가 하나의 목적을 지향하는 것은 모놀리식 아키텍처와 동일하지만 개별 기능을 하는 작은 서비스를 각각 개발해 연결하는 데 차이가 있다. 애플리케이션을 상호 독립적인 최소 구성 요소로 분할하는 방식으로, 모든 요소가 독립적이며 연동되어 동일한 테스크를 완수한다. 보안, 인증 등과 관련된 기능이 독립된 서비스를 구성하고 있으며 다른 서비스들도 독집적으로 동작할 수 있는 완결된 구조이다.
위의 구성 예시를 보면 각 서비스는 관련된 기능과 데이터베이스를 독립적으로 가지는 구조이다. 각 서비스는 API 게이트워이와 REST API를 이용한 통신 방식으로 사용자의 요청을 전달한다. 서비스 개수는 고정된 것이 아니기 때문에 어떤 서비스가 등록돼 있는지 파악하기 위해 서비스 디스커버리를 사용한다. 또한 수많은 서비스의 내부 통신을 이벤트로 일원화하고 이를 효과적으로 관리하기 위해 별도로 이벤트 버스를 서비스로 구성한다.
장점
- 애플리케이션 구성 요소를 여러가지 프로그래밍 언어로 구축 가능
- 지속적인 개별적 개발 및 배포 스트림 유지 가능
- 확장성이 뛰어난 애플리케이션 구축 가능
- 클라우드 네이티브 서비스로서의 기능 배포 옵션 사용 가능
- 분리 및 느슨한 결합으로 구획화된 업그레이드 및 향상 가능
- 단일 모듈의 장애에 대해 전체 어플리케이션이 크게 영향을 받지 않음.
각 서비스는 서비스를 다른 언어 또는 다른 기술로 작성할 수 있게 하는 표준화된 API를 통해 다른 서비스와 통신한다. 모놀리식 아키텍처보다 복잡도가 높고, 각 서비스가 서로 유기적으로 통신하는 구조로 설계되기 때문에 네트워크를 통한 횟수가 증가해 성능에 영향을 줄 수 있다.
마이크로서비스 기반의 어플리케이션을 배포하는 방법 중 컨테이너 인프라 환경을 이용하는 것이 있다. 컨테이너 인프라 환경은 컨테이너를 중심으로 구성된 인프라 환경으로, 여기서 컨테이너는 하나의 운영 체제 커널에서 다른 프로세스에 영향을 받지 않고 독립적으로 실행되는 프로세스 상태를 의미한다. 이렇게 구현된 컨테이너는 가상화 상태에서 동작하는 프로세스보다 가볍고 빠르게 동작한다. 컨테이너 인프라 환경에서는 컨테이너를 서비스 단위로 포장해 손쉽게 배포하고 확장할 수 있다. 컨테이너 인프라 환경에서 제공하는 컨테이너는 마이크로서비스 아키텍처의 서비스와 1:1로 완벽하게 대응한다.
'STUDY > Docker' 카테고리의 다른 글
Dockerfile (0) 2023.02.22 도커와 도커 명령어 (0) 2023.02.21 컨테이너 (0) 2023.02.20 Docker (0) 2022.11.21 도커와 쿠버네티스 (0) 2022.10.25