Microservices 실전 가이드
Microservices의 핵심 개념과 실무 활용
학습 항목
본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.
이미지 로딩 중...
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