레이블이 android인 게시물을 표시합니다. 모든 게시물 표시
레이블이 android인 게시물을 표시합니다. 모든 게시물 표시

주식 어플을 만들고 있습니다 (가칭:투자노트)


안녕하세요. 취미 삼아서 어플을 하나 만들고 있습니다. 가치투자를 지향하는 전업투자를 하고 있다보니 종목을 깔아놓고 난 뒤에는 여유가 나는 편이라 이런 저런 취미 생활을 즐기고 있습니다. 오랜만에 짬짬이 코딩중인데, 손 놓은지 오래돼서 꽤 버겁네요. 역시 코딩은 노가다인지라 앱을 만들기 시작하니까 시간이 슬슬 부족해지고 있습니다. 간만에 느끼는 바쁨에서 살아있음을 느낍니다.

실적 시즌이 끝나면 어플의 기능들을 하나씩 다시 업그레이드 할 예정입니다. 일단 지금까지 공개된 기능들을 소개드리겠습니다.

1. 적정주가 관리


가치투자자 누가 안 그렇겠나 싶지만 저도 기업 분석은 치열하게 합니다. 다만, 분석이 끝나면 팔로업은 간단하게 자주해줍니다. 그리고, 적정주가를 정해놓고 적정주가 도달 전까지는 그냥 주식을 보유합니다.

문제는 개인적으로 관리하는 종목이 많다보니 무슨 종목이 적정가가 얼마였던지 자주 잊어버린다는 점 입니다. 아마 제가 머리가 나쁜탓도 있을거구요. 그래서 종목별로 간략하게 투자포인트와 적정가, 상승여력을 엑셀로 정리해서 이용해 왔습니다. 그런데 그걸 쓰다보니 접근성이 떨어져서 잘 안 보게 되고 귀찮아졌습니다. 그리고, 컴퓨터를 잘 안 볼때는 엑셀도 잘 안 열어보게 되구요. 구글 스프레드시트도 써봤지만 폰으로 편집하거나 보는게 불편해서 또 안 보게되고..

그래서 폰으로 적정주가 관리도 편리하게 하고, 한눈에 보기좋게 이용하려고 저 혼자 간단한 도구를 하나 만들어서 사용해 왔습니다. 이번에, 공개하는 투자노트 앱에 그 기능을 넣었습니다. 혼자서 사용할때는 간단하게 만들어서 썼는데, 여러분들에게 공개를 하려니 회원가입이 가능하게 데이터베이스도 만들어야 되고, 의외로 할일이 좀 많았습니다.

2. 다른 투자자들은 어떻게 생각할까?


내 관심종목을 다른 투자자들이 얼마나 관심을 가지고 있는지도 알 수 있습니다. 아직은 몇명이 내 종목에 관심있는지만 구현돼 있습니다. 다른 주주들이 보는 투자포인트와 적정가를 한눈에 볼 수 있는 기능도 추가할 예정입니다. 머릿속으로 그리고 있는 작은 기능들과 빅픽쳐가 쭉 있는데, 하나씩 구현을 해보겠습니다. 유의미하고 재미있는 기능들이 많이 추가될 예정입니다.

3. 현재 시장을 움직이는 핵심 이슈 헤드라인


가치투자를 한다고 해도 시장을 움직이는 가장 큰 헤게모니들에 대해서 관심을 완전히 놓을수는 없습니다. 그렇다고 현실적으로, 쏟아지는 뉴스를 전부 취할수도 없는 노릇입니다. 그래서, 현재 시장에 작용하는 힘, 그 힘 중 가장 강력한 힘이 무엇인가를 알기 위한 뉴스 헤드라인 섹션을 추가하였습니다. 현재 시장이 강세장인지 약세장인지, 현재 시장을 주도하는 힘과 논리가 무엇인지, 현재 시장의 주도주는 무엇인지, 어떤 업황이 잘 나가는지 못 나가는지.. 시장의 가장 핵심적이고 굵직한 뉴스 헤드라인을 실시간으로 보면서 시장 흐름에 대한 감을 잃지 않고 유지할 수 있습니다.

4. 기업분석


