02. LoraWan 인프라를 구축해보자.

2024. 7. 19. 09:52·공부/LORA

Chirpstack

Chirpstack은 LoraWan 네트워크를 구축하고 관리하는 오픈 소스 소프트웨어이다. 

출처 : https://www.chirpstack.io/project

 

주요 구성은 아래와 같다.

  • Chirpstack Gateway Bridge
      Lora 게이트웨이와 통신하여 Lora 패킷을 UDP에서 MQTT로 변환하여 네트워크 서버로 전송한다.
  • Chirpstack Network Server
      LoraWan 패킷을 처리하고 디바이스와 게이트웨이 간의 통신을 관리한다.
  • Chirpstack Application Server
      데이터 및 디바이스를 관리하고, MQTT/HTTP 등의 프로토콜을 통해 사용자에게 데이터를 전송한다.

 

우리는 이 오픈 소스를 활용하여, 개인 LoraWan 인프라를 구축해볼 예정이다!

 

인프라 구축

일단, 현재 공직 Documentation에서 제공하는 Chirpstack은 3버전과 4버전이 있다.

 

3버전은 모놀리식 아키텍처이고, 4버전은 MSA로 전환되어 각 구성요소가 독립적으로 배포되고 관리 될 수 있게 바뀌었다.

우리가 구축할 인프라는 복잡한 구성이 필요하지도, 대용량 처리도 필요하지 않기 때문에 간단한 3버전으로 구축한다.

 

인프라를 구축하는 방법은 Chirpstack3 Documentation(https://www.chirpstack.io/project/) 을 참고하면서 진행한다.

나는, k8s 환경이 로컬 서버에 구축되어 있어 쿠버네티스 설치 기준으로 작성해보겠다.

 

구성

LoraWan을 구현한 오픈소스 소프트웨어 이기때문에, LoraWan 구성이 그대로 구현되어있다.

 

아래에서, Chirpstack NetworkServer, Pub/Sub Broker, Chirpstack Application Server, Integration MQTT는 서버에 구축, Chirpstack Gateway는 라즈베리파이에 구축할 예정이다.

출처 : https://www.chirpstack.io/project/architecture/

 

 

구축

1. PostgreSQL, Redis 배포

Chirpstack 에서는 디바이스 및 네트워크 메타데이터, 사용자 정보, 등의 데이터를 저장하기 위해 postrgresql을,

세션 관리, 데이터 큐잉, 캐싱, 이벤트 트리거 작업 등을 위해 redis를 사용한다.

그렇기 때문에, 해당 서비스들을 먼저 배포해주어야 한다. 

 

Application Server와 Network Server 각각 postgresql와 redis를 사용하기에 서로 다른 서비들을 배포해주어야 한다.

하나의 redis나 postgresql에 스키마나 DB를 분리하여 제공해도 되지만,

간단하게 각각 다른(독립적인) redis와 postgresql을 사용하는 구조로 배포해본다.

 

postgres-ns.yaml
0.00MB
redis-ns.yaml
0.00MB
redis-as.yaml
0.00MB
postgres-as.yaml
0.00MB

 

파일 내용이 조금 많아서, 첨부 파일로 대체한다.

 

2. Mqtt Broker 배포

Chirpstack 에서 Gateway와 Network 서버 사이의 데이터는 MQTT 통신을 통해 주고받는다.

 

그렇기 때문에, Network 서버와 Gateway 서버사이의 MQTT를 관리하는 MQTT Broker를 배포하여야 한다.

 

이를 mqtt-lorawan 이라 칭하고, 아래와 같은 설정으로 배포한다.

mosquitto-lorawan.yaml
0.00MB

 

그리고 Application 서버와 클라이언트 사이의 데이터 통신은 여러 프로토콜을 지원하는 것을 확인할 수 있다.

 

HTTP, MQTT, AMQP, KAFKA 등 여러가지가 존재하며 그 중에 하나를 선택하여 클라이언트와 연결하면 될 것이다.

 

하지만, 일전 경험을 통해 알게 된 사실은, UpEvent를 어플리케이션서버에서 받는 것은 해당 프로토콜 모두 지원하는 듯 하지만, 

 

어플리케이션 서버로 다운이벤트를 전송하는 기능은 AMQP 를 통해 테스트 했을 때 동작하지 않는 것을 확인할 수 있었다.

 

이에 궁금점이 생겨 Chirpstack Application Server의 코드를 보니(https://github.com/brocaar/chirpstack-application-server/tree/master)

 

MQTT 부분은 구조체에 Downlink 관련 내용들이 작성되어있는 것에 반해, 다른 프로토콜들의 구조체에는 Downlink 관련 내용들이 작성되어 있지 않는 것으로 보아, 예상컨데 아직 구현이 되어있지 않는 것이 아닌가 생각된다.

 

그렇기 떄문에, 완전한 Chirpstack을 구성하기 위해 MQTT 프로토콜을 Integration 으로 사용한다.

 

이를 mqtt-integration 이라 칭하고, 아래와 같은 설정으로 배포한다.

mosquitto-integration.yaml
0.00MB

 

 

3. Chirpstack Network Server, Application Server 배포

이제 Chirpsatck의 메인인 Network Server와 Application Server 배포를 위한 준비들을 모두 마쳤으니, 해당 서버들을 배포한다.

 

chirpstack-network-server.yaml
0.01MB
chirpstack-application-server.yaml
0.01MB

 

 

마무리

아래처럼 chirpstack 네임스페이스에 모든 파드들이 성공적으로 배포되었다면, Chirpstack 서버쪽 인프라 구축은 완료되었다.

 

이제 앞으로, 로라 게이트웨이 쪽 인프라를 구축하고, 해당 게이트웨이를 Chirpstack 에 등록하는 단계로 진행될 예정이다.

저작자표시 비영리 변경금지 (새창열림)

'공부 > LORA' 카테고리의 다른 글

01. LORA란 무엇인가?  (0) 2024.07.19
'공부/LORA' 카테고리의 다른 글
  • 01. LORA란 무엇인가?
뚝딱뚝딱2
뚝딱뚝딱2
  • 뚝딱뚝딱2
    개발도상국
    뚝딱뚝딱2
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 공부
        • Java
        • Spring Boot
        • LORA
      • Web
        • 인스타 클론 코딩
        • GPT 응답 API 서버
        • Spring Boot 예외 처리
        • 코테 준비용 서비스 만들기
      • DevOps
        • 쿠버네티스
        • 서버 만들기
      • 코딩테스트
        • 알고리즘
      • 교육
        • 스파르타코딩클럽 - 내일배움단
        • 혼자 공부하는 컴퓨터 구조 운영체제
      • 잡다한것
  • 블로그 메뉴

    • 홈
  • 링크

    • GITHUB
  • 공지사항

  • 인기 글

  • 태그

    쿠버네티스
    클러스터
    예외
    mapstruct
    OpenAI API
    스프링부트
    chat GPT
    Entity
    react
    오블완
    리액트
    MSA
    백준
    Java
    스프링 부트
    클론코딩
    spring boot
    인스타그램
    REST API
    티스토리챌린지
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
뚝딱뚝딱2
02. LoraWan 인프라를 구축해보자.
상단으로

티스토리툴바