[python] Django와 Apache Kafka 연동 방법은 어떻게 되는가?

Apache Kafka는 대용량의 실시간 데이터 스트리밍을 처리하기 위한 분산 메시징 시스템입니다. Django는 대표적인 파이썬 웹 프레임워크로, 이 두 기술을 함께 사용하여 실시간 데이터를 처리할 수 있습니다.

이번 글에서는 Django와 Apache Kafka를 연동하는 방법을 알아보겠습니다.

1. Kafka-python 설치

먼저, Kafka와의 연동을 위해 kafka-python 라이브러리를 설치해야 합니다. 다음 명령어를 사용하여 설치합니다.

pip install kafka-python

2. Django 프로젝트 설정 변경

Django 프로젝트의 settings.py 파일을 열어야 합니다.

먼저, INSTALLED_APPS 항목에 ‘kafka’를 추가합니다.

INSTALLED_APPS = [
    ...
    'kafka',
]

그리고, 다음과 같이 Kafka 관련 설정을 추가합니다.

KAFKA_BOOTSTRAP_SERVERS = 'localhost:9092'
KAFKA_TOPIC = 'my_topic'

KAFKA_BOOTSTRAP_SERVERS는 Kafka 브로커의 호스트와 포트를 지정하는 설정입니다. 만약 다른 포트나 호스트를 사용한다면, 해당 정보로 수정해야 합니다.

KAFKA_TOPIC은 데이터를 보낼 토픽의 이름을 지정하는 설정입니다. 여기서는 ‘my_topic’으로 지정하였습니다.

또한, Django의 MIDDLEWARE_CLASSES 항목에 KafkaMiddleware를 추가합니다.

MIDDLEWARE_CLASSES = [
    ...
    'kafka.middleware.KafkaMiddleware',
]

3. Producer 작성하기

이제 Kafka에 데이터를 전송하기 위한 Producer를 작성해보겠습니다.

먼저, Django 앱 내부에 kafka.py 파일을 생성하고 다음과 같이 작성합니다.

from kafka import KafkaProducer
from django.conf import settings

def send_message(message):
    producer = KafkaProducer(bootstrap_servers=settings.KAFKA_BOOTSTRAP_SERVERS)
    producer.send(settings.KAFKA_TOPIC, message.encode('utf-8'))
    producer.flush()
    producer.close()

위 코드에서는 KafkaProducer를 사용하여 메시지를 전송하고 있습니다. send 메서드를 사용하여 설정된 토픽으로 메시지를 전송합니다.

4. Consumer 작성하기

Kafka에서 데이터를 수신하기 위한 Consumer를 작성해보겠습니다.

from kafka import KafkaConsumer
from django.conf import settings

def consume_messages():
    consumer = KafkaConsumer(settings.KAFKA_TOPIC,
                             bootstrap_servers=settings.KAFKA_BOOTSTRAP_SERVERS,
                             group_id='my_group')
    for msg in consumer:
        print(msg.value.decode('utf-8'))

위 코드에서는 KafkaConsumer를 사용하여 설정된 토픽으로부터 메시지를 수신하고 있습니다. for문을 사용하여 메시지를 순회하면서 필요한 작업을 수행할 수 있습니다.

5. Django에서 Kafka 사용하기

이제 Django에서 Kafka를 사용하는 예제를 보여드리겠습니다.

from django.http import HttpResponse
from my_app.kafka import send_message

def send(request):
    message = request.GET.get('message')  # 클라이언트로부터 전달받은 메시지
    send_message(message)  # Kafka에 메시지 전송
    return HttpResponse('Message sent!')

위 예제에서는 클라이언트로부터 전달받은 메시지를 Kafka에 전송하는 예제입니다. send_message 함수를 사용하여 Kafka에 메시지를 전송합니다.

이와 같은 방식으로 Django와 Apache Kafka를 연동하여 실시간 데이터 스트리밍을 처리할 수 있습니다. 더 자세한 내용은 공식 문서를 참고하시기 바랍니다.