제 블로그를 통해서 가끔 공유해드리는 기업 분석 자료들을 앞으로는 투자노트 앱을 통해서도 보실 수 있습니다. 아직까지 알림 기능 등 추가해야 할 부분과 소소한 버그가 있지만, 컨텐츠 자체를 열람하는데는 문제가 없는 상황입니다. 이 부분도 실적시즌이 종료되면 하나씩 고치고 업그레이드 시켜 나가겠습니다.

제가 제공하는 기업분석 자료는 기본적으로 증권사에서도 커버리지 하지 않는 중소형주 중심입니다. 물론, 내재가치보다 시가총액이 낮다면 대형주와 중소형주를 가리지 않습니다만, 주로 중소형주에서 저평가 된 기업이 많고 잠재력이 있는 기업이 많은 것도 사실입니다. Dart에서 시작해서, 여러가지 산업 데이터, 그리고 기업탐방에 이르기까지 다방면으로 조사하고 집중적으로 분석한 리포트들을 공유합니다.

5. 주식 투자 공부


주식 투자에 입문하시는 분들부터 어느 정도 투자 경력이 있으신분들께까지 널리 도움이 될만한 컨텐츠를 제공합니다. 기본적인 투자 방법론에서부터 투자철학, 서적 추전 등에 이르는 전 과정을 포함합니다. 모든 서비스와 자료들이 무료이니 마음껏 이용하시면 됩니다. 제 블로그를 통해서 제공되는 컨텐츠를 이제 앱에서 보실 수 있으며, 블로그에서 하지 못하는 짤막한 메모글들도 올라갑니다.

6. 서비스 운영 철학


"투자에 지속 가능한 불로소득은 없다."라는 머스트투자자문 홈페이지의 문구를 참 좋아합니다. 투자는 당연히 돈을 벌기 위해 하는 행위입니다. 돈을 버는 것은 결과입니다. 그러므로 결과는 중요합니다. 그러나, 저는 과정이 빠진 결과는 아무 의미가 없다고 생각합니다.

많은 사람들이 투자에서 가장 중요한 "과정"을 건너뛰고 결과만 얻기를 원합니다. 주식을 사자마자 수익이 나야 한다고 생각합니다. 조금만 내리면 안절부절 못합니다. 탐욕과 무지가 큰 화를 만듭니다. 급한 마음에 어떤 사람은 비싼돈을 주고 종목 추천을 받습니다. 또, 어떤 사람은 비싼 돈을 주고 강연을 들으러 다닙니다. 또, 어떤 사람은 귀동냥으로 들은 카더라 정보에 의존해서 거금을 배팅합니다.

이런식으로 돈을 벌 수 없을 뿐더러 벌더라도 요행이고, 결국 시간이 갈수록 돈을 잃을것입니다. 과정이 탄탄한 투자자는 몇번의 작은 실수에 무너지지 않습니다. 꾸준히 자산을 불려나가며 더욱 튼튼한 투자자가됩니다. 투자자는 활자, 숫자, 생각, 인내, 통찰과 친해져야 합니다. 많이 읽고 생각할수록 좋은 투자자가 된다고 생각합니다.

누군가가 나에게 물고기를 잡아주지도 않겠지만, 요행수로 한두번씩 남이 잡아주는 물고기를 얻어 먹기만 하면 언젠가는 죽습니다. 내 스스로 물고기 잡는 법도 깨우치고, 물고기가 안 잡히면 과일 따는 법도 배우고 스스로 살아나가야 합니다. 특히, 주식시장은 더욱 그렇습니다. 종목발굴에서, 기업분석, 그리고 투자와 포트폴리오 관리에 이르는 모든 과정을 스스로 결정하고 판단하지 않으면 절대로 생존할 수 없습니다.

스스로 생존할 수 있는 투자자 여러분들과 쭉 동행하고 싶습니다.

참, 그리고 시장 참여자들이 결과가 아니라 과정을 중시한다면 우리나라 금융시장 자체도 튼튼해지리라 믿습니다. 묻지마 투자와 투기가 난무하는 시장은 부실하고, 기업분석에 최선을 다하는 투자자들이 많은 시장은 건전한 시장이라 생각합니다.

다운로드


안드로이드 버전 투자노트 설치


* 아이폰용 앱과 웹버전 서비스는 준비중입니다.

