레이블이 안드로이드인 게시물을 표시합니다. 모든 게시물 표시
레이블이 안드로이드인 게시물을 표시합니다. 모든 게시물 표시
2021년 4월 5일 월요일

오랜만에 코딩 좀 하려고 봤더니, 아이오닉의 변화가 상당하네

방치했던 주식 앱도 손을 좀 보고 싶고, 추가하고 싶은 기능이 생겼다. 그리고 만들고 싶은 앱이 몇개 생겼다. 그래서 오랜만에 취미삼아 개인 프로젝트를 좀 해볼까 싶었다. 

근래 익숙했던 아이오닉을 사용할지 아니면 플러터를 사용할지 아주 잠시 고민에 빠졌다.

플러터와 아이오닉은 모두 원소스 멀티유즈가 가능한 개발 플랫폼이다. 1인 개발자가 사용하기엔 정말 좋은 도구다. 하나의 코드베이스로 안드로이드, iOS, 웹(+pwa) 등 다양한 플랫폼에 대응 가능한 결과물을 빌드할 수 있는 것이 큰 장점이다.

다만 미묘한 차이가 있다. 플러터는 코드를 컴파일 하면 앱이 네이티브 수준에서 작동한다. 반면에 아이오닉은 웹뷰 기반이다. 당연히, 앱의 성능은 물론이고 미묘한 화면 처리는 플러터가 월등히 우월하다. 그렇다고 해서 코르도바를 기반으로 한 아이오닉의 성능이 못 쓸 정도도 아니다.

아이오닉은 기존에 HTML, CSS, JS를 잘 사용했던 사람이라면 비교적 금방 익숙해 질 수 있다. 물론 앵귤러를 써 보지 않은 사람에겐 러닝커브가 없진 않다.

나는 오래전부터 꾸준히 아이오닉을 사용해 왔기 때문에 아이오닉을 사용하는 편이 편하다. 플러터를 쓰려면 Dart라는 언어를 새로 배워야 하고 플러터 프로젝트의 구성에 대해서도 공부를 해야하는 등 비교적 가파른 러닝 커브가 발생하기 때문이었다.

아이오닉은 다 좋은데 Angular 베이스라서 약간 마음에 안 드는 부분이 있었다. 그래서 이참에 플러터를 한번 공부해볼까 싶었다. 플러터와 아이오닉 사이에서 마음의 결정을 못 하고 있다가, 우연히 아이오닉 공식 사이트를 보고 깜짝 놀랐다.

기존에 아이오닉으로 만들어뒀던 아이오닉 기반의 레거시 코드를 업데이트 정도는 해야겠다 싶어서 아이오닉 사이트에 들어간 것이었다. 한동안 못 봤던 사이에 아이오닉은 버전이 많이 업그레이드 되어 있었다. 네이티브 기능들도 과거보다 조금 더 잘 지원하고, UI컴포넌트의 갯수도 훨씬 더 많이 늘어났고, 품질도 높아져 있었다.

무엇보다 놀랐던 것은 아이오닉이 이제 더는 앵귤러 베이스의 도구가 아니라는 점이었다.

이제는 아이오닉 프로젝트를 시작하기 전에 리액트, 앵귤러, 뷰 중에서 원하는 자바스크립트 프레임워크나 라이브러리를 선택할 수 있는 기능이 생겼다. 아이오닉 프레임워크도 전면 재개발 되었다.

아이오닉에서 지원하는 프론트엔드 자바스크립트 프레임워크와 라이브러리들

앞으로 아이오닉은 기존의 앵귤러 + 코르도바 기반이 아니라 앵귤러, 리액트, 뷰 중에서 하나를 고를 수 있고 코르도바와 캐파시터를 이용해서 앱을 빌드할 수 있다.

아이오닉은 훌륭한 도구임에도 불구하고 온리 앵귤러 베이스여서 외면 받고 저평가를 받아 온 측면이 없지 않다. 이제 원하는 프론트엔드 프레임워크를 입맛대로 고를 수 있는데다, 빌드 후 성능도 더욱 네이티브에 근접하게 좋아졌다. 

