마이크로 서비스란?
- 대규모 애플리케이션을 개발할 때 각각의 담당 영역을 가진 소규모의 독립적인 구성요소로 구분하여 개발하는 방식
- 사용자의 요청을 처리하기 위해 여러 내부 마이크로 서비스를 호출하여 응답을 작성한다. (주로 API 형식)
- 수천 개의 독립적인 웹 표준, 언어, 데이터베이스, 개발자 툴로 확인되는 웹 서버의 구성 요소들을 의미하며 개발 회사, 오픈 소스 클라우드에서 제공되는 소프트웨어나 앱 또한 구성요소이다.
용도
- 주로 애플리케이션의 개발 속도를 높이기 위해서 사용하는 방식
- 웹사이트 마이그레이션 - 모놀리식 플랫폼에서 호스팅되는 복잡한 웹사이트를 클라우드, 컨테이너 기반으로 마이그레이션 한다.
- 미디어 콘텐츠 - 이미지와 통영상을 객체 스토리지 저장하여 웹, 모바일에서 제공
- 트랜잭션 및 인보이스 - 결체, 주문을 독립적인 서비스 단위로 구분하여 인보이스(거래내역서)가 발행 되지 않아도 결제가 가능
- 데이터 처리 - 기존의 데이터 처리를 위해 클라우드를 확장하여 지원 가능
수행 방식
- 기본적으로 OS, Network, DB 관리 플랫폼에서 제공하는 것 이상으로 웹 서버에서 사용 가능한 기능을 확장하는 방식으로 이루어져있다.
- 프로젝트 분리 단위 방법 - 사용하는 DB를 분리하여 그에 맞춰서 서비스를 분리가 대표적이다.
- 여러개의 가상머신으로 각각의 서비스를 컨테이너화 하여 배포하는 형식을 취한다.
마이크로 서비스
장점
- 기능별 개발하며 서비스 단위 별로 작업을 할 수 있다.
- 새로운 기능과 수정사항은 마이크로 서비스 하나만 빌드, 배포로 빠르게 가능하다.
- 기능별로 기술, 언어를 선택 사용하여 개발이 쉽다.
- 기능의 오류는 기능을 가지고 있는 마이크로 서비스만 수정한다면 정상화 된다.
단점
- 분산되어 있어 관리, 모니터링이 어렵다.
- 서로를 호출하며 서비스가 진행되어서 개발이 까다롭다.
- 통신관련 오류가 비교적 쉽게 발생할 수 있다.
- End to End 테스트를 위해서는 많은 마이크로 서비스를 구동해야하기 때문에 까다롭다.
모놀리식
장점
- 개발되어있는 환경이 같다 복잡도가 낮다.
- 쉽게 같은 서버 환경을 구축 가능 (같은 앱으로 하나 더 만들면되기 때문에)
- End to End 테스트가 용이
단점
- 프로젝트 하나의 규모가 커 빌드, 배포 구동 시간이 오래걸린다.
- 하나의 수정 사항으로도 전체를 빌드, 배포해야한다.
- 모든 코드가 같이 있어 구조를 알기 어렵고유지 보수가 어렵다.
- 하나의 오류가 전체에 영향을 끼친다.
- 기능별로 다른 기술, 언어 등을 선택하기 어렵다.
서비스 지향(SOA)와 마이크로 서비스의 차이
기능별로 분산하여 개발하고 통신하여 서비스를 제공한다는 점이 매우 유사하다.
두 아키텍처의 큰 차이점은 SOA는 공통된 언어로 개발하고 ESB를 사용하여 통신을 한다.
마이크로 서비스는 API로 통신을 하여 각 기능간의 언어적으로 제약이 없다.
ESB - 통신을 위해 서비스들을 하나로 묶는 미들웨어
Google의 관련 제품 및 서비스
- Kubernates - 컨테이너화 된 앱을 자동으로 배포, 스케일링, 관리 해주는 시스템
- Cloud Run - Serverless 한 서버 = 서버를 관리 운영의 필요가 없다. 인프라적인 부분을 알아서 제어 실질 서비스만 서버에 올려 사용하면 모든 것은 자동화
- Cloud SQL - DB 관리 서비스 (AWS의 RDS랑 비슷한 느낌)
- Anthos - 앱 관리, 운영에 초점을 둔 서비스
참고 자료
- https://cloud.google.com/learn/what-is-microservices-architecture?hl=ko
- https://www.vmware.com/kr/topics/glossary/content/microservices.html
- 회사별 구축사례 블로그(netfilx, bingle, sk planet, payco)
- https://www.redhat.com/ko/topics/cloud-native-apps/what-is-service-oriented-architecture
- https://cloud.google.com/architecture/microservices-architecture-interservice-communication?hl=ko
728x90
'주제 정리' 카테고리의 다른 글
[운영체제] 블로킹 vs 논블로킹, 동기 비동기 (0) | 2021.09.16 |
---|---|
[운영체제] Lock의 종류 (0) | 2021.08.26 |
[JAVA] HashSet (0) | 2021.08.13 |
[JAVA] HashTable, HashMap (0) | 2021.08.12 |
Object 객체 탐구 (0) | 2021.08.07 |