쪼렙 as! 풀스택

[개발후기 - iOS, Android] IT 알려줌 앱 본문

포트폴리오 & 개발후기

[개발후기 - iOS, Android] IT 알려줌 앱

코코앱 2017. 6. 5. 16:54

프로젝트 참여

iOS - 100%

Android - 100%

Server - 100%

... 그냥 첨부터 끝까지 혼자 다 만들고 서비스 운영중이다 ㅋ



0. 개요

- 알려줌과 로아컨설팅에서 함께 운영하는, IT 업계 관련된 콘텐츠 유통하는 앱.

- 유튜브 영상 플레이 (IT 알려줌 유튜브 채널의 동영상을 보여준다.)

- 인앱 결제 (유료 PDF 보고서를 다운받을 수 있다.)

- 푸시 알림 (새로운 콘텐츠 푸시알림)

- 콘텐츠에 댓글 + 대댓글 시스템

- 페이스북 로그인, 공유




1. 서버 

- PHP 로 만들었다. 알려줌 스타트업을 창업하고나서 처음에 앱을 만드는데, 서버비용을 극도로 줄일 필요가 있었다. 요새는 서버 운용비용이 정말 싸져서, 단독호스팅을 이용한다 해도 한달에 몇만원 안한다. 그런데, 내가 보기엔 한달에 몇만원도 스타트업에겐 아깝다고 생각했다. 잘 될지 안될지도 모르기 때문에, 일단은 월 일이천원이면 되는 카페24의 웹호스팅을 이용해 보기로 했다. 어차피 앱서버는 JSON 형식으로 데이터만 주고받도록 API만 열어두면 트래픽도 진짜 개미 눈물만큼 나올테고, 동접이 걱정되는 앱도 아니였기 때무이다. 심지어, 트래픽 비용을 줄이기 위해서 앱에서 사용하는 이미지는 그냥 블로그를 이용하기로 했다. 이렇게 해서 극도로 서버비용을 줄였다.


- CodeIgniter를 사용했다. 요새 유행하는 Laravel 을 이용할까도 했지만, 진짜 단순히 데이터 처리만 하면되었기에, 상대적으로 가벼운 CodeIgniter를 선택했다. Laravel 은 좋은 프레임웍이다. API 서버만 만들기엔 아까울정도로;;; 근데 앱서버에서 하는거라곤 DB 쿼리해서 JSON 으로 내보내는것밖에 없기 때문에, CI가 훨씬 가볍다.




2. 인앱결제 


- 유료로 판매하는 PDF 보고서가 있어서, 인앱결제를 붙여야 했다. 유료PDF 는 계속해서 올라갈 수 있기 때문에, 개별 PDF  마다 상품을 올릴 순 없는 노릇이였다. 따라서 '열람권' 형태의 상품을 판매했고, 자체 서버에 사용자의 열람권 갯수와 이용내역을 저장할 수 있도록 만들었다. 


- 돈이 걸린 문제라서, 구매시작하는 순간부터 이상없이 서버에 완료처리 될 때까지, 악의적 결제시도를 막고, 또 문제없이 잘 처리될 수 있도록, 약간은 복잡하지만 견고하게 설계해서 개발했다.


a. 사용자가 '열람권' 구매 버튼을 누르면, 일단 우리 서버에 요청해서,  유효한 사용자인지 검증하고, 나중에 검증 트랜잭션을 위한 payload를 발행한다. 서버에는 누가 어떤 아이템을 구매하려고 하는건지 저장해둔다.

b. 앱에서 인앱결제를 진행한다. 이때 발급받은 payload 를 이용한다. (구글 인앱에는 인앱결제 자체에 커스텀 payload 를 사용할 수 있게 되어있다.) 

c. 결제가 완료되면서 나오는 purchase 영수증 데이터를 다시 자체 서버에 보낸다. 서버에서 사용자 & payload & purchase 를 검증하고 이상이 없으면, DB에 구매 내역을 저장하고 OK 를 보낸다.

d. 서버에서 OK 응답을 받으면, 이상없이 결제가 완료된것이므로, 구매한 아이템을 소진시켜버린다.

e. 여기서 한번 구매한 아이템(열람권)을, 자체서버에서 이상없을 경우에 즉시 소진시켜줘야 하는데, 소진시키지 않으면, 해당 아이템을 다시 구매 할 수 없기 때문이다. 

f. 만약, 핸드폰에서 문제가 발생하여(전화가 온다던지, 앱이 죽는다던지 등등) 소진이 안되버린다면, 다음에 똑같은 앱을 구매하려고 할 때, (c)과정부터 다시 서버에서 검증하고 소진시켜준다.


- 현재 시점에 데이터를 보니, 100건정도 인앱 결제가 있었는데, 아직까지 결제관련 문제제기가 단 한건도 없었다.




3. 유튜브 동영상 플레이


- 알려줌의 거의 모든 영상은 유튜브를 통해 유통된다. 유튜브 SDK가 안드로이드용으론 잘 제공이 되고 있어서 어렵지 않게 붙여서 만들었는데, 문제는 iOS 였다. 아이폰용은, 따로 SDK 가 제공되지 않고, 웹뷰기반의 helper만 제공되고 있었다. 유튜브 개발자 공식사이트에서는 저 helper 를 사용하게 안내되어있기에, 당연히 그걸로 해봤는데... 정말 최악이였다. 잘돌아가지도 않고 화질도 구리고, 내 맘대로 핸들링 할 수도없었다. (웹뷰기반이니 ㅠㅠ) 그래서 찾아본 결과, XCDYoutubeKit 를 사용하게 되었다. XCDYoutubeKit의 마스터도 Youtube의 공식 웹뷰기반의 헬퍼가 정말 구리다며, 직접 만들었댄다. ㅋ 잘 만들어 놓긴 했는데, 현재는 Deprecated 된 MPMoviePlayer 기반이다. 워낙 인기가 있는 오픈소스이고, 꾸준히 이슈들을 해결하는걸로보아, 많이 걱정되지는 않지만, 나중에 시간 많을때(아주 많을때), 코드보면서 AVPlayer 기반으로 Forking 을 해보거나 해야겠다. 




4. 푸시 알림.


- iOS는  APNS를 이용, 안드로이드는 GCM 을 이용했다. 나중에 FCM 으로 통일해야지... ㅠㅠ

- 관리자용 어드민 페이지에 콘텐츠를 등록하고, '푸시보내기' 하면, 푸시 알림이 가도록 만들어 두었다. 







4. 다운로드.


- Apple AppStore : https://itunes.apple.com/kr/app/it-allyeojum/id1052649736?mt=8

- Google PlayStore : https://play.google.com/store/apps/details?id=com.allyeozum.android.allyeozumit





Comments