본문 바로가기
서버/서버이론

[Server] MQTT 서버란?

by 코딩히어로 2021. 3. 9.
728x90

서버를 구성하는 데 있어서 어떤 방식으로 구성할 것인가는 첫 설계 시 가장 큰 고민이죠

 

구성중 여러가지가 있겠지만 오늘은 MQTT라는 서버 구성에 대해 알아보겠습니다

 

 

 

1) MQTT가 무엇인가


MQTT란 풀어쓰면 Message Queueing Telemetry Transport로 메시지를 발행-구독하는 방법으로

 

통신하는 메시지 기반의 송수신 프로토콜입니다

 

저전력과 최소한의 패킷을 통해 통신하므로 IOT와 모바일 앱 등의 통신에 사용하기 좋습니다

 

MQTT는 TCP/IP 프로토콜 위에서 동작하며 Bluetooth나 지그비 같은 별도의 대역폭을 가지는

 

통신 규약이 아닌 Wifi나 인터넷에 연결하여 통신하는 TCP/IP 기반의 환경에서 통신해야 합니다

 

MQTT서버는 우리에게 잘 알려져 있는 기업인 Facebook Messenger에서 채택하면서 유명해졌고

 

그 외에도 많은 기업들이 중계 시스템 개선을 위해 많이 사용되고 있습니다

 

 

 

2) MQTT 구조/특징


MQTT는 말 그대로 메시지를 통한 송수신을 하게 됩니다.

 

통신을 위해서는 Broker / Publisher / Subscriber의 3가지로 구성됩니다.

 

MQTT의 메시지 발행과 구독은 오직 Broker를 통해서만 가능하며

 

Broker에게 Topic(주제)과 Data를 알려주면 해당 Topic을 구독하는 Client에게

 

Broker가 Data를 전달하는 방식으로 구성됩니다

 

그렇기 때문에 MQTT통신 방식은 일대일 혹은 일대 다수의 통신이 가능합니다

 

Broker와 통신을 하기 위해서 Client는 연결을 요청하고 TCP/IP 소켓 연결이 되고 난 후에는

 

강제적으로 연결을 종료하거나 네트워크 문제에 의해 연결이 끊어지는 경우가 아니라면 계속적으로

 

연결 상태를 유지하며 연결이 끊어지면 다시 접속을 하여 통신이 가능합니다

 

 

 

3) Topic


메시지를 발행하고 구독하는 데 있어 가장 중요한 것이 바로 Topic이라는 놈일 텐데요

 

Topic은 채널 단위로 구분할 수 있으며 슬래시(/)로 구분되는 계층 구조를 가지고 있습니다

 

예를 들어 

DepartmentStore, AStore, SkinnyJeans 모두 각각의 토픽 레벨이며 Topic Level Separator라는 

 

슬래시(/)를 통해서 구분된다고 보시면 됩니다

 

위 예시의 경우에는 백화점 내의 A옷가게의 스키니진을 체크합니다

 

 

Topic은 메시지를 구독과 발행할 때 여러 개의 토픽을 한 번에 지정할 수 있도록 하는 와일드카드 기능을 제공합니다

 

플러스(+) 문자를 통해서 단 한 개의 토픽을 임의의 토픽으로 대체할 수 있습니다

 

이렇게 할 경우 해당 예시는 백화점 내의 모든 가게의 스키니진을 체크합니다

 

 

Topic은 샵(#) 문자를 통해서 와일드카드 기능을 멀티로 지원합니다

 

이 말이 무슨 말이냐면 2단계 이상의 하위 토픽을 와일드카드 기능으로 대체할 수 있다는 의미로 아래와 같습니다

 

이 기능은 맨 마지막에만 사용될 수 있으며

 

백화점 내의 모든 가게의 모든 물건을 체크할 수 있다는 의미입니다

 

Topic은 크게 세 가지의 기능을 알고 있으면 사용상 크게 어려움은 없다고 생각합니다

 

 

 

3) 리눅스에서 MQTT 간단한 실습


위의 내용과 예시를 바탕으로 리눅스상에서 간단하게 실습을 진행해보겠습니다

 

저는 CentOS7 환경에서 진행하였고 처음 MQTT를 사용하시는 분들은 Yum을 통해 패키지를 설치해 주시기 바랍니다

 

Yum -y install mosquitto

 

자 설치가 완료되면 간단하게 명령어를 통해 Topic을 설정해 줍니다

 

mosquitto_sub -h localhost -t test

 

그 이후 하나의 창을 더 열어서 Topic을 통해 데이터를 발행합니다

 

mosquitto_pub -h localhost -t test -m "hello"

 

이렇게 test라는 Topic을 통해 데이터를 주고받는 MQTT서버를 테스트해보았습니다

 

728x90
반응형

'서버 > 서버이론' 카테고리의 다른 글

[Server] 리눅스 소켓이란?  (7) 2022.01.13
[Server] 트랜잭션이란?  (4) 2022.01.07
[Server] 로드 밸런싱이란?  (0) 2022.01.03
[Server] FCM이란?  (1) 2021.12.12
[Server] 서버 어디에 구축할것인가  (0) 2020.10.14

댓글