아이오닉 팀에서 누가 이런 생각을 했는지 몰라도 정말 대단하다. 제갈량급 인재라 할만하다. 프론트엔드 프레임워크를 다 쓸 수 있게 고쳐버릴지는 몰랐다. 어쨌든 개인적으로 즐겨쓰는 도구가 사장될까 걱정하던 이용자 입장에서는 날로 진화하는 프레임워크를 보니 안심도 되고 신나기도 한다.

플러터를 좀 배워볼까 하던 나는 플러터 배우기를 조금 뒤로 미뤄뒀다. 당분간은 아이오닉을 이용해서 앱 개발 작업을 조금 더 진행할 예정이다. 어차피 뒷단은 DB에 값을 넣었다 뺐다 하는 단순 웹서비스 베이스의 작업이니 아이오닉을 써도 성능에 크게 무리가 없을 것이고 러닝커브가 없어서 개인적으로 나에게는 유리할 것이다.

하지만 메타버스 시대를 맞아서 조금 더 기기 친화적인 서비스를 만들려면 플러터 공부도 하루 빨리 시작해야 할 것이다.

플랫폼별로 최적화 된 개발을 하는 게 가장 좋겠지만 그건 훗날 혹시라도 팀을 만들게 되면 고려할 사항이다. 혼자서 자바와 스위프트로 플랫폼별 대응을 해 본적이 있는데 일단 딱 하나의 서비스에 인생을 올인할 게 아니면 1인 개발자에겐 리소스 장벽이 있었다. 물론 혼자서 안드로이드, iOS, 웹 플랫폼에 고퀄을 내며 각기 대응하는 능력자 형님들도 계시긴 하지만.


2021년 2월 6일 토요일

클럽하우스 사용후기와 이용 설명, 서비스의 분위기

출처 : The Indian EXPRESS

초대를 받다


요즘 핫하다는 음성 SNS 클럽하우스에 초대를 받았습니다. 레트리카를 운영하고 있는 상원이형에게 받았습니다.

클럽하우스는 누구의 초청장을 받아서 가입을 했는지 내역을 타고 올라갈 수 있습니다. 놀랍게도 상원이 형으로부터 두어계단 타고 올라가니 우리 초대장의 뿌리는 무려 마크 안드레센이었습니다. 마크안드레센은 최초로 모자이크라는 그래픽 웹브라우저를 만든 사람입니다. 전세계 WWW 시대의 문을 연 사람이라고 보면 됩니다. 

이걸 형에게 이야기하니까 형은 '케빈 베이컨의 6단계 법칙'을 들었습니다. 세상사람 누구나 6단계만 연결하면 다 아는 사이라고. 

물론 이론상 그렇기는 한데 실제 그렇지는 않았습니다. 테스트 삼아서 몇몇 유명한 대표님들의 초대장을 타고타고 10칸을 넘게 타고 올라가도 ICT 분야의 네임드는 나오지 않았습니다. 

상원이형은 겸손합니다. 직접 아는 사이가 아니면 아무 관계도 아니라고 했지만, 사실 초대장 개수(기본 2장)는 제한적이기 때문에 초대장을 줄 정도면 꽤 신경 쓰는 관계라고 봐도 무방합니다. 그렇다면 초대장을 준 사람에게 너한테 초대장 준 사람을 소개해달라고 두어번만 수고를 하면 얼마든지 만나서 닿을 수 있는 사람이 마크 안드레센이라는 사람아닌가요.

현재 이용자 저변


이용자는 작년 12월에 60만명. 현재는 200만명이라고 합니다. 아직 한국 이용자는 몇명 되지 않습니다. 해외 네임드들은 팔로워 백만명이 넘는 사람들도 있는데, 국내 네임드들은 많아야 1만명입니다.

유명 기업인들이나 연예인들도 종종 대화방에 참여해서 대화를 하고 놉니다. 아직 커뮤니티가 작다보니 가능한 일입니다. 유명세가 있건 없건 누구나 자유롭게 어울려서 대화를 나누는 분위기가 너무 포근하고 좋습니다. 마치 그 옛날 PC통신 시절에 옹기종기 모여서 매너좋게 대화를 나누던 시절 느낌이 나는데 그 시절의 단체 음성채팅 버전의 느낌이 납니다.

스피커라면 누구나 자유롭게 이야기를 나눌 수 있습니다. 스피커가 아니라면 손을 들고 대화 참여권을 얻으면 됩니다. 계층구조로 되어 있으면서도 민주적인 시스템입니다.

현재는 주로 IT업계와 스타트업계 사람들이 주로 사용하고 있습니다. 트위터, 페이스북, 유튜브가 다 그랬던 것 처럼 이번에도 그렇습니다. 업계 종사자들이 얼리어답터로 가장 빨리 이용자가 되고, 또 트렌드에 굉장히 빠르고 민감하거나, 인맥이 넓은 사람들, 오피니언 리더들과 같은 사람들이 참여하고 있는 것 같습니다.

예상은 했지만 가입자들 한분한분이 굉장히 스마트하고 똑똑하신 분들입니다. 저는 괜히 쩌리가 되는 것 같은 느낌. 가입된 제 지인들도 역시나 제가 평소 생각하기에 트렌드에 굉장히 빠르고, 머리 좋고 똑똑한 그런 분들이라고 생각하는 분들이었습니다. 

아직 전국민에게 알려지기엔 시간도 꽤 걸릴테고 소수 아는 사람들도 초대장을 얻지 못해 발을 동동 구르고 있습니다. 그런데도 불구하고 발빠른 얼리어답터들은 여러가지 규칙과 문화를 만들어가면서, 이미 이 동네의 고인물이 되어 있습니다.

초대하는 법과 받는 법


애플 앱스토어에서 클럽하우스 앱을 다운로드 받으면 됩니다. 가입은 기존 가입자의 초대가 있어야 할 수 있습니다. 전화번호부에 등록되어 있는 친구이면 전화번호를 기반으로 초대와 가입이 가능합니다. 이 초대장은 1인당 2개만 제공이 됩니다.

한번 잘못 보낸 초대장은 소멸되며 회수가 불가능합니다. 대신 클럽하우스의 활동을 열심히 하다보면 초대장이 하나씩 더 생기기도 한다고 합니다.

가입하는 입장에서는 초대장을 받기가 힘들면 다른 방법으로 가입하는 방법도 있습니다. 일단 앱을 받아서 트위터 아이디로 가입을 해두면 됩니다. 그러면 핸드폰 주소록에 상호 등록된 친구 중 클럽하우스를 쓰는 친구가 초청을 해줘서 가입을 할 수 있습니다.

방과 클럽하우스의 차이


방은 누구나 만들 수 있습니다. 방을 만들면 방을 만드는 사람은 기본적으로 스피커이며 모더레이터입니다. 만들어 놓은 방에 팔로워들이 들어오면 스피커들 아랫단에 위치하게 됩니다. 그리고 팔로워도 아니고 아무 관계도 없는 사람들이 들어오면 가장 아랫단에 청중 위치에 배열이 됩니다. 물론 청중들이라고 해도 화면 우측 하단에 손들기 버튼을 누르면 스피커가 되어 맨 상단으로 올라오게 되고 발언권을 얻게 됩니다.

방 하나에는 최대 5,000명이 들어갈 수 있습니다. 현재 기술적인 문제로 초대장 시스템과 5,000명 제한이 있는 것 같습니다. 이 부분은 서비스가 커지고 기술적 장벽을 깨 나가면 점차 확대될 부분으로 보입니다.

방은 휘발성이 있습니다. 방에서 이야기를 하는 것은 녹음이나 저장이 되지 않습니다. 그리고 모든 스피커가 나가면 방은 없어집니다. 유동적이고 휘발적입니다.

