MSA(Microservices Architecture)는 소프트웨어를 개발하는 방법론 중 하나로, 애플리케이션을 작은 독립적인 기능 단위인 마이크로서비스로 분해하는 아키텍처 스타일이다.
확장 가능한 서비스를 개발하고, 더 빠른 배포와 리소스 관리를 위해서 사용되는 MSA에 대해서 알아보고 기록을 남겨보고자 하였다.
🍅 MSA를 통해서 애플리케이션을 작은 조각으로 분할하여 개별적으로 개발, 배포, 확장할 수 있다.
- MSA의 핵심 아이디어는 각 마이크로서비스가 하나의 특정 기능을 수행하도록 설계되며, 이들은 서로 독립적으로 실행될 수 있다.
- 마이크로서비스는 작은 규모의 독립적인 서비스로 구성되며, 별도의 데이터베이스, 통신 메커니즘, 프로세스 등을 가지고 있을 수 있다.
- 각 마이크로서비스는 표준화된 API(응용 프로그래밍 인터페이스)를 통해 상호 작용하며, 이를 통해 서로간에 통신하고 데이터를 교환한다.
- 각 서비스들은 느슨하게 결합되며 서비스의 모임으로 구조화되는 서비스 지향 아키텍처(SOA) 스타일의 일종으로 간주된다.
MSA의 장점 ✨
- 모듈화 및 유연성
마이크로서비스는 각각 독립적으로 개발되고 배포될 수 있으므로, 시스템 전체의 유연성과 확장성이 향상된다. 특정 서비스의 변경이 다른 서비스에 영향을 미치지 않고 이루어질 수 있다. - 독립적인 배포
개별적인 마이크로서비스 단위로 배포가 가능하므로, 전체 시스템의 배포가 간소화되고 서비스의 개선과 확장이 빠르게 이루어질 수 있다. - 기술 다양성
MSA는 다양한 기술 스택을 사용할 수 있는 유연성을 제공한다. 각 마이크로서비스는 독립적으로 개발되므로, 최적의 기술 선택이 가능하다. - 장애 격리 및 회복성
MSA는 각각의 마이크로서비스가 독립적으로 실행되기 때문에, 하나의 서비스의 장애가 다른 서비스에 영향을 미치지 않을 수 있다. 또한, 장애가 발생한 서비스를 빠르게 회복하고 대체할 수 있다.
MSA의 한계 🥲
- 분산 시스템 복잡성
여러 마이크로서비스가 상호 작용하므로, 통신, 보안, 데이터 일관성 등 분산 시스템의 복잡성이 증가할 수 있다. - 테스트 및 디버깅의 어려움
다양한 마이크로서비스가 동시에 실행되기 때문에 테스트 및 디버깅이 어려울 수 있다. - 팀의 조직 및 관리
MSA는 서비스 단위로 조직을 구성하고 운영해야 하므로, 조직의 구조와 관리 방법에 대한 새로운 접근이 필요할 수 있다.
MSA는 큰 규모의 애플리케이션을 더 작고 관리 가능한 단위로 분할하여 개발 및 운영할 수 있는 장점을 제공한다. 그러나 애플리케이션의 특성과 요구사항을 고려하여 아키텍처 선택을 결정하는 것이 중요하다.
🥒 JavaScript를 사용한 간단한 MSA 예제
다음은 Express.js 프레임워크를 사용하여 간단한 마이크로서비스를 구현하는 예제이다.
서비스 1 - 사용자 관리 서비스
// user-service.js
const express = require('express');
const app = express();
const port = 3001;
app.get('/users', (req, res) => {
// 사용자 목록 반환
const users = [
{ id: 1, name: 'John Doe' },
{ id: 2, name: 'Jane Smith' },
];
res.json(users);
});
app.listen(port, () => {
console.log(`User service listening at http://localhost:${port}`);
});
서비스 2 - 주문 관리 서비스
// order-service.js
const express = require('express');
const app = express();
const port = 3002;
app.get('/orders', (req, res) => {
// 주문 목록 반환
const orders = [
{ id: 1, product: 'Product A' },
{ id: 2, product: 'Product B' },
];
res.json(orders);
});
app.listen(port, () => {
console.log(`Order service listening at http://localhost:${port}`);
});
위의 코드는 두 개의 간단한 마이크로서비스를 구현한다.
`user-service`는 `/users` 엔드포인트를 통해 사용자 목록을 반환하고, `order-service`는 `/orders` 엔드포인트를 통해 주문 목록을 반환다.
두 서비스는 각각 별도의 포트(3001, 3002)에서 실행된다.
따라서, 각 서비스는 독립적으로 실행되고, 필요에 따라 개별적으로 개발, 배포, 확장할 수 있다.
이 예제는 MSA의 기본 개념을 보여주기 위한 간단한 예제이며, 복잡한 시스템에서는 서비스 간 통신, 데이터 동기화, 오류 처리 등의 추가 기능이 필요할 수 있다.
- 참고 자료
https://ko.wikipedia.org/wiki/%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4
마이크로서비스 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 마이크로서비스(microservice)는 애플리케이션을 느슨하게 결합된 서비스의 모임으로 구조화하는 서비스 지향 아키텍처(SOA) 스타일의 일종인 소프트웨어 개발 기
ko.wikipedia.org
'기타' 카테고리의 다른 글
nvm 대신 asdf 사용하기 (0) | 2023.08.11 |
---|---|
SemVer에 대해서 알아보기 (0) | 2023.08.06 |
TCP/IP Suite에 대해서 알아보자 (0) | 2023.07.27 |
Nginx를 사용하면 어떤 장점이 있을까? (express.js & React.js) (0) | 2023.07.21 |
비트코인 지갑 주소에 대해서 (p2pkh, p2sh, p2wpkh, p2wsh) (0) | 2023.07.19 |