* 기업탐방과 분석, 계좌 포트폴리오 관리, 블로그 운영, 앱 기획과 개발, 그리고 육아까지 한번에 하려니 리소스가 많이 부족합니다. 버그나 부족한 부분들, 추가돼야 하는 기능들은 하나씩 업그레이드 하겠습니다. 다소 부족한 부분이 있으면 의견을 주세요. 늦게라도 반영하겠습니다. 필요한 기능들이 있으시면 그런것도 의견을 주시면 검토후 반영하겠습니다. 서버 비용이 나가고 있으니 많은 분들께서 애용하시면 좋겠습니다. 돈 내면서 공으로 서버를 놀리기는 아깝습니다~^^




조용하지만 폭발적인 레트리카(Retrica) 신드롬


'주인공은 묵묵히 자기 갈길을 가고, 관객들은 늘 무대 뒤에서 주인공 이야기를 한다.'고 합니다.

오늘은 관객이 한번 되어볼까 합니다. 좋은 이야기건 나쁜 이야기건 뒤에서 주인공 이야기를 하고 있는 기분은 보통 유쾌하지 않습니다. 그러나 이번 이야기는 유쾌하게 할 수 있을 것 같습니다. 

제 블로그에 들르시는 분들께라도 꼭 알리고 싶고 또 제 블로그에라도 작은 기록을 남기고 싶어서 글을 쓰게 되었습니다.

세계를 평정한 작은 유틸리티 앱


스마트폰 앱과 그 앱을 만든 개발자에 대해서 기록을 남겨두고자 합니다. 소개드릴 앱은 우리돈으로 1조원에 페이스북에 인수됐던 인스타그램과 비슷한 사진앱입니다. 레트리카(Retrica)라고 부르고요. 필터가 예뻐서 전세계 10대~20대 여성들을 중심으로 선풍적인 인기를 끌었고 최근에는 우리나라 젊은 여성들 사이에서도 조금씩 입소문이 나고 있습니다. 서비스 자체를 영문으로만 제공하고 있기 때문에 이미 글로벌에서 성공해서 외화벌이를 톡톡히 하고 있습니다. 그래서 한국에서는 뒤늦게 유행이 되고 있는 듯 합니다. 최근에 김새론양, 비스트의 이기광군을 비롯해서 몇몇 연예인분들이 즐겨 쓰는 셀카앱으로 바이럴이 되고 있습니다.

올 상반기 세계에서 가장 많이 다운로드 된 유틸리티 앱 순위 <출처:앱애니>

iOS와 안드로이드 양진영 합산, 지구에서 가장 많이 다운로드 받은 유틸리티 애플리케이션 순위입니다. 출처는 '앱애니닷컴'이구요. 쟁쟁한 회사들이 만든 애플리케이션들 입니다. 올 여름 세계에서 가장 많이 다운로드 받은 앱 순위에 떡하니 태극기가 꽂혀 있습니다. 요즘 젊은 친구들이 말하는 '국뽕'은 아니지만 대한민국 국민으로서 자랑스러운건 사실입니다. 그리고 더 자랑스러운건 친한 형이 혼자서 만든 앱이라는 점입니다. (지금은 개발과 운영 규모가 커져서 팀을 빌드하고 있습니다.)

몇개 지표



Retrica의 페이스북 페이지 '좋아요' 수 입니다. 현재는 233만 건 정도고 숫자는 계속 올라가고 있습니다. 참고로 애플사의 페이스북 페이지의 '좋아요' 수는 30만 건 입니다.


iOS 시장에서 200여개가 넘는 나라들을 이미 한번씩 돌아가면서 평정한 상태입니다. 예전엔 랭킹 1위 국가도 많았는데 지금은 랭킹이 조금 내려온 듯 싶네요.


안드로이드 시장은 지금 막 진출해서 랭킹을 올려가고 있습니다.


카카오톡의 검색량을 훌쩍 앞질렀습니다. 심지어 카카오톡의 리즈 시절 검색량보다 더 많은 검색 쿼리를 내는 기염을 토해내고 있습니다.



검색결과는 1,110만건. 아이폰으로만 서비스할 때는 'retrica for android'라는 검색어가 거의 폭주를 하기도 했었습니다. 

DaU는 최근 1,500만까지도 찍고 있다고 합니다.