그러나 클럽하우스는 휘발되지 않습니다. 특정한 주제로 생성된 클럽하우스는 모더레이터가 관리할 수 있고, 해당 클럽하우스에는 팔로우 하는 사람들이 뒤따릅니다. 클럽하우스가 생성되면 막대한 전파력과 영향력을 가지게 됩니다. 물론, 클럽하우스 기반으로 대화방이 만들어지면 그 방에서 이루어진 대화도 휘발되어 사라집니다.

클럽하우스를 생성하는 방법은 매일 동일한 시간에 동일한 주제로 방을 만들어서 사람들과 소통하면 된다고 합니다. 매일 빼먹지 않고 3~4주간 한다면 클럽하우스 생성 초대폼이 열린다고 합니다. 일단 이렇게 가는 것도 쉽지 않지만, 최근에는 클럽하우스 생성 요청이 약 35000개가 몰려 있어서 처리되는데 한참이 걸릴 것이라고 합니다.

제가 클럽하우스 최초로 한국어 주식투자 클럽하우스를 만들어 보려고 하는데, 행운이 따르면 좋겠습니다. 제가 실패하면 다른분이 성공하시면 좋겠습니다.

UI/UX


일단은 iOS 네이티브 앱으로만 제공되는 서비스이기 때문에 UI가 예쁩니다. 그리고 슬라이드 애니메이션들의 처리도 부드럽습니다. 

큰 화면은 현재 열려있는 방과 클럽하우스의 목록이 나오고, 오른쪽으로 스와이프하면 친구 목록이 뜹니다. 친구의 온라인 상태와 참여중인 방 정보를 볼 수 있습니다. 

프로필과 열려있는 방은 상단으로 슬라이드 되는 팝업으로 되어 있습니다. 자칫하면 굉장히 복잡해 질 수 있는 UI를 정말 심플하게 잘 처리하였습니다.

방에서는 스피커들이 최상단에 위치하고, 중간에는 스피커들의 팔로워들이 위치하고, 맨 하단에는 청중들이 위치합니다. 미묘하지만 나름의 서열구조이고, 누구나 손을 들어 발언권을 얻으면 맨 상단의 스피커로 참여할 수 있는 민주적인 구조입니다. 자칫하면 조잡해지고, 자칫하면 권위적일 수 있으며 자칫하면 헷갈릴 수도 있는 UI/UX를 굉장히 직관적으로 잘 처리하였다는 생각이 듭니다.

디자인도 디자인이지만 서비스 곳곳에 단순한 개발 뿐 아니라 인간에 대한 깊은 이해와 고민이 담겨 있다는 느낌이 팍팍듭니다.

기술, 백그라운드 활용


지구 반대편이 있는 사람과 0.1초의 딜레이도 없이 티키타카가 되는 것이 정말 놀라웠습니다. 그게 1:1도 아니고 수십~수천명의 사람들이 참여하는 방에서 가능하다니 놀라웠습니다. 게다가 음질도 깨끗하고 네트워크의 레이턴시도 전혀 없습니다. 일단 멋진 UI만큼이나 백엔드의 기술력도 대단한 것 같습니다.

어제 제가 만든 주식 방에서도 이야기가 나왔고, 기술에 대해서 궁금해서 찾아봤습니다. 아고라라는 중국계 API를 사용한 것이라고 합니다. 아고라라는 기술력에 관심은 가는데, 회사가 중국 회사라서 투자하기는 꺼려집니다. 또, 관련 기술을 아고라만 갖고 있는 것은 아니라고 합니다. 베이스는 구글의 webrtc라고 합니다.

어떤 기술을 사용할지는 클럽하우스의 선택입니다. 클럽하우스의 구매력이 API의 단가를 떨어뜨릴 경쟁력이 충분하다고 생각합니다.

안드로이드용 출시


기본적으로 초대장 구하기도 전쟁입니다. 중고나라에는 초대장 매물까지 나오고 있습니다. 그런 상황인데다 안드로이드 유저들은 초대장이 있어도 서비스를 쓰지를 못합니다.

