ํฐ์คํ ๋ฆฌ ๋ทฐ
๐ NestJS + Kubernetes & ๋ง์ดํฌ๋ก์๋น์ค ๋ฐฐํฌ: ์ค์ ๊ฐ์ด๋ - NestJS + Kafka ์ค์๊ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ
octo54 2025. 5. 9. 11:13๐ NestJS + Kubernetes & ๋ง์ดํฌ๋ก์๋น์ค ๋ฐฐํฌ: ์ค์ ๊ฐ์ด๋
25. NestJS + Kafka ์ค์๊ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ
๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก ์์งํ๊ณ ์ฒ๋ฆฌํด์ผ ํ๋ ์์คํ
์์๋ Kafka์ ๊ฐ์ ์คํธ๋ฆฌ๋ฐ ํ๋ซํผ์ด ํ์์
๋๋ค.
Kafka๋ ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ๊ณ ์์ผ๋ก ์ฒ๋ฆฌํ๋ฉฐ, ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ ๊ตฌ์ถ์ ์ ํฉํฉ๋๋ค.
์ด๋ฒ ๊ธ์์๋ NestJS์ Kafka๋ฅผ ๊ฒฐํฉํ์ฌ ์ค์๊ฐ ๋ฐ์ดํฐ ์คํธ๋ฆฌ๋ฐ์ ์ฒ๋ฆฌํ๋ ๊ตฌ์กฐ๋ฅผ ์ค๊ณํ๊ณ ,
Kafka์ NestJS๋ฅผ Kubernetes ํ๊ฒฝ์์ ํจ๊ณผ์ ์ผ๋ก ์ด์ํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํฉ๋๋ค. ๐
โ 1. Kafka ๊ธฐ๋ฐ ์ค์๊ฐ ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ ๊ตฌ์กฐ
[Producer] → [Kafka Topic] → [Consumer] → [NestJS Service] → [Database/Storage]
๐ก Kafka์ ์ญํ
- ๋์ฉ๋ ๋ก๊ทธ ๋ฐ ์ด๋ฒคํธ ์ฒ๋ฆฌ
- ๋ง์ดํฌ๋ก์๋น์ค ๊ฐ ๋ฐ์ดํฐ ์คํธ๋ฆฌ๋ฐ
- ๋น๋๊ธฐ ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ ๊ตฌ์ฑ
โ 2. Kafka ์ค์น ๋ฐ ์ค์
๐ธ ๋ก์ปฌ Docker Kafka ์ค์น (Bitnami ์ด๋ฏธ์ง)
docker run -d --name kafka-server \
-p 9092:9092 -p 2181:2181 \
-e ALLOW_PLAINTEXT_LISTENER=yes \
bitnami/kafka:latest
๐ก Kafka UI ๊ด๋ฆฌ ๋๊ตฌ:
docker run -d -p 9000:9000 \
-e KAFKA_BROKERS=kafka-server:9092 \
provectuslabs/kafka-ui:latest
โ 3. NestJS + Kafka ๊ธฐ๋ณธ ์ค์
๐ธ ํ์ ํจํค์ง ์ค์น
npm install @nestjs/microservices kafkajs
๐ Kafka ๋ชจ๋ ๊ตฌ์ฑ
๐ kafka/kafka.module.ts
import { Module } from '@nestjs/common';
import { KafkaService } from './kafka.service';
@Module({
providers: [KafkaService],
exports: [KafkaService],
})
export class KafkaModule {}
๐ Kafka ์๋น์ค ๊ตฌํ
๐ kafka/kafka.service.ts
import { Injectable, OnModuleInit } from '@nestjs/common';
import { Kafka, Consumer, Producer } from 'kafkajs';
@Injectable()
export class KafkaService implements OnModuleInit {
private producer: Producer;
private consumer: Consumer;
async onModuleInit() {
const kafka = new Kafka({
clientId: 'nestjs-kafka-client',
brokers: ['localhost:9092'],
});
this.producer = kafka.producer();
this.consumer = kafka.consumer({ groupId: 'nestjs-group' });
await this.producer.connect();
await this.consumer.connect();
await this.consumer.subscribe({ topic: 'nestjs-topic', fromBeginning: true });
await this.consumer.run({
eachMessage: async ({ topic, partition, message }) => {
console.log(`Received message: ${message.value.toString()}`);
},
});
}
async sendMessage(topic: string, message: string) {
await this.producer.send({
topic,
messages: [{ value: message }],
});
}
}
โ 4. Kafka ๋ฉ์์ง ์ ์ก ๋ฐ ์์
๐ API ํธ์ถ ์์ (์ปจํธ๋กค๋ฌ)
๐ app.controller.ts
@Controller('kafka')
export class AppController {
constructor(private readonly kafkaService: KafkaService) {}
@Post('send')
async sendMessage(@Body('message') message: string) {
await this.kafkaService.sendMessage('nestjs-topic', message);
return { status: 'Message sent' };
}
}
๐ก ์์ฒญ ์์
curl -X POST http://localhost:3000/kafka/send -d '{"message": "Hello Kafka"}' -H "Content-Type: application/json"
โ 5. Kafka์ Kubernetes ์ฐ๋
๐ Helm์ผ๋ก Kafka ํด๋ฌ์คํฐ ๋ฐฐํฌ
helm repo add bitnami https://charts.bitnami.com/bitnami
helm install kafka bitnami/kafka
๐ Kafka ์๋น์ค ํ์ธ
kubectl get pods
kubectl get svc
๐ Kubernetes์ฉ Kafka ์ค์
๐ config/kafka-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: kafka-config
data:
KAFKA_BROKER: kafka:9092
๐ deployment.yaml
env:
- name: KAFKA_BROKER
valueFrom:
configMapKeyRef:
name: kafka-config
key: KAFKA_BROKER
โ 6. ์ค์๊ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์์
๋ฐ์ดํฐ ์ ํ Kafka ํ ํฝ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ
์ฌ์ฉ์ ๋ก๊ทธ์ธ | user-login | ์ค์๊ฐ ๋ก๊ทธ ๋ถ์ ๋ฐ ๋ชจ๋ํฐ๋ง |
์ฃผ๋ฌธ ์์ฑ | order-created | ์ฃผ๋ฌธ ์ฒ๋ฆฌ ๋ฐ ๊ฒฐ์ ์ํ ์ ๋ฐ์ดํธ |
AI ๋ถ์ ๊ฒฐ๊ณผ | ai-results | ๋ชจ๋ธ ์์ธก ๊ฒฐ๊ณผ๋ฅผ DB์ ์ ์ฅ ๋ฐ ๋์๋ณด๋ ํ์ |
๐ ์ค์๊ฐ ์ฒ๋ฆฌ ๋ก์ง (NestJS)
๐ order-consumer.service.ts
@ConsumerService('order-created')
export class OrderConsumerService {
async handleMessage(message: string) {
console.log(`Order Received: ${message}`);
// ์ฃผ๋ฌธ ์ฒ๋ฆฌ ๋ก์ง
}
}
โ 7. Kafka ๋ชจ๋ํฐ๋ง ๋ฐ ์ด์ ์ ๋ต
ํญ๋ชฉ ๋๊ตฌ
๋ธ๋ก์ปค ์ํ ํ์ธ | Kafka UI, Kafka Manager |
๋ฉ์์ง ๋ชจ๋ํฐ๋ง | Kafka-UI, Prometheus + Grafana |
์ฅ์ ๋์ | Kafka MirrorMaker, Multi-Broker ๊ตฌ์ฑ |
๋ก๊ทธ ์์ง | ELK ์คํ (Elasticsearch, Logstash, Kibana) |
โ 8. ์ค์๊ฐ ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ ํ์ฉ ์ฌ๋ก
- ์ด๋ฒคํธ ์คํธ๋ฆฌ๋ฐ: ์ค์๊ฐ ์ ์ ํ๋ ๋ก๊ทธ ์์ง
- ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ: ๋ก๊ทธ ์์ง → Kafka → ๋ฐ์ดํฐ ๋ถ์ ์์คํ
- ์๋ฆผ ์๋น์ค: ํน์ ์ด๋ฒคํธ ๋ฐ์ ์ ์ค์๊ฐ ํธ์ ์๋ฆผ
- AI ์ค์๊ฐ ์ถ๋ก ๊ฒฐ๊ณผ: Kafka๋ก ์ฒ๋ฆฌ ๊ฒฐ๊ณผ ์ ๋ฌ
โ ๊ฒฐ๋ก : Kafka ๊ธฐ๋ฐ NestJS ์ค์๊ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์์ฑ
โ
Kafka๋ฅผ ํตํด ๋์ฉ๋ ์ค์๊ฐ ๋ฐ์ดํฐ๋ฅผ ์์ ์ ์ผ๋ก ์ฒ๋ฆฌ
โ
NestJS์ ์ฐ๊ณํ์ฌ ์ด๋ฒคํธ ๊ธฐ๋ฐ ์ํคํ
์ฒ ๊ตฌํ
โ
Kubernetes์ Kafka๋ฅผ ๋ฐฐํฌํ์ฌ ํ์ฅ์ฑ ํ๋ณด
โ
Kafka ํด๋ฌ์คํฐ์ NestJS ๊ฐ์ ์๋น์ค ๊ฐ ํต์ ๊ตฌ์กฐ ์ต์ ํ
๋ค์ ๊ธ์์๋ NestJS๋ฅผ ๊ธฐ๋ฐ์ผ๋ก GraphQL API๋ฅผ ๊ณ ๋ํํ์ฌ ์ฑ๋ฅ์ ๊ทน๋ํํ๋ ์ ๋ต์ ์๊ฐํฉ๋๋ค! ๐ก
๐ ๋ค์ ๊ธ ์๊ณ : NestJS GraphQL ์ฑ๋ฅ ์ต์ ํ – ๋ฐ์ดํฐ ๋ก๋ฉ๊ณผ ์บ์ฑ ์ ๋ต
๐ ๋ค์ ํธ: 26. NestJS GraphQL ๊ณ ์ฑ๋ฅ API ๊ตฌ์ถ
NestJS Kafka,NestJS ์ค์๊ฐ ๋ฐ์ดํฐ,NestJS ์คํธ๋ฆฌ๋ฐ,NestJS Kafka ํด๋ฌ์คํฐ,NestJS Kafka ์ค์ ,NestJS Kafka Kubernetes,NestJS Kafka Helm,NestJS Kafka Consumer,NestJS Kafka Producer,NestJS ์ค์๊ฐ ๋ฉ์์ง ์ฒ๋ฆฌ
'study > ๋ฐฑ์๋' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
- Total
- Today
- Yesterday
- Next.js
- Prisma
- AI์ฑ๋ด
- llm
- Docker
- ํ์ด์ฌ ์๊ณ ๋ฆฌ์ฆ
- nodejs
- seo ์ต์ ํ 10๊ฐ
- ํ๋ก ํธ์๋
- github
- REACT
- ๊ด๋ฆฌ์
- LangChain
- Webpack
- ๊ฐ๋ฐ๋ธ๋ก๊ทธ
- nextJS
- SEO์ต์ ํ
- App Router
- ๋ฐฑ์๋๊ฐ๋ฐ
- PostgreSQL
- ์น๊ฐ๋ฐ
- rag
- gatsbyjs
- ํ๋ก ํธ์๋๋ฉด์
- Python
- fastapi
- Ktor
- CI/CD
- kotlin
- NestJS
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |