취준 일기/스마트 홈 IoT 프로젝트

라즈베리파이 MQTT 설치 및 자동 실행 설정

termuni 2025. 3. 13. 17:20

프로젝트에 대해서 회의를 해 본 결과, 데이터를 측정한 다음을 어떻게 할 것인지 회의를 했다.

 

그 과정에서, MQTT를 Python으로 주고받자고 결론을 낼까 했는데.. C언어로 하는 것이 더 좋을 수 있다고 하는 의견에 좀 더 생각해보았다.

 

근데 어차피 라즈베리파이에 다운로드도 내가 할 거고, 설정도 내가 할 건데.. 그리고 제일 중요한 건

라즈베리파이에서 데이터를 측정한 것을 그대로 코드에서 이어서 보내면 더 좋을 것 같은데? 라는 생각에 (반은 설득 당했다)

 

C언어를 기반으로 MQTT 서비스를 통해 송수신을 구현하기로 했다.

 

그러면 일단 MQTT 서비스를 다운로드 해야하니, 이 다운로드 하는 방법을 찾아보겠다!


https://velog.io/@imkkuk/%EB%9D%BC%EC%A6%88%EB%B2%A0%EB%A6%AC%ED%8C%8C%EC%9D%B4-MQTT

 

<IOT> 라즈베리파이 MQTT

이 내용을 수행하기 위해서는 ... 라즈베리파이에 운영체제가 설치되어 있어야 합니다. 아래 내용은 ssh 연결을 통해서 라즈베리파이 모니터를 사용하지 않습니다. ssh 연결을 할 수 있어야 하고,

velog.io

 

이번 포스팅은 위 블로그 + GPT를 참고를 좀 했습니다.

 

우선 통신 방법은 publisher가 브로커에게 정보를 전달하고, 이를 subscriber가 받는 방식이라고 한다.

 

그런데 그 중간에 브로커가 존재하여, 브로커를 통해 전달하는 방식이다.


 [라즈베리파이 (Publisher)] → (MQTT 브로커) → [??? (Subscriber)] 와 같이 구성되어있다는 것!

 

굳이 브로커를 쓰는 이유는? 반대로 생각하면 이해하기 쉽다.

브로커가 없다면?

  • 모든 장치가 서로 직접 연결해야 함 → 복잡하고 관리 어려움
  • 네트워크가 불안정하면 데이터 손실 발생 가능

그래서, 여러 장치가 동시에 연결하고자 한다는 것이 일반적인 IoT 시스템에선 이런 MQTT 통신 방식을 쓴다고 한다.

 

이런 브로커는 가상의 SW 서버로, 이 장치는 어디가 될 지 모르지만.. 아마 이번에는 높은 확률로 프론트와 백앤드를 맡고있는 http://gallerist.tistory.com 에서 담당해주지 않을까? 생각중이다.

 

그래도 혹시 모르니, MQTT를 활용하기 위한 것들은 다 다운로드 해볼 예정!


다운로드 전, 우선 내 라즈베리파이의 버전 확인 및 업데이트를 진행한다.

sudo apt-get update
sudo apt-get upgrade

 

서명 키 받기 - 오픈 소스인 Mosquitto 활용을 할 예정이기에, 그리고 Debian OS에서 작동시킬 예정이기에 블로그에서 소개한 방식대로 wget을 사용한 다운로드를 진행해야 한다고 한다.

cd ~
wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key
sudo apt-key add mosquitto-repo.gpg.key

cd /etc/apt/source.list.d/

명령을 치면

raspi.list

이런게 있는 것을 볼 수 있는데, 이는 기본 패키지 저장소를 관리하는 파일이다.

sudo wget http://repo.mosquitto.org/debian/mosquitto-stretch.list

를 하면 이제 Mosquitto 공식 저장소에서 패키지를 받을 준비를 하는 것이고,

이를 통해 update를 통해 패키지 업데이트가 가능하게 된다.


--2025-03-13 16:48:09--  http://repo.mosquitto.org/debian/mosquitto-stretch.list
Resolving repo.mosquitto.org (repo.mosquitto.org)... 85.119.83.194, 2001:ba8:1f1:f271::2
Connecting to repo.mosquitto.org (repo.mosquitto.org)|85.119.83.194|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://repo.mosquitto.org/debian/mosquitto-stretch.list [following]
--2025-03-13 16:48:12--  https://repo.mosquitto.org/debian/mosquitto-stretch.list
Connecting to repo.mosquitto.org (repo.mosquitto.org)|85.119.83.194|:443... connected.
HTTP request sent, awaiting response... 404 Not Found
2025-03-13 16:48:13 ERROR 404: Not Found.

위와 같은 에러가 나왔다.

아마.. mosquitto-stretch.list가 사라진 듯 하다..

그런데, 아래 명령어를 이어서 사용하니, mosquitto가 다운로드 가능했다.


sudo apt-get install mosquitto mosquitto-clients

이 명령어로, mosquitto-clients (모스키토 브로커, 테스트용 도구)를 다운로드 한다.

cd /etc/mosquitto
ls

이 명령어를 써서, 성공적으로 다운로드가 되었는지 확인하길 권장한다.

 

우리가 사용하고자 하는 것은 이 라즈베리파이의 외부 정보 접근 및 송수신이기에, 포트포워딩을 할 필요가 있다.

 

그래서, 다음 명령어를 사용한다.

(블로그에선 vi 편집기를 사용하자고 하는데, 개인적으로 nano가 더 편한 것 같다)

sudo nano mosquitto.conf # nano -> 편집기 실행
bind_address 0.0.0.0 # 모든 IP 허용
allow_anonymous true # 외부인에 대한 권한 허용

 

이렇게 작성하고, mqtt를 실행해보겠다.

sudo /etc/init.d/mosquitto start

로 가능하며, 개인적으로는 다음 명령어가 익숙하다.

sudo systemctl start mosquitto # 실행 명령어
sudo systemctl status mosquitto # 상태 확인 명령어
sudo systemctl stop mosquitto # 중단 명령어

참고로, 실행중인지 확인을 원한다면 status를 한 뒤 나오는 것을 잘 살펴보면 된다.

특히, 

mosquitto.service - Mosquitto MQTT Broker
     Loaded: loaded (/lib/systemd/system/mosquitto.service; enabled; preset: enabled)
     Active: active (running) since Thu 2025-03-13 17:12:15 KST; 40s ago
       Docs: man:mosquitto.conf(5)
       ...

에서 active(running)인 지 확인하면 된다.

 

그리고 추가로, 부팅자동 실행 설정을 변경 하려면 다음 명령어를 사용한다.

sudo systemctl enable mosquitto # 시스템 실행 시 자동 실행
sudo systemctl disable mosquitto # 시스템 실행 시 자동 실행

이렇게까지, 간단히 설치 및 실행을 설정하였다. 원래 내가 할 게 아니라고 생각했는데, 하다보니 내가 해야하는 게 맞는 것 같다고 생각중이다.. 오히려 IoT를 하려면 모르면 안 되는 느낌? ㅎ