졸업작품 프로젝트에 필요한 첫번 째 기능이다.
Android - Raspberry Pi 간에 쌍방 통신이 필요한데, (간단하게 App, 과 IoT 라고 한다.)
우선 App으로 IoT를 제어하기 위한 통신부터 구현하기로 했다.
1. 서버는 어떤 서버?
서버 개발을 위한 자료수집을 시작하면, 가장 흔하게 LAMP 서버 구축 방식을 접할 수 있다. 그렇지만 우리팀은 웹이 필요없고, 데이터베이스도 필요없었다. 빠르고, 간단하고, 시그널을 보내고 받을 수 있는 서버면 충분했기 때문에,
TCP/IP 서버 - 클라이언트 구조를 선택했다.
2. 서버는 어디에?
서버를 서비스를 제공해주는 주체 라고 본다면, Raspberry Pi에 서버를 심는 것이 가장 적절했다.
하지만 추후 제어를 위해 시그널을 보내는 것 뿐만 아니라, 얼굴인식, 분류 같은 무거운 작업이 필요했기 때문에 클라우드 위에 서버를 올리기로 했다.
3. 서버 개발 언어는?
이전에 프로젝트에서 웹개발을 하기 위해 JAVA Spring 을 잠시 다뤘던 적이 있는데,
Python 으로 서버개발을 시작한다.
이유는 두가지다. 지금사용하기 쉬웠고, 나중에사용하기 쉬울 것 같아서.
추후에 사용할 것으로 예상하는 openCV나, CNN을 사용하는 기계학습 등등 Python으로 다룰 것이 많다는 것이 큰 이유이다.
4. aws EC2 를 시작한다.
클라우드 말만 들어봤지 처음 사용해봤다.
장점을 나열해보자면,
우선 무료다. 대학생 신분에 무료라는 것 하나만으로도 아마존을 사용하는 가장 큰 이유가 될 수 있었다.
두번 째는 너무 많이 친절하다. 당장 연구실 컴퓨터에 우분투를 설치하고, sudo install 을 두드려대지 않아도 기본적인 것들이 모두 깔려 있는 OS가 제공 된다는 점에서 감동받았다..
이 밖에도, 여러 가지 옵션을 선택할 수 있고, key 하나만 공유하면 팀원들과 협업이 간편했고 등등 여러 장점이 있었지만, 다른 클라우드를 사용해 본 적이 없기 때문에 추후에 비교하는 글을 다시 적도록 하겠다.
5. 그렇지만 클라우드가 아닌 에 서버를 개발한다.
aws에 기초적인 소켓프로그래밍 코드들을 가져다가, 간단하게 메세지를 주고받는 정도만 구현해봤는데,,
이게 죽어도 안된다.. 서버는 한창 listening 중인데,,
ip가 잘못되었나, aws에서 접근권한을 설정해주어야 하나 등등 열심히 찾아봤지만 안되길래,,
우선 IoT에 서버를 심어보기로 했다.
5. 결론부터 말하자면,
라즈베리파이에 외부네트워크에서 접근이 안되기 때문이었다... 스마트폰 핫스팟으로 같은 네트워크에 연결했더니 되더라...
완성한 코드를 업로드 하기에는, 너무 간단하고 이것저것 인터넷에서 긁어 만들었기 때문에 추후 좀더 모습을 갖추게 되면 업로드 할 예정이다.
참고했던 사이트를 첨부한다.
https://cosmosjs.blog.me/220834751822
https://socket.io/blog/native-socket-io-and-android/
https://examples.javacodegeeks.com/android/core/socket-core/android-socket-example/