투케이2K

168. (TWOK/LOGIC) [Aws] Iot Core 디바이스 주기보고 (KeepAlive) 에 따른 백엔드 서버 단선 체크 로직 - 버퍼 허용 시간 적용, Retry 체크 본문

투케이2K 로직정리

168. (TWOK/LOGIC) [Aws] Iot Core 디바이스 주기보고 (KeepAlive) 에 따른 백엔드 서버 단선 체크 로직 - 버퍼 허용 시간 적용, Retry 체크

투케이2K 2026. 1. 20. 07:56
728x90

[로직 정리]

정리 로직 : Aws / Iot Core / MQTT / Shadow

상태 : [Aws] Iot Core 디바이스 주기보고 (KeepAlive) 에 따른 백엔드 서버 단선 체크 로직 - 버퍼 허용 시간 적용, Retry 체크

 

[설 명]

// --------------------------------------------------------------------------------------
[사전) 설정 및 정보 확인 사항]
// --------------------------------------------------------------------------------------

1. 제 목 : [Aws] Iot Core 디바이스 주기보고 (KeepAlive) 에 따른 백엔드 서버 단선 체크 로직 - 버퍼 허용 시간 적용, Retry 체크


2. 테스트 환경 : Aws / Iot / Device / KeepAlive


3. 사전) Aws Iot Core 간략 설명 : 

  >> AWS IoT 는 IoT 디바이스를 다른 디바이스 및 AWS 클라우드 서비스에 연결하는 클라우드 서비스를 제공합니다.

  >> 디바이스가에 연결할 수 있는 경우 AWS IoT는 AWS 가 제공하는 클라우드 서비스에 디바이스를 AWS IoT 연결할 수 있습니다.

  >> AWS IoT Core 메시지 브로커는 MQTT 및 MQTT over WSS 프로토콜을 사용하여 메시지를 게시하고 구독하는 디바이스 및 클라이언트를 지원합니다. 
  
    - HTTPS 프로토콜을 사용하여 메시지를 게시하는 디바이스와 클라이언트도 지원합니다.


4. 사전) MQTT (Message Queuing Telemetry Transport) 설명 : 

  >> MQTT 는 경량 메시지 프로토콜로, 주로 IoT(사물인터넷) 환경에서 사용됩니다

  >> MQTT 목적 : 제한된 네트워크 환경(저속, 불안정)에서 효율적으로 메시지를 주고받기 위해 설계

  >> MQTT 기반 : TCP/IP 위에서 동작

  >> MQTT 패턴 : Publish/Subscribe 모델을 사용

    - Publisher : 메시지를 발행하는 클라이언트

    - Subscriber : 특정 주제(topic)를 구독하는 클라이언트

    - Broker: 메시지를 중개하는 서버 (예: Mosquitto)

  >> MQTT 주요 특징 : 

    - 경량성 : 헤더가 매우 작음(2바이트부터 시작)

    - QoS (Quality of Service) : 
      $ QoS 0: 최대 한 번 전달(보장 없음)
      $ QoS 1: 최소 한 번 전달(중복 가능)
      $ QoS 2: 정확히 한 번 전달(가장 안전)

    - 지속 연결 : KeepAlive로 연결 상태 유지

    - Last Will and Testament (LWT) : 클라이언트 비정상 종료 시 브로커가 메시지 발행

    - 토픽 기반 라우팅 : 계층적 구조(/home/temperature 등)

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[로직 설명]
// --------------------------------------------------------------------------------------

---------------------------------------------------
❌ [AS-IS 기존 단선 체크 로직]
---------------------------------------------------

1. AWS Iot Core 에 연결 된 디바이스 기기는 30 분 마다 주기보고 reported publish 요청 수행


2. 백엔드 서버에서는 30분 마다 특정 기기가 reported 한 메시지 이력이 있는지 확인


3. 30 분 정해진 시간에 올라온 publish 메시지 페이로드가 없는 경우 기기 단선 상태 Flag 값 변경 수행


4. 해당 로직에서의 문제 사항 : 

  >> 백엔드 서버는 딱 정해진 시간 30 분 안에 publish 된 메시지가 있어야하는 조건을 가짐

    - 실제로 publish 수행 시 메시지가 유실 될 가능성이 있음

    - publish 를 수행했지만, 네트워크 통신 구간 딜레이로 딱 30분에 맞춰서 올라가지 않을 가능성이 있음

  >> 백엔드 서버는 1회성으로 바로 단선 판단을 하므로 실제로 기기가 인터넷에 연결 되어 있지만, publish 주기보고 시간 약간의 오차로 인해 단선으로 변경되는 이슈 발생 가능

---------------------------------------------------





---------------------------------------------------
✅ [TO-BE 변경 단선 체크 로직]
---------------------------------------------------

1. 백엔드 서버 로직 수정 : 

  >> 주기보고 시간에서 버퍼 허용 시간 적용 
  
    - 🔹 ex : 30분 마다 주기보고를 체크 하지만, (주기 보고 시간 +5분 내에 ) 올라오는 것은 허용 처리 : 35 분까지 주기보고 허용 처리

  >> 30분 마다 1회성으로 체크하는 것을 2, 3번 체크 기회 허용
  
    - 🔹 ex : 첫번째 주기보고 (30분) 가 올라오지 않은 경우 임시 Flag 값 지정, 두번째에서 주기보고 (1시간) 가 올라온 경우 정상 상태로 다시 Flag 값 변경


2. 기기 로직 수정 : 

  >> 🔹 주기보고 publish 이후 기기는 구독하고 있는 토픽으로 내가 전송한 메시지가 표시 되지 않는 경우 publish 재전송 로직 적용

    - ex : 주기보고 토픽 구독 : $aws/things/{ThingName}/shadow/name/{keepAlive}/update/accepted

    - ex : 주기보고 publish 토픽 : $aws/things/{ThingName}/shadow/name/{keepAlive}/update

    - publish 수행 후 응답 확인 핸들러 등록 후 3초 이내 구독 된 토픽으로 응답이 없는 경우 publish 재전송 수행 (총 3회까지 기회 제공)

  >> 🔹 추가적으로 publish 수행 후 구독 된 토픽 연결이 해제 되었을 수도 있으므로 publish 이후 응답이 없는 경우 토픽 재구독 수행 후 publish 수행 실시

---------------------------------------------------

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------

[MQTT (Message Queueing Telemetry Transport) 통신 설명]

https://kkh0977.tistory.com/3631

https://blog.naver.com/kkh0977/222971771381?trackingCode=blog_bloghome_searchlist


[업무 이슈] AWS MQTT Shadow 섀도우 생성 시 http 통신 문제로 순차적 Shadow 생성 문제 - Publish 구간 딜레이 추가

https://kkh0977.tistory.com/8135

https://blog.naver.com/kkh0977/223929919367?trackingCode=blog_bloghome_searchlist


[Aws Shadow 섀도우 토픽 구독 및 publish 요청 이후 타임아웃 TimeOut 로직 처리]

https://blog.naver.com/kkh0977/223906176453?trackingCode=blog_bloghome_searchlist


[Web/JavaScript] paho-mqtt 라이브러리 사용해 AWS IOT Core 플릿 프로비저닝 Thing 사물 등록 수행

https://kkh0977.tistory.com/8491

https://blog.naver.com/kkh0977/224109136460

// --------------------------------------------------------------------------------------
 
728x90
반응형
Comments