AWS IoT에서 development guide를 읽어보다 Cloud IoT 환경을 구성할 때 고려해야 할 요소들을 잘 설명해 놓아서 정리해보려고 합니다.

고려할 사항

Decouple ingestion from processing

IoT 환경 특히 산업용 IoT 환경에서는 매 초마다 방대한 양의 데이터를 수집합니다. 데이터 수집단을 전체 프로세스와 분리하면 디바이스에 영향을 주지 않고 데이터 가공이 가능합니다.
예를 들어 센서에서는 1초마다 값을 보내지만 실제로 DB에 데이터를 저장할 때는 5초에 한 번씩 데이터 타입을 정수로 변환하여 저장할 수 있습니다. 이럴 때 센서의 코드를 직접 수정해서 5초에 한 번 데이터를 정수 타입으로 변환하여 보내도록 하는 게 아니라 센서에서는 계속 1초마다 데이터를 보내지만 프로세스를 통해 데이터를 가공하여 저장하도록 할 수 있습니다. 이렇게 하면 실제로 디바이스에는 영향을 주지 않고 데이터 가공이 가능해집니다.
제가 참고한 문서에서는 데이터 수집단과 프로세스를 구분하고 이 둘은 큐, 버퍼, 메시징 등을 통해 데이터를 주고 받도록 설계하는 것이 좋다고 조언합니다.

Design for offline behavior

다양한 이유로 인해 디바이스가 인터넷에 연결이 안 될 수 있습니다. 이런 경우를 대비하여 어떤 조치도 하지 않았다면 한참 후에 DB에 특정 디바이스에서 오는 값만 이상한 경우를 발견할 수도 있습니다.(수많은 데이터 중 이상한 점을 발견했다는 거 자체가 운이 좋은 수준의 산업용 IoT라면 더더욱 이 부분이 중요할 것 같습니다.)
따라서 오프라인 상황에서도 어느 정도는 적절하게 동작하도록 설계하는 것이 필요합니다. 또한 모니터링을 통해서 디바이스가 오프라인이 되었다면 신속하게 조치를 취할 수 있도록 설계해야 합니다.

Design lean data at the edge and enrich in the cloud

디바이스에서 받은 데이터에는 어떤 디바이스에서 온 값인지에 대한 정보가 충분하지 않을 가능성이 높습니다. 예를 들어 센서 같은 경우 측정값만 송신하는 경우죠. 이럴 때 이 디바이스가 어떤 디바이스인지 알지 못한다면 받은 값이 온도인지 습도인지조차 알기 어려운 상황이 발생합니다. 이런 상황을 방지하기 위해 클라우드에 데이터를 전송하기 전 디바이스에 대한 정보를 충분히 포함하도록 데이터를 가공하는 것이 좋습니다.

Handle personalization

디바이스에서 일정 부분의 설정은 가능하도록 디바이스를 디자인해야 합니다. 제가 참고한 글에서는 wi-fi 연결을 예시로 들었습니다. 생산 과정에서 wi-fi 아이디와 비밀번호를 고정하여 디바이스를 생산하는 것은 너무 비효율적입니다. 보안 상의 이유로 wi-fi 비밀번호를 변경한다든지 디바이스를 다른 지역으로 옮긴다면 사용할 수 없을 테니까요. 따라서 디바이스에서 wi-fi 아이디와 비밀번호 등을 설정이 가능하도록 해야 합니다.

Ensure that devices regularly send status checks

클라우드 입장에서는 디바이스가 현재 통신이 원활하게 되고 있는지 문제는 없는지 알기 어렵습니다. 현장에서도 수많은 디바이스를 일일이 체크하는 것은 거의 불가능하죠. 따라서 디바이스에서 현재 본인이 잘 동작하고 있다는 신호를 주기적으로 클라우드로 보내주는 것이 좋습니다. 예시로 heart beat 등이 있죠. 디바이스에서 송신하는 매 초마다 증가하는 값으로 만약 값이 변경되지 않는다면 디바이스와의 연결이 끊어진 것으로 간주할 수 있습니다.
비정상적인 상태 값을 만났을 때 cloud에서 어떻게 동작할지도 설계해야 합니다. cloud에서 디바이스에게 값을 요청했는데 응답이 없다면 일정 시간 후 다시 값을 요청합니다. 그런데도 응답이 없다면 담당자에게 확인을 바라는 이메일을 송신하는 식으로요.

결론

  • 클라우드 환경에서는 디바이스에 대해 알기 어렵기 때문에 디바이스 정보, 상태를 주기적으로 클라우드로 보내 모니터링할 수 있도록 설계하는 것이 중요합니다. 또한 디바이스의 일정 부분은 사용자가 설정할 수 있도록 해야 합니다.
  • AWS IoT 이용 테스트베드를 구성할 때 데이터 수집단과 가공단을 분리하는 것이 중요할 것 같습니다. 또한 센서에서 측정한 값만 DB에 저장하는 게 아니라 어떤 센서에서 측정한 값인지를 column 이름에 포함시켜 DB에 저장하는 것이 좋을 듯 합니다.

참고

태그:

카테고리:

업데이트:

댓글남기기