지금은 레트리카도 팀을 만들기 시작했지만 어쨌든 이 어마어마한 성과들을 1인 개발자가 혼자서 해냈다는게 혀를 내두르게 합니다. 일반 기업체에서 저 정도 퍼포먼스를 내려면 몇명의 기획/개발/마케팅 인력과 인건비가 들어갈지 상상도 안되는군요.

과감한 도전


이 형은 총각 시절에 저랑 원룸에서 함께 동거한 적도 있었죠. 돈이 없어서 저나 형이나 둘다 고생하던 시절이 있었지만 언제나 꿈도 많고 하고 싶은 것도 많은 사람들이었습니다.

형은 사고 방식이 비슷하고 말이 잘 통해서 까칠한 저와도 잘 어울리는 몇 안되는 사람 중 하나였습니다.

직장에 다닐 때를 생각해 보면, '꿈도 많고 하고 싶은건 많은데, 회사를 언젠간 그만 둬야 할텐데..'라고 생각만 하는 선후배와 동료들을 숱하게 봤습니다. 그들중 그말을 실천으로 옮긴 사람은 손에 꼽을 정도입니다.

그 손에 꼽는 사람 중 한명이 이 레트리카 1인 개발자 형입니다.

사실 회사 잘 다니는 형의 가슴에 불은 활활 타고 있었고 기름을 부은 사람은 저라고 할 수도 있지 않을까 생각합니다(ㅋㅋ). 지금은 사기꾼으로 전락했지만 부와 삶의 대한 이론 자체는 훌륭했던 로버트 기요사키의 파이프라인 이론을 형에게 침이 튀도록 설파를 했습니다.

형은 이후에 제 이야기에 대부분 동의하며 우리나라 최고 검색엔진 회사를 뛰쳐나와 작은 회사로 잠시 이직한 후 곧바로 퇴사하고 1인 개발자 생활을 시작합니다.

회사에서 나가야 한다고 설파한 사람은 전데 저보다 훨씬 일찍 독립한게 아이러니입니다. 이 형의 실행력이 저보다 한수 위라고 할 수 있습니다.

저는 그 이후에 2년 남짓 있다가 독립을 했네요. 10대 시절 작은 IT 회사 창업 멤버로 참여하고 이후 20대에도 숱하게 작은 회사들을 창업하고 망가뜨리면서 얻었던 삶에 대한 중압감과 공포감이 저를 섣불리 움직이지 못하게 했던 요인 중 하나였습니다.

어쨌든 이형이 맨몸으로 월급쟁이 생활을 끝장내고 1인 기업가가 되기로 했을 때는 이미 결혼을 한 몸이었고 갓난 아기도 있었습니다. 형의 과감한 도전은 한동안 시련을 겪은 듯 했습니다. 한동안은 몰골이 좀 안 좋았습니다. 그도 그럴것이 아기 키우는데는 돈도 많이 들어가니까요. (ㅎㅎ)


그동안은 저도 정신없이 바빠서 옆에서 형을 지켜보지는 못했지만 부지런히 여러가지 앱을 출시하는 것을 온라인으로나마 지켜봤습니다.

그 중 레트리카가 터져 준 것 입니다. 레트리카가 글로벌 시장에서 초대박이 난 걸 보면서 짧지 않은 시간 함께 서비스를 만들었었던 동료로서, 또 한집에 같이 살았던 동생으로서 몹시 기뻤습니다.

린 개발(Lean product development)


저와 인생관이 비슷한 형이라 친하게 지낼 수 있었지만 서비스 개발에 있어서도 정말 비슷한 생각을 가지고 있었습니다. 그게 몇년전부터 이름이 붙여져 널리 알려지기 시작한 '린 개발' 방법론입니다.

린 개발이라는 말이 생기기 전부터 사실 많은 개발자들이 린 개발 방식을 따랐습니다. 핵심은 '행동과 실행에 집중하고 불필요한 낭비는 모두 제거한다'입니다.

회사에 속해 있으면 린 개발 옹호론자들은 극심한 피로를 느낍니다. 한명이서 해도 될일을 수십명이 붙어서 처리하고, 5분이면 끝낼 일을 이틀이 걸리도록 처리를 못하고 있고, 그냥 후다닥 두드려서 만들어 내면 될 걸 기획서를 그린다고 엄청난 시간을 잡아 먹습니다.

