티스토리 뷰
웹 개발 실무 기술 A to Z # 25 - 마이크로서비스 아키텍처(MSA) 구축 전략: API Gateway, 서비스 디스커버리, 데이터 분산
octo54 2025. 2. 25. 16:09웹 개발 실무 기술 A to Z
현대적인 웹 애플리케이션은 대규모 트래픽 처리와 유지보수 용이성을 위해 마이크로서비스 아키텍처(MSA)를 채택하는 경우가 많습니다.
✔️ API Gateway → 서비스 간 요청을 효율적으로 관리하는 진입점
✔️ 서비스 디스커버리 → 동적으로 서비스 위치를 찾고 로드 밸런싱 수행
✔️ 데이터 분산 및 메시징 시스템 → 서비스 간 데이터 교환을 최적화
이번 글에서는 마이크로서비스 아키텍처(MSA)를 구축하는 전략과 핵심 기술을 설명하겠습니다.
1. 마이크로서비스 아키텍처(MSA)란?
✔️ 기능별로 독립적인 서비스(마이크로서비스)로 나누어 개발 및 운영
✔️ 각 서비스는 개별적으로 배포, 확장, 유지보수 가능
✔️ Netflix, Amazon, Uber 등 대규모 서비스에서 사용 중
✅ MSA를 적용하면 대규모 애플리케이션을 효율적으로 운영 가능!
2. API Gateway – 마이크로서비스의 진입점
2-1. API Gateway란?
✔️ 모든 클라이언트 요청을 중앙에서 관리
✔️ 서비스 간 라우팅, 로드 밸런싱, 인증, 모니터링 기능 제공
✔️ Kong, Nginx, Express Gateway, AWS API Gateway 등이 대표적인 솔루션
2-2. Express.js 기반 API Gateway 구축
(1) Express API Gateway 설정
npm install express-http-proxy express
(2) API Gateway 코드 (gateway.js)
const express = require("express");
const proxy = require("express-http-proxy");
const app = express();
app.use("/users", proxy("http://localhost:4000"));
app.use("/orders", proxy("http://localhost:5000"));
app.listen(3000, () => console.log("API Gateway running on port 3000"));
✅ API Gateway를 활용하면 마이크로서비스 요청을 한 곳에서 관리 가능!
3. 서비스 디스커버리 – 마이크로서비스의 자동 탐색
3-1. 서비스 디스커버리란?
✔️ 마이크로서비스는 동적으로 실행되므로, 고정된 IP 주소를 사용할 수 없음
✔️ 서비스 디스커버리 시스템을 활용하여 각 서비스의 위치를 자동으로 탐색
✔️ Eureka, Consul, Kubernetes Service Discovery 등 다양한 솔루션 활용 가능
3-2. Consul을 활용한 서비스 디스커버리
(1) Consul 설치 및 실행
docker run -d --name=consul -p 8500:8500 consul
(2) 마이크로서비스 등록 (service.json)
{
"service": {
"name": "users-service",
"port": 4000,
"check": {
"http": "http://localhost:4000/health",
"interval": "10s"
}
}
}
(3) Consul에 서비스 등록
curl --request PUT --data @service.json http://localhost:8500/v1/agent/service/register
✅ Consul을 활용하면 마이크로서비스의 위치를 자동으로 탐색 가능!
4. 마이크로서비스 간 데이터 교환 – 메시징 시스템 활용
4-1. 메시징 시스템이 필요한 이유
✔️ 마이크로서비스 간 직접 HTTP 요청을 보내면 서비스 간 강한 결합 발생
✔️ RabbitMQ, Kafka 같은 메시징 시스템을 사용하면 비동기 통신 가능
✔️ 트래픽 증가 시에도 안정적인 데이터 전송 가능
4-2. Kafka를 활용한 메시징 시스템 구축
(1) Kafka 설치 및 실행
docker run -d --name zookeeper -p 2181:2181 wurstmeister/zookeeper
docker run -d --name kafka -p 9092:9092 --link zookeeper wurstmeister/kafka
(2) Kafka 프로듀서 (데이터 전송)
const { Kafka } = require("kafkajs");
const kafka = new Kafka({ clientId: "my-app", brokers: ["localhost:9092"] });
const producer = kafka.producer();
async function sendMessage() {
await producer.connect();
await producer.send({
topic: "orders",
messages: [{ value: "New Order Created" }],
});
await producer.disconnect();
}
sendMessage();
(3) Kafka 컨슈머 (데이터 수신)
const consumer = kafka.consumer({ groupId: "order-group" });
async function receiveMessages() {
await consumer.connect();
await consumer.subscribe({ topic: "orders", fromBeginning: true });
await consumer.run({
eachMessage: async ({ message }) => {
console.log(`Received order message: ${message.value.toString()}`);
},
});
}
receiveMessages();
✅ Kafka를 활용하면 마이크로서비스 간 비동기 데이터 교환 가능!
5. 마이크로서비스 아키텍처 적용 전후 비교
5-1. 적용 전
- 모놀리식(Monolithic) 아키텍처 → 모든 기능이 하나의 코드베이스에서 실행됨
- 서비스 확장 어려움 → 트래픽 증가 시 특정 기능만 확장할 수 없음
- 장애 발생 시 전체 서비스 다운
5-2. 적용 후
✔️ API Gateway 도입 → 마이크로서비스 간 요청을 중앙에서 관리
✔️ 서비스 디스커버리 적용 → 동적으로 실행되는 서비스 위치 자동 탐색
✔️ Kafka 메시징 시스템 활용 → 서비스 간 비동기 데이터 교환 가능
✅ 마이크로서비스 아키텍처를 적용하면 확장성과 유지보수성이 향상됨!
6. 마무리 및 다음 글 예고
이번 글에서는 API Gateway, 서비스 디스커버리, 메시징 시스템을 활용한 마이크로서비스 아키텍처(MSA) 구축 방법을 살펴봤습니다.
다음 글에서는 웹 개발 실무 기술 시리즈 마무리 – 최적의 웹 개발 프로세스 정리를 소개하겠습니다.
다음 글 예고: "웹 개발 실무 기술 A to Z 마무리 – 최적의 웹 개발 프로세스 정리" 🚀
'project > 웹 개발 실무 기술 A to Z' 카테고리의 다른 글
- Total
- Today
- Yesterday
- gatsbyjs
- Webpack
- nodejs
- AI챗봇
- 개발블로그
- Docker
- Ktor
- 파이썬 알고리즘
- 백엔드개발
- SEO최적화
- 관리자
- App Router
- REACT
- kotlin
- 웹개발
- PostgreSQL
- Next.js
- NestJS
- nextJS
- 프론트엔드
- 프론트엔드면접
- Python
- LangChain
- fastapi
- seo 최적화 10개
- rag
- llm
- github
- Prisma
- CI/CD
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |