이번엔 MSA 아키텍처로 토이 프로젝트를 만들어 보기 전에
MSA 아키텍처가 뭔지 개념을 알고 가도록 해보자
1. MSA 란?
In short, the microservice architectural style [1] is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery. There is a bare minimum of centralized management of these services, which may be written in different programming languages and use different data storage technologies.
MSA 란 각각 자체의 프로세스로 실행이 되고 HTTP 리소스 API 와 통신하는 작은 서비스의 집합으로서
단일 어플리케이션을 개발 하는 접근 방식이라고 할 수 있다.
서로 다른 프로그래밍 언어 또는 다른 데이터 저장소들로 쓰여진 서비스들을 최소한의 중앙 집중식 관리로 구현을 하는것 이라고 할 수 있다.
2. Monolitic Server vs MSA
기존 Monolitic Server 에서는 요청을 처리하기 위해서 하나의 프로세스에서 모든 논리가 실행되었다.
단일 어플리케이션에서는 Monolitic Server 가 좋은방법이었지만,
많은 어플리케이션이 구현되면서 불편한 점들이 생겼다.
작은 부분이 변경 이되도 전체를 배포해야되는점
scaling(확장)을 하려고 할때 , 한 파트를 scaling 할 수 없고 전체를 해야하는 점
이러한 단점들로 인해 MSA 가 생겨나게 되었다
서비스들의 모임으로 어플리케이션을 구축하는 것..
각 서비스가 독립적으로 배치가 가능하고 , 확장이 가능해졌다.
심지어 각 서비스는 서로 다른 프로그래밍 언어를 쓸 수 있게 되었다.
각 서비스는 각각 다른 팀에서 관리 할 수 있음
3. MSA 의 특징
---Componentization via Services
서비스들을 통한 구성요소화
- 여기서 구성요소의 대한 정의는 독립적으로 대체 가능하고 업그레이드 가능한 소프트웨어 단위라는 것
MSA 는 라이브러리가 아닌 서비스들로 구성요소를 갖추는데
그 이유는 라이브러리를 통해 만들경우엔
라이브러리가 변경되었을때 쓰고있는 모든 응용 프로그램들을 배포 해야하지만
서비스단위로 구성할 경우에는 절대적이지는 않지만 단일 서비스의 변경만으로 끝낼 수 있다.
---Smart endpoints and dumb pipes
똑똑한 endPoint와 멍청한 전달
이해한 내용으로는
통신에 있어서 smart 한 방법을 사용하지는 않는다 로 이해를 했다.
통신에 2가지 방법이 있는데,
HTTP request-response 를 이용하는 방법과
lightweight messaging (RabbitMQ) 같은 방법을 사용하는 방법이 있다.
---Decentralized Data Management
분산형 데이터 관리
데이터를 필요한 단위로 분산 시켜서 서비스 별로 사용한다.
여기서 데이터를 한번에 조회하기 어려워 지고 트랜잭션의 복잡도가 늘어나는 단점이 있게된다.
이외에도 여러 특징들이 있는데 시간이 될때 읽어보도록 하자
참고.
https://martinfowler.com/articles/microservices.html
Microservices
Defining the microservices architectural style by describing their nine common characteristics
martinfowler.com
MSA 제대로 이해하기 -(1) MSA의 기본 개념
lego-708086_1920.jpg 마이크로 서비스 아키텍쳐를 한마디로 다음과 같이 표현할 수 있습니다. "하나의 큰 어플리케이션을 여러개의 작은 어플리케이션으로 쪼개어 변경과 조합이 가능하도록 만든 아키텍쳐" 이것은 마치 레고놀이와 비슷하다고 볼 수 있는데요, 작은 레고블록(Microservice) 하나하나를 붙여 어떠한 큰 결과물을 만드는 형태...
velog.io