관리 메뉴

IT창고

CentOS 7 - Mosquitto (MQTT) 설치 및 사용법 본문

서버운영/WAS, DBMS

CentOS 7 - Mosquitto (MQTT) 설치 및 사용법

방구석여포 2019. 9. 9. 23:29

이번에는 WAS인 Mosquitto 서버를 설치해보도록 하겠습니다.

Mosquitto는 MQTT 프로토콜 버전 5.0, 3.1.1 및 3.1을 구현하는 공개 소스(EPL / EDL License) 메세지 브로커 입니다.

 

설치 전에 MQTT 프로토콜에 대해 간단히 알아보겠습니다.

MQTT(Message Queue Telemetry Transport)는 IBM에서 1999년에 최초의 버전이 만들어졌으며 2013년에 MQTT v3.1을 OASIS 표준화 단체에 제출하였습니다. 이 프로토콜은 publish–subscribe 모델로 메세지 프로토콜로 대표적으로 페이스북 메세지가 MQTT 프로토콜을 사용했다고 알려져있으며 경량 프로토콜로 저전력 장비에서도 운용이 가능하기에 라즈베리파이3나 IoT에서 사용하기 좋습니다.

장점으로 보면 MQTT를 중계시스템에 적용하면 API 서버의 부하 및 트래픽 감소 효과와 MQTT연결상태만 집중하기에 통신 오류 감소 등이 있습니다.

 

테스트환경은 VMware에 CentOS 7 입니다. 

CentOS 7에 자체적으로 패키지가 없기 때문에 yum을 통해 설치가 가능합니다.

여기를 클릭하면 mosquitto 공식사이트로 이동합니다. 여기서 지금 테스트를 진행할 OS이외에 설치 가능한 운영체제를 확인해볼 수 있습니다.  

Red-Hat인 CentOS 7의 경우 Enterprise Linux용 Extra Packages 또는 EPEL이라는 추가 소프트웨어 저장소를 설치해야 합니다.

yum search로 찾아본 결과 mosquitto를 확인할수없으므로 yum -y install epel-release 명령어로 외부저장소를 추가하도록 합니다.

외부저장소를 추가해주면 mosquitto 패키지를 설치할수있게 됩니다. yum -y install mosquitto 명령어로 패키지를 설치해주도록 합니다. 추가로 Ubuntu에서도 테스트를 해보았는데 yum 패키지에서 mosquitto를 설치하면 서버/클라이언트 모두 설치되므로 클라이언트를 따로 설치하지 않아도 됩니다.

mosquitto 패키지가 설치되었다면 /etc/mosquitto 디렉토리에 설정파일이 존재합니다 확인해보면 거의 주석처리되어있으며 기본값으로 설정되어있습니다. 

service mosquitto start 명령어로 mosquitto 서비스(데몬)을 구동시키면 1883포트가 열린걸 확인할 수 있습니다. 

 

실제로 동작하는지 테스트해보도록 하겠습니다.

리눅스 명령어에 새롭게 mosquitto_pub와 mosquitto_sub 명령어가 생긴걸 확인할수있습니다. 

mosquitto_sub 명령어의 옵션 -h는 host이며 -t는 mqtt 주제(Topic)이름 입니다. 

-h옵션에 localhost로 자신의 서버를 지정했기에 메세지가 올때까지 대기하게 됩니다. 

즉 MQTT broker와 연결을 요청하는 client는 TCP/IP socket 연결을 한 후 명시적으로 종료하거나 Network 사정에 의해 연결이 끊어질 때까지 연결 상태를 유지하게 됩니다.

 

mosquitto_pub에서 메세지를 보낼 host와 주제 설정하고 -m옵션으로 보낼 메세지를 입력하여 보내게 되면 대기중인mosquitto_sub 에서 메세지를 받게 됩니다.

즉 개설된 주제(Topic)에 message를 발행하면 해당 주제을 구독하는 client 들에게 message를 전송하게 됩니다.

 

여기까지 mosquitto 설치와 테스트 확인이였습니다.

 

Tip.

1. -p 옵션의 경우 따로 사용하지 않을 경우 기본값인 1883 포트를 사용합니다.
2. 스페이스로 띄어쓰기를 할 경우 ""로 묶어서 사용합니다.

3. listener (포트번호) 설정으로 1883 기본값 포트 이외에 포트를 사용할 수 있습니다.

 

추가 내용으로 익명사용자(anonymous) 제한 및 사용자 추가 등록에 대해 알아보겠습니다.

 

기본 구성으로 설치했을 시 익명사용자들도 접속하여 메세지를 주고 받을 수 있는데 계정과 패스워드를 발급받고 익명사용자를 제한하도록 하겠습니다.

우선 익명사용자를 제한하도록 하겠습니다.

/etc/mosquitto/mosquitto.conf 파일 가장 아래에 893번째 줄에 설정을 입력하면 익명사용자들의 메세지 전송을 차단할수있습니다. 894번째 줄에 설정은 등록된 사용자들이 있는 파일로 사용자계정과 패스워드 정보가 저장될 파일입니다. 

지금은 /etc/mosquitto/passwd 파일이 없지만 mosquitto_passwd 명령어를 사용하여 사용자 계정정보가 있는 passwd파일을 만들도록 하겠습니다.

 

우선 익명사용자 제한 설정을 했으므로 실제로 사용할 수 없는지 테스트 해보도록 하겠습니다.

mosquitto서비스를 재시작하고 익명사용자로 메세지 전송 시도 해보았습니다. 연결거부로 익명사용자로 사용할 수 없는걸 확인하였습니다. 

익명사용자를 사용할 수 없으므로 사용자계정을 만들도록 하겠습니다.

mosquitto_passwd -c /etc/mosquitto/passwd gsk 명령어로 passwd 파일을 만듬과 동시에 사용자계정 gsk를 추가하였습니다. cat명령어로 /etc/mosquitto/passwd 파일 안을 확인해보면 계정과 암호화된 패스워드를 확인해볼수있습니다. 

passwd파일을 만든 후에 새로운 사용자 계정을 추가하려면 -b옵션을 사용하여 사용자계정을 추가할 수 있습니다. -b옵션 후에 passwd파일의 경로를 넣고 계정명과 패스워드를 같이 입력해주면 passwd 파일에 등록이 됩니다.

cat명령어로 /etc/mosquitto/passwd 파일을 확인해보면 새로 추가한 사용자계정과 패스워드 정보를 확인해볼 수 있습니다.

 

작업이 끝났다면 테스트를 위해 mosquitto서비스(데몬)을 재시작 해줍니다.  ex) service mosquitto restart

MQTT broker에 연결할떄에도 계정정보가 필요하며 메세지를 보내는것도 계정정보를 필요로 하게 된걸 확인할수있습니다. 계정정보 없이 메세지를 보낼 경우 인증거부로 사용할 수 없는걸 확인하였습니다.

 

마지막으로 Mosquitto에 SSL을 적용할 수가 있는데 SSL적용의 경우 여기1여기2 사이트를 참고합니다.

'서버운영 > WAS, DBMS' 카테고리의 다른 글

CentOS 7 - ShinyServer 설치  (0) 2020.01.04
CentOS 7 - WebLogic 설치, 도메인 구성  (0) 2019.06.23
CentOS 7 - WebtoB 설치  (0) 2019.06.22
CentOS 7 - Tomcat 설치 (다중톰캣 설정)  (0) 2019.06.19
CentOS 7 - JEUS7 설치  (2) 2019.03.11
Comments