Microservices 실전 가이드
Microservices의 핵심 개념과 실무 활용
학습 항목
이미지 로딩 중...
Microservices 실전 프로젝트 가이드
마이크로서비스 아키텍처의 핵심 개념부터 실제 구현까지 초급 개발자를 위한 완벽 가이드입니다. API Gateway, 서비스 간 통신, 데이터베이스 분리 등 실전 예제로 배웁니다.
들어가며
이 글에서는 Microservices 실전 프로젝트 가이드에 대해 상세히 알아보겠습니다. 총 12가지 주요 개념을 다루며, 각각의 개념에 대한 설명과 실제 코드 예제를 함께 제공합니다.
목차
- API_Gateway_기본_구조
- User_Service_구현
- Order_Service_구현
- 서비스_간_HTTP_통신
- 이벤트_기반_통신
- 이벤트_구독_처리
- Service_Discovery
- 헬스_체크_구현
- Docker_컨테이너화
- Docker_Compose_오케스트레이션
- 환경별_설정_관리
- 에러_핸들링_미들웨어
1. API_Gateway_기본_구조
개요
API Gateway는 모든 클라이언트 요청의 진입점으로, 라우팅과 인증을 담당합니다.
코드 예제
const express = require('express');
const app = express();
app.use('/users', (req, res) => {
// User 서비스로 프록시
proxy.web(req, res, { target: 'http://user-service:3001' });
});
app.listen(3000);
설명
Express를 사용해 API Gateway를 구성하고, 요청을 각 마이크로서비스로 라우팅합니다.
2. User_Service_구현
개요
사용자 관리를 담당하는 독립적인 마이크로서비스입니다.
코드 예제
const express = require('express');
const app = express();
app.get('/users/:id', async (req, res) => {
const user = await User.findById(req.params.id);
res.json(user);
});
app.listen(3001);
설명
User 서비스는 독립적으로 실행되며 사용자 데이터를 관리합니다.
3. Order_Service_구현
개요
주문 처리를 담당하는 별도의 마이크로서비스입니다.
코드 예제
const express = require('express');
const app = express();
app.post('/orders', async (req, res) => {
const order = await Order.create(req.body);
await publishEvent('order.created', order);
res.json(order);
});
app.listen(3002);
설명
Order 서비스는 주문을 생성하고 이벤트를 발행하여 다른 서비스에 알립니다.
4. 서비스_간_HTTP_통신
개요
마이크로서비스들이 HTTP를 통해 서로 통신하는 방법입니다.
코드 예제
const axios = require('axios');
async function getUserData(userId) {
const response = await axios.get(
`http://user-service:3001/users/${userId}`
);
return response.data;
}
설명
axios를 사용하여 다른 서비스의 API를 호출하고 데이터를 가져옵니다.
5. 이벤트_기반_통신
개요
메시지 큐를 사용한 비동기 이벤트 기반 통신 방식입니다.
코드 예제
const amqp = require('amqplib');
async function publishEvent(event, data) {
const connection = await amqp.connect('amqp://rabbitmq');
const channel = await connection.createChannel();
channel.publish('events', event, Buffer.from(JSON.stringify(data)));
}
설명
RabbitMQ를 통해 이벤트를 발행하여 서비스 간 느슨한 결합을 유지합니다.
6. 이벤트_구독_처리
개요
다른 서비스에서 발행한 이벤트를 구독하고 처리합니다.
코드 예제
async function subscribeToEvents() {
const connection = await amqp.connect('amqp://rabbitmq');
const channel = await connection.createChannel();
channel.consume('order.created', (msg) => {
const order = JSON.parse(msg.content);
handleOrderCreated(order);
});
}
설명
이벤트를 구독하여 주문 생성 시 자동으로 처리 로직을 실행합니다.
7. Service_Discovery
개요
동적으로 서비스의 위치를 찾아주는 서비스 디스커버리 패턴입니다.
코드 예제
const consul = require('consul')();
async function getServiceUrl(serviceName) {
const services = await consul.health.service(serviceName);
const service = services[0].Service;
return `http://${service.Address}:${service.Port}`;
}
설명
Consul을 사용하여 서비스의 IP와 포트를 동적으로 찾아냅니다.
8. 헬스_체크_구현
개요
서비스의 상태를 모니터링하기 위한 헬스 체크 엔드포인트입니다.
코드 예제
app.get('/health', async (req, res) => {
const dbStatus = await checkDatabase();
res.json({
status: dbStatus ? 'healthy' : 'unhealthy',
timestamp: new Date()
});
});
설명
헬스 체크를 통해 서비스와 데이터베이스의 상태를 확인합니다.
9. Docker_컨테이너화
개요
마이크로서비스를 Docker 컨테이너로 패키징합니다.
코드 예제
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3001
CMD ["node", "server.js"]
설명
Dockerfile을 사용하여 서비스를 독립적인 컨테이너로 만듭니다.
10. Docker_Compose_오케스트레이션
개요
여러 마이크로서비스를 함께 실행하기 위한 Docker Compose 설정입니다.
코드 예제
version: '3'
services:
user-service:
build: ./user-service
ports: ["3001:3001"]
order-service:
build: ./order-service
ports: ["3002:3002"]
설명
Docker Compose로 모든 서비스를 한 번에 실행하고 관리합니다.
11. 환경별_설정_관리
개요
개발, 스테이징, 프로덕션 환경별로 다른 설정을 관리합니다.
코드 예제
const config = {
development: {
dbUrl: 'mongodb://localhost:27017/dev'
},
production: {
dbUrl: process.env.DB_URL
}
}[process.env.NODE_ENV || 'development'];
설명
환경 변수를 통해 각 환경에 맞는 설정을 자동으로 로드합니다.
12. 에러_핸들링_미들웨어
개요
마이크로서비스의 공통 에러 처리 로직입니다.
코드 예제
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(err.status || 500).json({
error: err.message,
service: 'user-service'
});
});
설명
중앙 집중식 에러 핸들러로 모든 에러를 일관되게 처리합니다.
마치며
이번 글에서는 Microservices 실전 프로젝트 가이드에 대해 알아보았습니다. 총 12가지 개념을 다루었으며, 각각의 사용법과 예제를 살펴보았습니다.
관련 태그
#Microservices #API Gateway #Service Communication #Docker #REST API