MQTT · 2026-03-22

MQTT 테스트 자동화: CI/CD 파이프라인 통합

MQTT 기반 시스템의 테스트 자동화 방법을 CI/CD 파이프라인에 적용하는 절차와 설정, 예제 중심의 실무 전략

작성일 : 2026-03-22 ㆍ 작성자 : 관리자
post
목차

소개

MQTT 기반 서비스는 경량 메시징 구조로 IoT와 마이크로서비스에서 널리 사용된다. 안정성을 위해서는 mqtt 테스트 자동화 방법이 필수다. 본문에서는 테스트 종류, 로컬 환경 구성, 통합 테스트 코드 예시, 그리고 ci cd mqtt 테스트를 파이프라인에 통합하는 방법을 단계별로 설명한다.

왜 MQTT 테스트 자동화가 필요한가

신뢰성 확보

메시지 유실, 지연, 부적절한 QoS 설정 등 운영 이슈가 자주 발생한다. 자동화된 테스트는 이런 문제를 조기에 발견한다.

배포 효율 향상

CI/CD 파이프라인에서 mqtt integration test pipeline을 실행하면 배포 전 검증이 자동화되어 롤백과 수정이 빨라진다.

테스트 전략과 분류

유닛 테스트

비즈니스 로직과 메시지 포맷 검증에 초점을 둔다. MQTT 브로커와의 연결은 모킹으로 처리한다.

통합 테스트

브로커와 실제 통신을 수행한다. 퍼블리시와 서브스크라이브 플로우를 검증하며, QoS, retain, 연결 끊김 상황을 포함한다.

엔드투엔드(E2E) 테스트

실제 서비스 흐름을 시뮬레이션한다. 여러 클라이언트와 브로커 간 상호작용을 검증한다.

로컬 테스트 환경 구성

간단한 방법은 Docker와 Mosquitto 브로커를 사용하는 것이다. docker-compose로 브로커와 테스트 컨테이너를 띄우면 CI 환경과 유사한 조건을 만들기 쉽다.

docker-compose 예제

version: '3.7'
services:
  mosquitto:
    image: eclipse-mosquitto:2.0
    ports:
      - '1883:1883'
    volumes:
      - ./mosquitto/config:/mosquitto/config
  test-runner:
    image: python:3.11
    volumes:
      - ./:/work
    working_dir: /work
    command: ['bash','-c','pytest tests/integration -q']
    depends_on:
      - mosquitto

통합 테스트 작성 예

Python과 paho-mqtt를 사용한 간단한 통합 테스트 예이다. 퍼블리시 후 서브스크라이브로 메시지 수신을 검증한다.

import time
import threading
import paho.mqtt.client as mqtt

received = None

def on_message(client, userdata, msg):
    global received
    received = msg.payload.decode()

def test_publish_subscribe():
    client = mqtt.Client()
    client.on_message = on_message
    client.connect('mosquitto', 1883, 60)
    client.loop_start()
    client.subscribe('test/topic')
    client.publish('test/topic', 'hello')
    time.sleep(1)
    client.loop_stop()
    assert received == 'hello'

CI/CD 통합 예: GitHub Actions

파이프라인에는 build, unit-test, integration-test, deploy 단계가 포함된다. 통합 테스트는 별도 서비스로 브로커를 띄운 뒤 실행한다.

name: CI
on: [push, pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    services:
      mosquitto:
        image: eclipse-mosquitto:2.0
        ports:
          - 1883:1883
    steps:
      - uses: actions/checkout@v3
      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.11'
      - name: Install deps
        run: pip install -r requirements.txt
      - name: Run unit tests
        run: pytest tests/unit -q
      - name: Run integration tests
        run: pytest tests/integration -q

파이프라인 구성 팁

  • 브로커 서비스는 테스트 전용으로 분리한다.
  • 테스트마다 깨끗한 브로커 상태를 보장한다(토픽 초기화 등).
  • 네트워크 지연을 고려해 타임아웃을 적절히 설정한다.

실제 적용 시 고려사항

  • 환경 차이: 로컬과 CI의 네트워크 조건 차이를 문서화한다.
  • 비동기 처리: 메시징은 비동기 특성이 강하니 재시도 로직을 검사한다.
  • 테스트 속도: 통합 테스트는 느리다. 빈번한 푸시에는 유닛 테스트만 실행하도록 분리한다.
  • 보안: CI 환경의 브로커 접근 정보는 시크릿으로 관리한다.

모니터링과 실패 분석

테스트 실패 시 브로커 로그, 클라이언트 로그, 네트워크 캡처를 함께 수집하면 원인 파악이 빠르다. CI에 로그 유지 기간을 설정해 재현성을 확보한다.

결론

mqtt 테스트 자동화 방법을 도입하면 배포 안정성이 크게 향상된다. ci cd mqtt 테스트를 통해 문제를 조기에 탐지하고 대응 속도를 높일 수 있다. mqtt integration test pipeline을 설계할 때는 환경 일관성, 비동기 특성, 테스트 속도 조절을 중심으로 구성하면 효과적이다.

mqtt 테스트 자동화 방법 ci cd mqtt 테스트 mqtt integration test pipeline mqtt 테스트 mqtt ci cd integration testing paho-mqtt docker-compose