라즈베리파이 Mosquitto MQTT 브로커 설치하기
라즈베리파이에서 Mosquitto MQTT 브로커를 단계별로 설치하고 서비스 등록, 사용자 인증과 TLS 설정, 클라이언트 연결 테스트까지 포함한 설정법
목차
개요
이 글은 라즈베리파이에 Mosquitto MQTT 브로커를 설치하고 기본 설정부터 보안 연결까지 구성하는 과정을 다룬다. MQTT 개념이 낯선 초보자도 이해할 수 있도록 단계별로 정리한다. 소형 IoT 프로젝트나 홈 자동화에 바로 적용 가능한 설정을 중심으로 설명한다.
준비물
- 라즈베리파이(권장 Raspbian 최신 버전)
- 인터넷 연결 및 sudo 권한 사용자
- 기본적인 터미널 사용 지식
설치 절차
1. 패키지 업데이트
먼저 시스템 패키지를 최신 상태로 갱신한다.
sudo apt update
sudo apt upgrade -y
2. Mosquitto 설치
Mosquitto와 클라이언트 도구를 설치한다.
sudo apt install -y mosquitto mosquitto-clients
기본적으로 Mosquitto는 서비스로 설치되어 자동 시작된다. 필요 시 서비스 상태를 확인한다.
sudo systemctl status mosquitto
기본 설정
기본 설정 파일은 /etc/mosquitto/mosquitto.conf 또는 /etc/mosquitto/conf.d/ 아래에 위치한다. 간단한 설정을 별도 파일로 관리하면 업데이트 시 원본을 유지하기 편리하다.
3. 리스너와 익명 접속 비활성화
익명 접속을 막고 포트와 인증 파일을 지정한다. 예시 파일을 /etc/mosquitto/conf.d/default.conf로 생성한다.
sudo tee /etc/mosquitto/conf.d/default.conf > /dev/null <<EOF
listener 1883
allow_anonymous false
password_file /etc/mosquitto/passwd
EOF
4. 사용자 추가
사용자 계정을 만들어 인증을 설정한다. 아래 명령은 새로운 사용자 파일을 생성한다.
sudo mosquitto_passwd -c /etc/mosquitto/passwd user1
비밀번호를 입력하면 해당 사용자가 생성된다. 기존 파일에 추가할 때는 -c 옵션을 생략한다.
TLS(암호화) 설정
공개 네트워크에서 사용 시 TLS 설정이 권장된다. 테스트용으로 자체 서명 인증서를 생성하는 방법을 예로 든다.
5. 자체 서명 인증서 생성
sudo mkdir -p /etc/mosquitto/certs
cd /etc/mosquitto/certs
sudo openssl genrsa -out mosquitto.key 2048
sudo openssl req -new -key mosquitto.key -subj '/CN=raspberrypi' -out mosquitto.csr
sudo openssl x509 -req -in mosquitto.csr -signkey mosquitto.key -out mosquitto.crt -days 3650
sudo chmod 640 mosquitto.key
6. Mosquitto 설정에 TLS 추가
앞서 만든 TLS 파일 경로를 설정 파일에 추가한다.
sudo tee -a /etc/mosquitto/conf.d/default.conf > /dev/null <<EOF
listener 8883
cafile /etc/mosquitto/certs/mosquitto.crt
certfile /etc/mosquitto/certs/mosquitto.crt
keyfile /etc/mosquitto/certs/mosquitto.key
EOF
서비스 재시작 및 자동 시작
설정을 적용하려면 Mosquitto를 재시작한다. 필요 시 부팅 시 자동 시작을 활성화한다.
sudo systemctl restart mosquitto
sudo systemctl enable mosquitto
클라이언트 연결 테스트
로컬에서 테스트할 때는 mosquitto_sub와 mosquitto_pub을 사용한다. 인증을 확인하려면 앞서 만든 사용자 정보를 사용한다.
mosquitto_sub -h localhost -t 'test/topic' -u user1 -P password
mosquitto_pub -h localhost -t 'test/topic' -m 'hello' -u user1 -P password
TLS 포트를 사용하는 경우 --cafile 옵션으로 서버 인증서를 지정한다.
mosquitto_sub -h raspberrypi -p 8883 --cafile /etc/mosquitto/certs/mosquitto.crt -t 'secure/topic' -u user1 -P password
문제 해결 요약
- 서비스가 시작되지 않을 때: sudo journalctl -u mosquitto -b 로 로그 확인
- 인증 실패: /etc/mosquitto/passwd 파일 권한 및 사용자명 재확인
- TLS 문제: 인증서 경로와 파일 권한 확인, 클라이언트에서 cafile 지정 여부 확인
- 포트 충돌: 다른 서비스와 포트(1883, 8883) 중복 여부 점검
운영 팁
- 프로덕션 환경에서는 자체 서명이 아닌 공인 인증서 또는 내부 CA 사용 권장
- 장기간 운영 시 로그 회전과 모니터링 도구 연동 고려
- 필요 시 브리지 설정으로 다른 MQTT 브로커와 연동 가능
마무리
이 문서는 라즈베리파이에 Mosquitto MQTT 브로커를 설치하고 인증과 TLS를 적용해 안전하게 운영하는 과정을 안내한다. 소개한 절차를 따라하면 로컬 및 원격 클라이언트와 안정적으로 통신하는 MQTT 환경을 구성할 수 있다.