클럽하우스 서비스 운영사에서는 안드로이드 개발자를 뽑고 있습니다. 홈페이지에 가보니 확인이 되는 부분입니다. 문제는 이제 안드로이드 개발자를 뽑아서 언제 안드로이드 버전의 앱을 만들지요. 시간이 조금 걸리지도 모릅니다.

그래서 저는 초대장을 받자마자 아이폰 공기계를 한대 사서 클럽하우스에 참여하고 있습니다. 

안드로이드 버전 개발중에는 여러가지 이슈가 있을 것 같습니다. iOS보다 보안이 취약하기 때문에 이 부분이 가장 이슈가 될 것 같습니다. 특히, 이 앱은 녹음과 저장을 허용하지 않습니다. 한마디로 앱 이용자들 전부가 자신들의 휘발성 이야기가 녹음되는 것을 원치 않습니다. 녹음할 경우 추후 법적인 문제가 불거질 수 있습니다.

안드로이드에서는 음성전송의 기술적 이슈도 몇가지가 있다고 합니다.

다른 기기로 녹음하는 것 까진 못 막더라도 일단 아이폰에서는 녹음 기능이 막혀있습니다. 그런데 안드로이드는 얼마든지 앱에서 막아둔 기능을 뚫을 수 있습니다. 사람들이 말하는 것을 녹음해서 wav 파일로 저장을 한다던가, 오가는 패킷을 캐치해서 까보는 등의 다양한 짓들을 할 수 있죠.

어쨌든 이 모든 걸 감안하고 개발을 하리라 생각하구요. 안드로이드 버전도 추후 언젠가는 나오리라 생각합니다.

서비스의 룰과 분위기


서비스의 오른쪽 상단 프로필 이미지 옆에 문서 아이콘이 있습니다. 그것을 누르면 클럽하우스에서 지켜줬으면 하는 가이드라인이 정리되어 있습니다. 가이드라인 문서만 읽어 보아도 서비스를 만들 때 사람들의 작은 심리 하나까지 얼마나 세심하게 고려하였는지 알 수 있습니다. 그 문서는 별도로 읽어보시면 될 것 같습니다.

서비스를 써보니 팟캐스트 느낌이 나지만 팟캐스트와는 완전히 다릅니다. 청취자가 누구나 실시간으로 참여가 가능하고, 방 개설도 가능하기 때문입니다. 스푼라디오와 비슷한 것 같지만 그것도 다르고, 밴드의 음성 채팅과도 비슷한 것 같지만 근본 설계가 완전 다릅니다.

활자 서비스의 블로그, 디지털카메라의 확산과 함께 성장한 다양한 사진 서비스들, 영상 서비스의 유튜브에 이어서 등장한 음성 서비스로서 확실한 입지를 굳힐 것 같습니다. 

잠옷 차림으로 침대에 누워서 이야기 해도 되고, 코를 파면서 대화에 참여 해도 됩니다. 화면이 안 나오니 너무 편합니다. 말하고 듣는 행위는 확실히 인간의 표현활동 중 에너지가 가장 적게 들어가는 활동입니다.

라디오 채널을 돌리듯이 편안하게 여러가지 방에 들락날락 하는 것이 가능하고, 각 방은 대부분 특정 분야의 전문가들이 자신들의 전문 분야에 대한 이야기를 나누고 있어서 무료 대학 강의를 듣는 느낌도 납니다. 앱을 한번 켜면 끌 수가 없는데, 끄고 나면 뭔가 많이 얻어가고 배웠다는 느낌이 강합니다.

물론 아무말 대잔치를 하는 컨셉의 방도 있고, 20대 친구들이 모여서 반말로 이야기를 나누는 컨셉의 방도 있습니다. 동화책을 읽어주는 방도 보았고, 그냥 백색 소음을 틀어주는 방도 있습니다.

