728x90
MSA란?
MSA는 "Micro Services Architecture"의 약자로 애플리케이션을 작고 독립적인 서비스 단위로 분할하고, 이러한 서비스들을 조합하여 하나의 애플리케이션을 구축하는 아키텍처 스타일이다.
MSA 활용
MSA는 대규모 애플리케이션 개발에 적합하다.
예를 들면, 인터넷 서비스, 전자상거래, 은행, 보험 등과 같은 대규모 시스템에서 많이 사용된다.
MSA는 각각의 서비스를 독립적으로 배포하고 확잘할 수 있도록 한다.
따라서 서비스 간의 의존성을 최소화하고, 각각의 서비스를 독립적으로 개발하고 배포할 수 있다.
MSA 예시 코드 (Node.js)
[server1.js]
const express = require('express');
const app = express();
app.get('/api/service1', (req, res) => {
res.send('This is Service 1');
});
app.listen(3001, () => {
console.log('Service 1 listening on port 3001');
});
[server2.js]
const express = require('express');
const app = express();
app.get('/api/service2', (req, res) => {
res.send('This is Service 2');
});
app.listen(3002, () => {
console.log('Service 2 listening on port 3002');
});
[client.js]
const axios = require('axios');
axios.get('http://localhost:3001/api/service1')
.then(res => {
console.log(res.data);
return axios.get('http://localhost:3002/api/service2');
})
.then(res => {
console.log(res.data);
})
.catch(err => {
console.error(err);
});
server1.js는 "/api/service1" 엔드포인트에서 GET 요청을 처리하며, server2는 "/api/service2" 엔드포인트에서 GET 요청을 처리한다. 이 두 서비스는 서로 독립적이며, 별도의 서버에서 실행된다.
MSA 장단점
장점
- 더 작은 단위로 서비스를 분리하여 개발하므로, 서비스 간 의존성이 낮아지고, 유연하고 확장성이 높은 아키텍처를 구성할 수 있다.
- 서비스마다 독립적인 배포를 수행할 수 있으므로, 전체 시스템을 재배포하지 않고도 개별 서비스의 수정 사항을 빠르게 반영할 수 있다.
- 서비스 단위로 개발하므로, 팀별로 독립적인 업무를 수행할 수 있으며, 서비스 간 인터페이스를 명확하게 정의함으로써 의사소통이 원할해진다.
단점
- 서비스 간 통신에 대한 관리가 어렵다. 서비스 간 통신 시 발생하는 네트워크 지연, 실패 등에 대한 대처가 필요하며, 이를 관리하기 위한 툴링이나 프레임워크를 사용해야 한다.
- 분산 시스템이므로, 전체 시스템의 복잡도가 높아지며, 이에 따른 운영 및 관리 비용이 높아질 수 있다.
- 서비스 간 데이터 일관성 유지에 대한 책임이 개발자에게 더 크게 부여된다. 각 서비스에서 데이터의 소유권과 일관성 유지를 위한 방법을 명확하게 정의해야 한다.
MSA를 써야하는 이유
MSA를 꼭 써야하는 이유는 없다.
MSA는 일정 수준의 시스템 규모와 복잡도, 팀 규모, 개발 프로세스 등 특정한 상황에서 적합한 아키텍처이다.
MSA는 분산 시스템을 구현하는 데 필요한 도구와 프레임워크를 제공하며, 이를 이용하여 서비스 간 독립성과 유연성이 높은 아키텍처를 구성할 수 있다.
따라서, MSA를 적용할지 여부는 조직의 상황과 목표, 개발 팀의 역량 등을 고려하여 결정해야 한다.
MSA가 적합하지 않은 상황에서는 불필요한 복잡도와 추가적인 비용이 발생할 수 있으므로, 조직의 상황에 맞는 적절한 아키텍처를 선택하는 것이 중요하다.
728x90
'개발 > 정리' 카테고리의 다른 글
[정리] 개발 방법론 (Water Fall vs Agile) (0) | 2023.04.07 |
---|---|
[정리] PWA란 무엇인가? ( + serviceWorker) (0) | 2023.04.07 |
[패턴] 자주 사용되는 아키텍처패턴 4가지 (0) | 2022.12.19 |
[정리] 해싱과 암호화 (0) | 2022.12.12 |
[Github] 기초 및 설정 (0) | 2022.06.22 |