본문 바로가기
  • _^**_
무근본 IT 지식 공유/무근본 파이썬(Python)

[무근본파이썬] 메세지 큐와 그 중요성: 온라인 쇼핑몰 예시와 코드로 이해하기

by 크리드로얄워터 2023. 9. 19.
반응형

메세지 큐와 그 중요성: 온라인 쇼핑몰 예시와 코드로 이해하기

1. 메세지 큐란 무엇인가?


메세지 큐(Message Queue)는 프로세스나 스레드, 심지어는 서로 다른 서버나 애플리케이션 간에 메시지를 비동기적으로 교환하는 데 사용되는 데이터 구조입니다. 메세지 큐는 메시지를 순차적으로 저장하고, 메시지를 보내는 쪽(Producer)과 받는 쪽(Consumer) 사이에서 메시지를 전송하는 역할을 합니다.

2. 왜 메세지 큐를 사용하는가?


메세지 큐를 사용하면 시스템 간의 통신을 비동기적으로 처리할 수 있습니다. 이는 특정 작업이나 요청에 대한 응답을 즉시 기다리지 않고, 해당 작업을 큐에 넣고 다른 작업을 계속 수행할 수 있음을 의미합니다. 따라서, 과도한 트래픽이나 부하가 발생했을 때 시스템의 병목 현상을 방지하고, 확장성을 높일 수 있습니다.

3. 온라인 쇼핑몰에서의 메세지 큐 활용 예시


온라인 쇼핑몰에서 고객이 상품을 주문하면, 주문 정보는 백엔드 시스템으로 전송됩니다. 만약 바로 주문을 처리한다면, 주문 요청이 폭증할 경우 시스템은 과부하 상태에 빠질 수 있습니다. 이 문제를 해결하기 위해 주문 정보를 메세지 큐에 넣을 수 있습니다. 그리고 주문 처리 작업을 수행하는 별도의 워커나 백엔드 서비스가 큐에서 메시지를 가져와 주문을 처리하게 됩니다.

4. 코드 예시: 간단한 주문 시스템과 메세지 큐


이 예시에서는 Python의 `queue` 라이브러리를 사용하여 간단한 메세지 큐를 구현해보겠습니다.


```python
import queue
import time
import threading

# 메세지 큐 생성
order_queue = queue.Queue()

def order_producer():
    for i in range(5):
        print(f"주문 {i + 1} 추가!")
        order_queue.put(f"주문 {i + 1}")
        time.sleep(1)

def order_consumer():
    while True:
        order = order_queue.get()
        if order is None:
            break
        print(f"{order} 처리 중...")
        time.sleep(2)
        print(f"{order} 처리 완료!")

# 스레드 생성
producer_thread = threading.Thread(target=order_producer)
consumer_thread = threading.Thread(target=order_consumer)

# 스레드 시작
producer_thread.start()
consumer_thread.start()

# 스레드 종료 대기
producer_thread.join()
consumer_thread.join()
```


이 코드에서 `order_producer`는 주문을 메세지 큐에 추가하는 함수이며, `order_consumer`는 메세지 큐에서 주문을 가져와 처리하는 함수입니다. 여기서는 간단하게 주문 추가와 처리를 시뮬레이션하기 위해 `time.sleep`을 사용하였습니다.

결론


메세지 큐는 다양한 시스템과 환경에서 활용될 수 있습니다. 특히 분산 시스템이나 대규모 웹 애플리케이션에서는 메세지 큐의 활용이 거의 필수적입니다. 올바르게 활용하면 시스템의 안정성과 확장성을 동시에 높일 수 있습니다.

반응형

댓글