본문 바로가기

개발/Android 개발 주저리

Android 핫스팟(테더링)을 스마트하게 쓰기위한 모와(Mowa) 개발기

모와(Mowa) 서비스 소개 보기



핫스팟 일명 테더링 이란 무엇일까요?

사전적 의미로 딱딱하게 말하면 아래와 같습니다.



테더링(영어: tethering)은 인터넷 접속이 가능한 기기를 이용하여, 다른 기기에도 인터넷에 접속할 수 있게 해주는 기술이다. 블루투스 무선 기술이나 USB 케이블 등으로 두 기기를 연결하여 사용할 수 있으며, 이때 인터넷 접속이 가능한 기기가 다른 기기의 모뎀 역할을 하게 된다.

- 위키피디아



한마디로 요약하면 3G/LTE가 되는 휴대폰의 데이터를 사용할 수 있게 하는 기능!

즉, 휴대폰의 3G/LTE 데이터를 Wi-Fi로 바꿔주는 기능이며 다른 기기에서 인터넷을 할 수 있게 하는것이죠!

근데 이게 응근 사용하기 불편합니다  이기능 자체를 모르시는 분들도 많구요!



그래서! 생각했습니다(지극히 개인적)

이런식으론 사용할순 없을까?


1. 테더링을 알림 메뉴나 설정에 들어갈 필요가 없도록

2. AP이름, 비밀번호 등을 쉽게 바꿀 수 있도록

3. 테더링으로 사용된 데이터를 공유중에 얼마인지 볼 수 있도록( 데이터 사용량을 볼수는 있지만 "설정-데이터네트워크" 에서 찾아야함 )

4. 핫스팟을 공유한 기록을 보고싶다( 언제 어디서 몇분동안 어느정도의 데이터를 썼는가!? )

5. 공유시간/공유데이터량을 제한해서 사용하고싶다( 용량 넘어가면 자동으로 꺼지게)

6. 마지막으로 재미삼아 다같이 써보고 싶다(?)( 뭐그냥 소소하게 레벨이나 사용량 랭킹같은거.. )



생각한 김에 그냥 만들어버렸습니다.

아이폰 버전도 고려했으나 정책상 테더링 자체를 제어할 수 없기 때문에 일단은 안드로이드 버전만 만들었습니다ㅠㅠ

전체적인 개발기를 써보도록 하겠습니다.

저는 취미삼아 서비스를 개발하는데 이왕 만드는거 재대로 하자는 주의라서 항상 다 갖추려고 노력합니다!



어떤식으로 했나?


1. 서비스 이름


모와가 무엇일까요?

모와(Mowa) = "두의이파이" 에서 모,와 를 따서 모와 입니다.


나름 Logo 에는 의미도 부여했습니다.

어떤 의미인지 아시겠나요?

단순합니다.  모와(MoWa) 에서 M과 W를 뜻하면서 Microwave의 신호모양을 띄고 있습니다.

즉 모와는 무선신호를 공유한다 라는 의미를 담고 있죠




2. 도메인을 구입

이름을 정하고 com을 가장 먼저 찾아봤지만 역시 있더군요.. 그래서 그냥 mowa.kr 로 결정하고 구매했습니다!

주소: https://www.mowa.kr




3. 기술검토

Android 앱단에서 기술검토가 필요했습니다. 일단은 하드웨어를 제어해야 하니까요


1. 테더링 자체를 앱단에서 On/Off가 가능한지?

가능했습니다. 하지만 문제점이 있더군요 Android 6.x 부터는 사용할 수 없도록 바뀌었습니다.

 일단 빌드타겟을 22로 두고 개발을 했습니다 Android N 까지 정상제어가 되더군요 

하지만 차후에 N이후에서는 아예 막힐 수 있으므로 On/Off화면으로 이동시킨뒤 직접 켤 수 있도록 처리는 해두었습니다( Power 주.석.처.리 )


2. 실시간 감시

데이터,시간을 제한하거나 공유내역을 기록하려면 실시간 감시가 필요했습니다.

이부분은 Service + broadcastreceiver 로 액션을 잡아 처리하였고 백그라운드에서 공유시에는 10초마다, 앱실행중엔 1초마다 체크하고 있습니다.


3. 데이터 저장