물론 팀으로 일해야 하는 특성을 무시할 수는 없습니다만 린 개발자들이 조직에 속해있다가 1인 개발자로 독립해서 활약을 하면 조직에 있을때와 비교도 할 수 없을만큼 퍼포먼스가 달라집니다.

불필요한 기획서는 필요없죠. 통밥 때려서 '이 정도 마켓 사이즈구나, 이렇게 저렇게 만들면 되겠구나..' 머리로만 구상하고 곧바로 코딩 작업에 들어갑니다. 아는거 모르는거 다 필요없고 일단 만들고 봅니다.

만들면서 배우고, 만들면서 수정하고, 일단 작은 기능이라도 론칭해놓고 이용자 요구에 따라 수정해 나갑니다. 실행이 강력한 무기인 셈입니다. 이 빠른 세상에서 나 혼자 완벽함을 추구하다가 영원히 서비스 론칭을 못할수도 있습니다. 시간과 효율, 공격적인 실행력으로 승부를 보는 것 입니다. 레트리카도 '린 개발'이라는 강력한 방법론 하에 태어난 작품이라 볼 수 있습니다.

물론 1인 개발자 혼자서 처리할 수 없을 만큼 업무량이 폭증하면 그때부터는 팀을 짜고 사람을 채용해야 합니다만 일정 수준의 서비스 까지는 1인 개발자 혼자서 '린 개발'을 하는 것이 효율적입니다.

이렇게 할 수 있으려면 풍부한 개발 경험과 잡다한 업무처리 능력 그리고 세상을 읽는 통찰력도 필요합니다.

1인 개발자라고 해서 코딩만 해야하는 건 아니니까요.

마케팅 하지 않는다, 나대지(!) 않는다


스타트업 하시는 분들 중에 많은 분들이 조금만 성과가 나면 SNS에 자랑을 합니다. 일종의 이미지 메이킹입니다. 엄청 요란하게 자랑합니다. 그리고 인지도가 조금만 생겼다 하면 언론에 등장해서 언론 플레이하기에 바쁜 스타트업 사장님들도 많죠.

마켓에 올려놓은 앱 소개글들을 봐도 마케팅에 혈안이 된 문구를 많이 볼 수 있습니다. '안드로이드 최고, 카테고리 1위, 한국 1위, 최초, 최대, 최고....' 뭔 1위랑 최대, 최고는 이렇게 많은건지...

서비스와 회사에 알맹이가 가득 차 있다면 마케팅에 혈안이 될 필요도 없고, 과장된 문구로 소비자를 현혹시킬 필요도 없습니다. 프로덕트에 온전히 집중을 하고 선택은 소비자가 해주는 것이죠.

마켓에 올라간 레트리카 소개글을 보면 미사여구가 전혀 없습니다. 제목 낚시도 없고, 키워드 낚시 같은 것도 전혀 없습니다. 그냥 제목은 'Retrica' 끝이고 소개글과 이미지도 심플하게 필요한 것만 들어가 있고 SEO 낚시 같은건 안합니다. 그래도 다운로드 숫자는 끝내줍니다. 매니아들도 세계적으로 많습니다. 핵심이 무엇인가 다시한번 생각하게 합니다.

해외 유력 언론사들이 레트리카에 대해서 소개하긴 했지만 국내 언론사에서 레트리카 측 인터뷰 기사 같은건 찾아볼 수 없습니다. 보통의 스타트업 창업자라면 다운로드 10만이나 100만만 넘었어도 신문사에 전화기를 돌려대면서 '우리 이만큼 성공했어요. 인터뷰 좀 시켜주세요.' 하면서 언론 플레이를 했을텐데.. 그와는 대조적 모습입니다.

요즘 소프트웨어 스타트업쪽을 보면 컴퓨터를 좋아하는 사람들 보다 명문대 학위가 있는 사람들이 득세를 하고, 또 그런 사람들 중 혼신의 힘을 다해서 회사를 키울 생각을 하기 보다는 'VC한테 투자 받고, 언플해서 인지도 키운후에 EXIT해서 목돈이나 챙기자' 하는 마인드의 사장님들이 많이 보입니다. 전부 그렇다는게 아니라 자주 그런 분들이 보인다는 이야기입니다.

