동방에 누구 있나요? Wi-Fi 신호로 특정 공간에 있는 사람 확인하기
안녕하세요, SPARCS에서 개발자로 활동 중인 snowsuno 권순호입니다.
SPARCS에는 동아리 방을 이용하는 회원들의 편의를 위한 DONGBANG
이라는 내부 서비스가 있습니다. 여러 가지 기능이 있지만, 그 중에서도 가장 핵심 기능은 바로 동아리 방(이하 동방)에 누가 있는지 실시간으로 알려 주는 기능입니다.
위 그림처럼 DONGBANG
서비스는 사용자의 어떠한 액션 없이도 자동으로 SPARCS 동방에 있는 사람들이 누구인지 표시해 줍니다.
어떻게 동방에 누가 있는지를 알고, 이를 표시해 주는 걸까요?
이 포스트에서는 DONGBANG
서비스,
그 중에서 특히 동방에 누가 있는지 알려주는 이 기능의 원리와 이를 구현한 과정, 그리고 그 과정에서 부딛히게 된 여러 문제들을 모두 하나하나 따라가면서
이 서비스가 어떻게 동작하는지에 대해 적어보려 합니다.
간단한 원리부터
그렇다면 그래서 DONGBANG
은 어떤 원리로 사람이 동방에 있는지 알 수 있는 것일까요?
그 답은 바로 Wi-Fi에 있습니다. 동방 Wi-Fi에 연결되어 있는 디바이스를 기반으로 어떤 회원이 동방에 있는지 판단하는 것입니다. 얼핏 보면 간단해 보이지만, 이 기능을 실제 구현하여 동방에 누가 있는지를 알기 위해서는 훨씬 더 복잡한 과정이 필요합니다.
Wi-Fi에 연결된 기기 받아오기
먼저 와이파이에 연결된 기기들을 받아올 수 있는 방법이 필요하겠죠? 공유기의 종류나 제조사에 따라서 조금씩은 다르겠지만, SPARCS 동방에 있는 Wi-Fi의 경우, 관리자 API를 통해 접속 중인 기기 정보를 가져올 수 있습니다.
이를 위해 동아리 방에 raspberry pi를 설치하여 연결된 기기의 목록을 받아와 DONGBANG
서비스의 서버로 전송하도록 하였습니다. 관리자 API를 포워딩하여 외부의 서비스 서버가 직접 요청하도록 하는 방식도 가능하나, 보안적 측면과 후술할 추가적인 절차의 필요성으로 인해 동아리 방의 로컬 네트워크 망에 실제 기기를 설치하는 방법을 선택하게 되었습니다.
여기까지 오면 거의 다 왔다고 생각하시겠지만, 사실 이제부터가 시작입니다. 왜냐하면 여기에서 받아올 수 있는 정보는 기기의 (보통은 랜덤화된) MAC 주소와, 그 기기에 현재 할당되어 있는 로컬 IP 뿐이기 때문이죠. 즉, 관리자 API만으로는 연결되어 있는 기기들은 알 수 있지만, 그 기기가 누구의 것인지는 알 수 있는 방법이 없습니다.