본문 바로가기
학교수업[프로젝트]/개별 프로젝트

클라우드iot서비스 [Sleeper : 라즈베리파이, fitbit band를 활용한 수면관리 서비스]

by wcwdfu 2025. 1. 2.

4학년 1학기 클라우드iot서비스 과목을 수강했습니다. [ 최종 성적 : B+ ]

 

 따지고보면 4학년 2학기를 마친 지금 이미 6개월도 더 전의 내용이지만, 학부생시절에 기필코 여러가지를 경험해보고싶다는 제 신념과 더불어 기록을 남기자는 관점에 과거기억을 더듬으며 글을 남겨보고자 합니다.

 

 역시 자리에 앉아서 교수님얘기만 듣고있는것보다 직접 부딪혀가면서 뭔가를 만들고 해결하는 과정 그자체가 돌이켜보면 참 좋은 경험들로 남게되는것 같습니다. 이 수업에서는 스마트 헬스케어 서비스 등과 같이 iot서비스와 관련한 전반적인 동향과 더불어 그것을 비슷하게나마 구현해보는 귀중한 경험을 해볼 수 있는 수업이였습니다. 필기시험 없이 한 학기 전체가 조사+보고서작성+프로젝트 제작등으로 진행되었습니다. aws의 람다서비스를 필두로 하여 서버리스 아키텍처에 대한 첫 경험과 더불어 라즈베리4의 여러 센서, 신체에 착용하는 fitbit band를 통해 수집한 데이터들과 웹 상의 서비스로 결합하는 하나의 프로젝트를 만드는것을 수행하였습니다.

 

 당연히 주제는 현 수업과 프로젝트 성격을 고려해봤을때, 수면관련 서비스가 적절하다고 판단, 제가 제안을하였고 그대로 진행하게 되었습니다. 온도,습도,조도,소리 센서 등을 통한 데이터를 기반으로 적절한 수면환경인지 체크해주고 fitbit band의 측정된 수면데이터에 따라서 환경에 따라 건강한 수면을 했는지 사용자에게 웹상으로 알려주는 서비스. 이름하야 'Sleeper'프로젝트를 진행하였습니다. 

 

 또한 실험적인 성격을 더해서 팀원중 한명이 학교기숙사를 이용함에 따라 기숙사 환경의 일주일간의 수면환경 데이터와 수면하는동안 핏빗밴드를 착용하고 얻어진 데이터를 통해 어떤 결과가 나오는지 확인해보기로 하였습니다.

우리 Sleeper 서비스의 소프트웨어 아키텍처는 다음과 같습니다.

 1. 데이터들은 라즈베리4의 온/습도 센서, 조도센서, 소음 센서로 부터 4가지 값들과 핏빗밴드의 수면데이터들을 받습니다. 센서들로부터 획득된 데이터들은 mqtt protocol을 통해서 토픽 데이터를 게시하고(publish) iot core가 이를 구독(subscribe)하는 형태로 데이터를 받아오게 됩니다.

2. DB가 몽고와 S3로 두개 있는 이유가 수업당시 해당부분에 대한 언급이 상당히 이상했던것으로 기억합니다. 어찌어찌 저희도 지시사항에 따라 두가지를 사용하게 되었는데 아마도 각 원천데이터들을 저장하기위한 db로써 사용했던것 같습니다.

3. 앞서 언급했듯 서버리스 아키텍처를 사용하면서 api gateway는 외부로부터 요청되는 resful api 에 따라 내부의 람다함수나 다른 aws서비스로 연결해주는 역할을 수행합니다.

4. 데이터 시각화를 위해서 경험차원에서 한번 써보자는 취지로 aws 글루, 아데나, 퀵사이트 를 사용해보았습니다. s3에 저장된 데이터를 기반으로 글루 크롤러를 통해서 스키마(테이블구조)를 가져오게 됩니다. 그러면 아데나를 통해서 질의( query)를 통해 원하는 날짜 등과 같은 기간조회를 수행하게 됩니다. 최종적으로 시각화 도구인 퀵사이트를 통해 전 쿼리문을 통해 얻은 데이터셋에 대한 시각화를 진행하게 됩니다.

5. 당시 교수님이 ai와의 결합얘기도 언급함에 따라 저희팀은 웹 서비스를 구상함에 있어 chat gpt api를 통해 수면관리 전문가라는 역할을주어 웹서비스 사용자가 사용가능하게 설계하였습니다.

 

 

다음은 라즈베리파이의 센서값이 잘 수집이 되는지, 수집된 데이터들이 몽고db에 잘 저장이 되는지 테스트하는 부분입니다. 해당부분에 대해서 명확히 기억이 나지않는게 데이터가 실시간으로 저장이 됬었는지, 5~10분정도의 간격마다 전달이 되는방식이였는지 지금은 헷갈리는 것 같습니다.

 

 

다음은 s3상에서 각 센서별 데이터, 핏빗밴드의 데이터(맨 우측사진)이 잘 저장되어지는지 확인한 부분입니다.

 

 

 

 다음은 데이터 시각화에 대한 부분입니다. 궁극적으로는 아래서 보여줄 웹사이트에서 시각화된 최종결과를 조회가능하게 출력해주는 것으로 목표했었습니다. 하지만 당시 저를포함한 모든팀원의 6전공 +시험기간의 겹침 이슈로 인해 시각화 까지는 성공했으나, 시각화된 데이터를 웹사이트에서 조회가능하고 출력하게 하는것까지는 실패하게됩니다.

 핏빗밴드의 수면데이터는 녹색형광펜표시된 글과 같이 크게 단순히4단계로써 일정시간마다 잠의깊이에 대해 하나의 단어로 표시해주는 방식이였고, 그에 맞게 매핑을 해둔 상태입니다.

 

 우리 서비스의 웹사이트 입니다. ec2를 통해 최종발표당시에만 띄워 진행하였습니다. 본 프로젝트에서는 웹사이트를 구현하는게 핵심task가 전혀아니였기 때문에 잘 디자인된 open source를 이용해서 저희서비스의 색깔만 덧입히는식으로 구현해 웹디자인에는 큰 시간은 소요되지 않았습니다.

 목표한것으로는 우측사진 기준으로 년도,월,일을 선택하면 해당 날짜에대한 수면데이터를 시각화해서 보여주는것을 목표로 했지만 실패하고 원천데이터가 그대로 출력되는것으로 하였습니다. 그 아래 ai에게 수면데이터에 대한 질문하는것은 chat gpt api를 통해서 사용자가 질문을 넣으면, 답변이 실시간으로 출력되도록 하여 해당부분은 잘 수행되는것으로 마무리 하였습니다.

 

 

 사진과 같은 결과를 확인해볼 수 있었습니다.

 

 

 기숙사환경의 일주일간의 실험에 따른 결과는 사실 크게 유의미하진 않았습니다 ^^.. 당시가 여름이였고 기숙사는 에이컨을 틀 수 있었기때문에 7일내내 비슷한 결과만을 확인해볼 수 있던것으로 마무리 되었습니다.