소위 말해 나대는거(!)나 언론플레이, 창업한 회사에서 투자금을 회수하고 EXIT 하는 것 자체가 나쁘다는 이야기가 아닙니다. 각자 갈 길이 다르고, 전략이 다르고, 비전이 다른 점은 인정합니다.

제가 말씀 드리고자 하는 것은 창업가의 진심과 비지니스 본질에 집중하는 몰입의 힘이 필요하다는 이야기입니다.

어쨌든 이래저래 떠들지도 않고 조용하지만 강력한 레트리카의 돌풍. 이게 더 멋있지 않나요?

굉장한 시대에 사는 우리


산업 시대에서 서비스업 시대로 넘어오면서 매뉴얼이 체계화 된 맥도널드의 근로자 1명은 산업 시대 근로자 40명의 역할을 한다고 합니다. 중구난방 일 하는 것 보다는 체계적인 매뉴얼대로 일하는 것이 효율이 높은건 당연합니다.

서비스업 시대에서 다시 정보와 정신 노동의 시대로 넘어오면서 프로그래머 1명은 산업 시대 근로자 수천명, 역량에 따라 수만명이나 수백만명의 역할을 대신할 수 있다고 합니다.

레트리카의 성공을 옆에서 지켜보면서 실제로 그게 가능한 시대임을 실감하고 있습니다. 머리에 있는 지식과 손가락만 있으면 전세계 수억명의 사람들에게 영향력을 행사할 수 있는 정신 노동의 시대입니다.

제가 발을 걸치고 있는 또 다른 분야인 금융 분야에서도 정신 노동인 주식 투자 행위만으로 일가를 이룬 형님들이 있습니다.

가방에 노트북 하나만 있으면 지구 어디서든 일을 할 수 있고, 일 하고 싶을 때 일 할 수 있으며 수 많은 사람들에게 영향력을 행사하며 부가적으로 막대한 돈도 벌 수 있는 시대입니다.

이런 굉장한 시대에 살고 있는 우리들은 행운아입니다.

오늘은 관객의 입장에서 주인공 이야기를 조금 써 봤습니다. 모두 즐거운 하루 되세요.

2014년 9월 2일
송종식 드림


안드로이드 앱, 태블릿 PC에서만 인터넷 체크 구문 익셉션 발생


첫 앱을 론칭하고 10일만에 별다른 홍보 없이 130만 페이지뷰를 달성하면서 순항을 하고 있었습니다. 그러던 중 애널리틱스 로그와 플레이마켓 개발자 콘솔에서 익셉션 접수가 밀려 들어오기 시작했습니다. 론칭 초기에 하루 66건의 익셉션이 모두 태블릿 PC에서만 발생했습니다.

66건의 익셉션 모두 앱을 시작할 때 onstart() 메소드안에 구현해 놓은 인터넷 접속 여부를 체크하는 구문에서 발생했습니다. 익셉션이 다발로 터지고 있던 구문은 다음과 같습니다.

cManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo mobile;
NetworkInfo wifi;

mobile = cManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
wifi = cManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

if (mobile.isConnected() || wifi.isConnected()) {
  Toast.makeText(MainActivity.this, "환영!", Toast.LENGTH_LONG).show();
} else {
  Toast.makeText(MainActivity.this, "네트워크확인", Toast.LENGTH_LONG).show();
}

이 구문을 이틀넘게 요리조리 뜯어봤습니다. 아무리 봐도 이상한 부분은 없었습니다. 와이파이나 LTE, 3G 같은 데이터 통신을 할 수 있는 상태면 '환영!'이라는 토스트 메시지를 출력하면 되고 인터넷을 쓸 수 없는 상황이면 '네트워크확인'이라는 토스트를 띄워주면 그만이었죠. 아무리 생각해도 이 구문에서 익셉션이 발생할리가 없어 보였습니다.

태블릿, 그 중에서도 갤럭시 TAB시리즈에서 압도적으로 문제가 생기고 있었고 TAB 유저를 중심으로 태블릿 이용자들 대부분이 아예 제앱을 쓰지 못하고 있었습니다. 시간이 갈수록 고객 누수가 생긴다는 불안감이 커져갔습니다.

