반응형
마이크로서비스 패턴은 애플리케이션을 여러 개의 독립적인 서비스로 분리하여 구축하고 배포하는 아키텍처 스타일입니다.
각 서비스는 고유의 비즈니스 기능을 담당하며 독립적으로 배포, 확장, 유지보수가 가능합니다.
-
독립적 배포
각 서비스는 다른 서비스와 분리되어 독립적으로 배포 가능합니다. -
작은 단위
하나의 서비스는 특정 비즈니스 도메인을 담당하며, 비교적 작은 코드베이스로 관리됩니다. -
다양한 기술 스택 허용
각 서비스는 독립적이므로 서로 다른 프로그래밍 언어나 데이터베이스를 사용할 수 있습니다. -
느슨한 결합
서비스 간의 통신은 보통 HTTP REST API, 메시지 큐, 또는 gRPC를 통해 이루어집니다. -
확장성
개별 서비스만 스케일링하거나 업그레이드할 수 있습니다.
-
API Gateway Pattern
- 모든 클라이언트 요청은 API Gateway를 통해 처리됩니다.
- API Gateway는 요청을 적절한 마이크로서비스로 라우팅합니다.
-
Database per Service
- 각 서비스는 독립적인 데이터베이스를 가집니다.
- 데이터 공유는 서비스 간 API를 통해 이루어집니다.
-
Event Sourcing
- 데이터 변경 내역을 이벤트로 저장합니다.
- 서비스는 이벤트를 구독해 데이터 상태를 동기화합니다.
-
Service Discovery
- 서비스가 동적으로 배포되므로, 클라이언트는 서비스의 위치를 알아야 합니다.
- Consul, Eureka 같은 도구를 사용합니다.
javascript
const express = require('express');
const app = express();
app.use(express.json());
const users = [{ id: 1, name: 'Alice' }];
app.get('/users', (req, res) => {
res.json(users);
});
app.listen(3001, () => {
console.log('User service running on port 3001');
});
javascript
const express = require('express');
const app = express();
app.use(express.json());
const orders = [{ id: 1, userId: 1, product: 'Book' }];
app.get('/orders', (req, res) => {
res.json(orders);
});
app.listen(3002, () => {
console.log('Order service running on port 3002');
});
javascript
const express = require('express');
const axios = require('axios');
const app = express();
app.get('/users', async (req, res) => {
const response = await axios.get('http://localhost:3001/users');
res.json(response.data);
});
app.get('/orders', async (req, res) => {
const response = await axios.get('http://localhost:3002/orders');
res.json(response.data);
});
app.listen(3000, () => {
console.log('API Gateway running on port 3000');
});
python
from flask import Flask, jsonify
app = Flask(__name__)
users = [{"id": 1, "name": "Alice"}]
@app.route('/users', methods=['GET'])
def get_users():
return jsonify(users)
if __name__ == "__main__":
app.run(port=5001)
dockerfile
FROM python:3.9-slim
WORKDIR /app
COPY user_service.py /app
RUN pip install flask
CMD ["python", "user_service.py"]
yaml
version: '3.8'
services:
user-service:
build:
context: .
ports:
- "5001:5001"
- 서비스별 독립적인 확장 가능.
- 유지보수성과 개발 속도 향상.
- 기술 스택 다양성 수용.
- 서비스 간 통신 복잡도 증가.
- 배포와 테스트가 복잡해질 수 있음.
- 데이터 일관성 문제 발생 가능.
이 아키텍처는 대규모 애플리케이션에서 매우 유용하지만, 초기 설계와 구축 시 고려해야 할 점이 많습니다. 필요에 따라 적절히 사용해야 합니다! 😊
- 패턴 목록은 다음 글을 참고하시기 바랍니다.
728x90
반응형
'Designing Software' 카테고리의 다른 글
이벤트 소싱 (Event Sourcing) (0) | 2024.11.19 |
---|---|
이벤트 소싱(Event Sourcing) 패턴 (0) | 2024.11.17 |
레이어드 패턴 (Layered Pattern) (0) | 2024.11.17 |
방문자(Visitor) 패턴 (0) | 2024.11.17 |
템플릿 메서드(Template Method) 패턴 (0) | 2024.11.17 |