저장시간과 딜레이를 줄이기 위해서 로컬에 공유한 데이터를 저장해야 했습니다.

SQLite를 사용하려고 했으나, 이왕 취미로 하는거 Realm을 이용해서 로컬에 데이터를 저장하고 있습니다.

비로그인시에는 로컬에만 저장되어지고 로그인후 설정에 따라 서버와 데이터를 동기화 하고 있습니다.




4. 디자인 구상

Pinterest , Dribbble 등에서 앱 UI에 대한 조사


고려사항

- 메인화면은 공유량과 테더링을 직접 제어할 수 있어야 한다.

- 공유에 대한 기본적인 사항이 표시되어야한다.

- 쓰기 쉬워야 한다.


메인화면 변천사

- 드로우 메뉴를 사용하자 > 만들고나니 별로.. 사용성 및 직관성 떨어짐

- 탭메뉴를 사용하자 > 하단,상단 탭메뉴 2가지 방식으로 해보았지만 UI가 너무 복잡해짐

- 기능제어, 필수 항목만 표시 하도록 구성 > 문제는 다른 메뉴를 넣을공간이 없음


결론

- 필수메뉴를 제외하고는 모두 숨김( 예로 설정버튼 및 통계를 마이페이지에 통합 )

- 기능 자체를 사용함에 있어 필요한 부분부분에 메뉴를 배치( 흐름에 따라 자연스럽게 움직이게 )




5. 앱단 기본 기능개발

- 테더링 On/Off

- On/Off 가능한 위젯

- 공유기록

- AP설정 관리( 여러개 등록 )

- 기본적인 통계

- 사용량 제한

- 기타등등




6. 백엔드

DB

- MySQL 5.6


언어

- API:  JAVA 1.8

- WEB: PHP 5.6


framework

- Spring Boot 1.3.x + JPA


SSL

- let's encrypt 

무료이지만 강력합니다! 하지만 6개월마다 갱신해야 하는 단점이...



SERVER

- DB: AWS RDS

- API: Conoha VPS

일단 기존에 가지고 있는 서버+싼거 로 하다보니 분리되어버렸습니다

DB를 AWS에 해둔이유는 API서버도 차후 AWS로 옮기려는 목적이있습니다.

Conoha에 크레딧이 있어서 그걸 다 소비하기 전까지만 사용하려구요


    < Mowa 기본 구조 >

* api gateway 를 따로 빼려고 했는데 규모에 비해 그정도까진 필요없어서 일단 매 API마다 토큰을 검사하도록 했습니다.



Push

- Google Firebase의 FCM 을 사용합니다.



Deploy

- github 의 master 에 변경내역이 있을경우 API서버에서 maven build 를 진행하고 성공시 서버에 자동으로 배포되도록 간단하게 구성

 



7. 본격적인 앱개발

API연동은 Android의 대표 네트워크 라이브러리인 OkHttp + retrofit 를 이용하여 처리

그외 앱분석은 Firebase analytics를 사용하였으며 Crash 수집은 Crashlytics(Fabric)를 이용하고 있습니다.




8. 테스트

- 스타벅스, 지하철, 공원 등에서 Mowa앱으로 데이터 공유 시전!

( AP 이름은 약간의 낚시를 위해서.. Free-Wifi , 3호선 무료와이파이 , 스타벅스 2F 등으로.. )

- 접속하는 사람들 응근 있음!! 데이터 사용량 폭팔!!

- 엄청난 뿌듯함!ㅎㅎ

- 근데 앱이 죽음..

- 고침

- 무한 반복

- 현재 진행형




9. 개발 기간

초기 기획부터 출시까지 총기간은 한... 3~4개월정도 걸린듯합니다.

계속 매달린게 아니라 했다가 안했다가를 반복하다보니 좀 길어졌네요


총 개발기간: 2016년 3월 ~ 6월 16일(최초 스토어 등록일)





마지막으로..

- 별거 없지만 모와는 차후 앱,서버 등을 모두 오픈소스로 공개할 예정입니다.( 그 일정은 언제일지 모르나... )

- 아직 내공이 부족하여 좀더 좋게 만들지 못했습니다.. 이런식으로 스스로에 대한 부족함을 느끼며 많이 배워야겠다는 생각이 듭니다.


----


모와(Mowa) 서비스 소개 보기


모와(Mowa) for Android 다운로드