여기저기 다니면서 갤럭시TAB이라는 탭은 모조리 테스트를 다 해봤는데 제가 테스트 했던 갤럭시TAB에서는 제 앱이 잘 작동했습니다.

그리고 또 이상한 점이 있었습니다. 전체 방문 비율에서 매우 적은 비율을 차지 하기는 하지만 제 앱을 잘 사용하는 분들 중 태블릿 유저도 있기는 있었습니다. 개중에는 갤럭시TAB 유저도 몇몇 있었구요.

이렇게 되다보니 익셉션이 미궁으로 빠지게 되었습니다. 분명히 태블릿PC 유저들 중심으로 인터넷 접속 체크를 하는 구문에서 대량으로 익셉션이 생겨서 제 앱을 쓰지도 못하고 튕겨나가고 있는데 속은 타들어 갔습니다.

사흘 정도 지나자 유저들은 더 이상 참아주지 않았습니다. 평점 4.5 이상을 유지하고 있던 별점이 조금씩 깎여나가기 시작했습니다. 미국, 스페인, 한국 등지의 유저들이 '왜 태블릿에서 앱이 동작 안하냐?'며 리뷰란에 문의를 하기 시작했고, CS메일 계정으로도 문의 메일이 들어오기 시작했습니다.

주식 투자를 하면서 취미로 시작한 앱 개발이라고는 하지만 솔직히 조금씩 스트레스를 받기 시작했습니다.

그러던 어느날 문득, 문제 해결의 실마리가 될만한 아이디어가 지나갔습니다.

태블릿 PC를 구매할 때, 통신 요금제 적용을 받지 않는 '와이파이 전용' 태블릿 PC가 있다는 사실이 떠올랐습니다. 그렇다면 와이파이 전용 태블릿 PC에서는 'ConnectivityManager'나 'ConnectivityManager.TYPE_MOBILE' 중 하나가 null 값을 리턴 할수도 있겠다는 생각이 들었습니다. 이 가설을 가지고 스택오버플로우에 검색을 해보니 아니나 다를까 이미 이 문제로 앱이 crush 돼 문의를 올린 사례가 많았습니다.

스택오버플로우는 위대합니다. 제가 겪고 있는 문제는 이미 누군가가 다 겪었던 문제로군요.

어쨌든 와이파이 전용 태블릿 PC를 위해서 코드를 몇 줄 더 추가해서 인터넷 접속 여부를 확인하는 구문은 아래와 같이 방어 코딩하여 수정하였습니다.
ConnectivityManager cManager = null;
cManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);

// ConnectivityManager가 null일 경우를 위한 방어 코딩
if (cManager != null) {
  
  NetworkInfo mobile;
  NetworkInfo wifi;
   
  mobile = cManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
  wifi = cManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

  // ConnectivityManager.TYPE_MOBILE이 리턴되지 않는 경우를 대비한 방어 코드 추가
  if (mobile != null && mobile.isConnected() || wifi.isConnected()) {
    Toast.makeText(MainActivity.this, "환영!", Toast.LENGTH_LONG).show();
  } else {
    Toast.makeText(MainActivity.this, "네트워크확인", Toast.LENGTH_LONG).show();
  }

} else {
  return;
}

이렇게 컨넥티비티매니저와 TYPE_MOBILE이 null로 리턴되는 경우를 위해 방어 코딩을 추가하니 태블릿 PC 에서 앱을 시작할 때 발생하던 익셉션이 하나도 발생하지 않게 되었습니다.

문제를 해결하고나니 허탈한 기분까지 들었습니다. 안드로이드 개발의 경우에는 기기도 다양하고 특수 상황도 많아서 정말 다양한 환경에 대응을 해야하는데 이번 경우는 정말 문제 원인을 알아내는 것도 힘들었고 수수께끼를 푸는 기분이었습니다.

이번일로 어쨌든 와이파이 전용 태블릿 PC에서는 인터넷 접속 체크 구문을 위와 같이 방어 코딩을 해야 한다는 점을 숙지하게 되었습니다. 사흘간 수백명의 유저를 잃고 얻은 경험입니다.

2014년 6월 28일
송종식 드림