이번 프로젝트에서 가장 어려웠고, 가장 많이 배운 것이다.
여태까지는 아키텍쳐의 중요성을 몰랐다. 웹 개발할 때는 서버, 클라이언트, 디비를 두고 AWS에 배포하여 브라우저로 접근하는 것이 숨쉬듯 당연했다.
그런데 배경지식이 없는 IoT 프로젝트를 하려니 막막하게 다가왔다. 안 그래도 모르겠는데 끊임없이 낯선 용어들이 등장해서 더 어렵게 느껴지고. 일단 해보자는 사람과 아키텍쳐를 정하고 가자는 사람의 대립도 있었다.
기업에 가면 한다는 페이퍼워크 중의 하나가 아키텍쳐를 세우는 일 아닐까. 경험해보지 않은 기술들을 가늠하고, 테스트를 해보고 경우의 수를 생각하고, 비용과 효과를 저울질하고. 과정은 힘들었지만 결과적으론 많이 배우는 계기였다.
처음엔 라즈베리파이를 python으로 제어한다고 생각했다.
그러자 서버와 라즈베리파이는 어떻게 통신하는가 의문이 들었다.
결론적으로 라즈베리파이는 python 외에도 다양한 언어로 제어할 수 있다.
우리는 기본 서버를 Node.js로 개발했는데,
특정 url에 요청을 보내면 센서를 조작하는 로직을 수행하도록 구성했다.
로컬에 있을 때는 Node.js 서버로 라즈베리파이를 제어할 수 있다.
그런데 AWS로 서버를 배포했을 때 클라우드에 있는 서버가 로컬에 있는 라즈베리파이를 제어할 수 있는가 의문이 들었다.
팀원이 브라우저를 통해서 할 수 있다는 가설을 얘기했지만
그러면 모든 해커들이 브라우저로 내 컴퓨터를 헤집어 놓지 않았을까 의문이 들었다.
결론적으로 AWS 서버와 로컬의 라즈베리파이가 통신하려면
from 로컬 to AWS 서버에 지속적으로 신호를 보내야 한다.
그러면 AWS 서버가 로컬의 ip를 확인하고, 정확한 제어를 할 수 있다.
하지만 이를 구현하기에는 시간적 여유가 부족했다.
우리가 택한 방법은 라즈베리파이에 모든 환경(Server + Cloud + DB)를 구성해놓고
클라우드와 통신하지 않은 채로 라즈베리파이 내에서만 작동하도록 하는 것이었다.
애초에 웹과 통신하는 기능이 적었기에 가능했다.
UX를 고려할 때 사용자가 기기를 켰을 때 앱이 자동으로 시작되도록 설정하는 것이 자연스럽다.
pm2는 이것을 설정해주는 프로그램이다.