일부 스타트업은 디자이너와 개발자 채용을 클럽하우스에서 진행하기 시작했습니다. 정말 발 빠릅니다. 이건 리얼타임으로 대화를 하는거라서 언택트 채용 플랫폼에게도 큰 타격이 될 것 같습니다.

단체 성대모사 방은 프로필 사진을 실시간으로 바꾸어 가면서 유명인의 성대모사를 하고 노는 방인데, 정말 배꼽잡고 웃게 만드는 재미있는 방이었습니다. 프사를 바꾸는 새로운 문화가 클럽하우스 안에서 자리 잡고 있습니다.

또 재미있는 문화가 있습니다. 발언자들은 음소거 버튼을 여러번 누를 수 있는데, 이러면 마이크가 반짝반짝합니다. 이것은 박수를 치는 의미라고 합니다. 서비스에 제약이 많다 보니 제약을 이용해서 재미있는 문화가 많이 생기고 있습니다.

지금은 얼리어답터들 소수가 쓰고 있기 때문에 전문적인 이야기가 많이 오가는 것 같고, 일반 대중에게 서비스가 널리 퍼지게 되면 정말 다양한 컨셉과 분위기의 방들이 만들어 질 것 같습니다.

일반인이라면 지금이 플랫폼 안에서 입지를 굳힐 타이밍이라고 봅니다. 연예인들이야 늦게 들어오더라도 한번에 팔로워와 클럽하우스를 빨아들이겠지만 말입니다.

이용자가 늘어나면 당장 일어날 부작용


사람이 모이면 그에 비례해서 통상적인 리스크가 높아지는 건 당연합니다.

클럽하우스를 1주일 사용하신 분은 벌써부터 피로감을 느낀다고 하셨습니다. 타 소셜미디어의 피로감을 피하고자 접근한 클럽하우스에서 다시 피로감을 느끼고 있다니 인간의 적응력은 대단합니다.

피로도를 유발할 몇가지 요소들이 있습니다. 아무래도 소셜미디어다 보니 역시나 여기서도 사람들은 자기 자신을 포장하기 바쁩니다. 프로필을 그럴싸하게 꾸미는 게 시작입니다. 말을 할 때도 어려운 외래어를 섞어 가면서 말합니다. 투자방에 들어가 보니 참 전부 주린이 분들인데도 불구하고, 어려운 단어를 쓰면서 전문가 행세를 하는 분들이 계셨습니다. 근본이 단단하지 못한데 포장만 한다고 포장이 되진 않습니다. 물론 클럽하우스의 분위기는 그런 것을 따지지 않고 누구나 편안하게 이야기를 하는 분위기이긴 하니 문제될 것은 없습니다.

그리고 발언권을 얻고 싶어서 손을 계속 드는데도 인싸가 아니라서 대화에 참여를 시켜주지 않는 사례도 종종 있어서 소외감을 느끼는 사람들이 있습니다. 물론 현재는 대부분 대화에 자유롭게 참여하는 분위기이긴 합니다.

20대 젊은 분들은 덜 하지만 한국 사람들에게 손들기 문화는 여전히 어색합니다. 이야기를 듣다가 대화에 참여하고 싶어도 손들기 버튼을 누르는데는, 많은 한국인들에게 나름의 용기가 필요할 수도 있겠다는 생각이 들었습니다.

용기가 부족한 사람도 지인들과 방을 만들어서 수다를 떠는 식의 방에서는 재미있게 놀 수는 있습니다. 청취자들이 몰려 들어오면 부담은 되겠지만 말입니다.

커뮤니티가 잘 지켜지길 바라며..


지금은 이용자가 적어서 그런지 커뮤니티의 물(?)과 분위기가 너무 좋습니다. 그런데, 초대장이 복리로 늘어나기 때문에 상반기에 이용자가 굉장히 폭발적으로 늘어나서 범용 소셜 미디어가 되어 있을 것 같습니다. 

언젠가는 초대장 시스템도 폐지되고, 안드로이드 이용자들도 늘어날 것입니다. 인스타그램, 페이스북 모두가 그랬던 것 처럼요. 그때 아싸리판이 되지 않고, 지금과 같이 좋은 분위기와 문화가 유지되었으면 좋겠다는 희망을 가져봅니다.

제 아이디는 @jongsik 입니다. 종종 같이 주식 잡담하고 놀아요.

2021년 2월 6일
송종식 드림

* 파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음


2020년 6월 6일 토요일

투자노트 앱 관련 공지사항

투자노트 앱은 현재 오작동 중입니다(시세 정보를 받지 못해)


최근에 갑자기 투자노트 어플의 이용자가 증가하고 있습니다. 아마도 유튜브 덕분인 것 같습니다.

현재 앱의 주요 기능들이 작동하지 않는 상태입니다. 그리고 이용자분들이 유입되는데 대비를 못한 상태입니다. 각종 시세를 받아오는 API가 작동하지 않는 상황입니다.

시세를 안정적으로 제공 받고자 코스콤을 비롯해서 몇군데 알아보았습니다. 시세 정보를 가져오는 게 생각 이상으로 가격이 비쌌습니다. 아시다시피 앱은 취미로 운영하고 있습니다. 글쓰기와 더불어서 저의 즐거움 중 하나입니다. 코딩 취미에 몇천만원씩 정기적으로 목돈을 쓰는 게 부담되는 것이 사실입니다. 단지 시세 정보를 가져오기 위해서는 더욱 그렇습니다. 사실 뒷구멍으로 처리하자면 포털사이트를 크롤링해도 되기 때문입니다.

이러한 이유로 앱을 고쳐야 하는데 아직 고치지 못하고 있습니다. 시세를 받아와야 안전마진 계산 등 여러가지 기능이 제대로 작동합니다. 당장 메인 페이지의 지수도 표시가 안되고 있습니다.

일단은 기본적인 기능들이 정상 작동할 수 있도록 방법을 찾고 있습니다. 수정이 완료되면 다시 공지를 드리겠습니다. 지수와 종목 시세를 제공하는 곳을 아시는 분은 알려주셔도 감사합니다. 다른 사이트에서 크롤링 하는 방법은 이미 알고 있는 방법입니다. 온전한 API를 제한없이 제공하는 곳이 있는지 궁금합니다.

보다 풍부한 기능들을 개발중에 있습니다


커뮤니티, 컨센서스, 밸류에이션 기능을 보강하여 개발하고 있습니다.
<화면 : 송종식, 투자노트>

또, 앞으로 다양한 기능들을 추가하려고 생각하고 있습니다. 처음에는 개인적으로 안전마진을 편안하게 관리하기 위해 만들었습니다. 그러다 차츰 이용자분들이 늘었습니다. 더 재미있는 기능들, 더 유용한 기능들을 추가해도 좋겠다 싶었습니다.

그래서 몇가지 기능들을 기획했고 현재는 구현이 거의 끝난 단계에 있습니다. 이 앱은 대규모 서비스로 크지는 못할 것입니다. 단지, 가치투자를 좋아하는 투자자들의 즐거운 소통의 창구가 되었으면 좋겠습니다.

취미이다 보니 일 처리가 빠르지는 못합니다. 그래도 부지런히 코딩하겠습니다. 기능의 정상화와 기능 추가를 하는 즉시 공지하겠습니다. 위에서도 썼지만 잘 작동하지도 않는 앱입니다. 그럼에도 불구하고 관심을 주시는 분들께 감사드립니다. 기대에 부응하겠습니다.

2020년 6월 6일
송종식 드림



2017년 11월 2일 목요일

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

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

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

1. 적정주가 관리


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

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

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

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


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

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


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

4. 기업분석


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

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

5. 주식 투자 공부


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

6. 서비스 운영 철학


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

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

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

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

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

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

다운로드


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


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

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



2014년 9월 2일 화요일

조용하지만 폭발적인 레트리카(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일
송종식 드림

2014년 6월 28일 토요일

안드로이드 앱, 태블릿 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일
송종식 드림