기본 콘텐츠로 건너뛰기

Google App Engine의 Database 비용 줄이기

얼마전 iOS 개발자로 일하고 있는 친구와 함께 사진 공유 App을 런칭했다. (App Store Link). 어차피 돈 벌기 위한 작업이 아니었으므로 서버 비용을 최소화하는 방법으로 구현했다.
1. 사진 데이터는 Facebook에 올린다.
2. 우리 App에서 보여주기 위한 데이터(순위, 투표 현황 등)는 Google App Engine에 저장한다. 1 GB까지 무료이므로 어느정도 수준까지 무료로 서비스 가능. 이 이상이면 소액 지출로 해결한다. 1GB 이상의 데이터가 쌓일 정도면 일정 수준 성공한 서비스이므로 광고 등으로 유지 비용을 벌 수 있을 것이라 판단.
3. iOS App에서 cache를 적절히 활용하여 Google App Engine에 조회를 최소화한다.
위와 같은 방식으로 하면 초기 비용 없이 서비스를 한동안 제공할 수 있을 것이라 생각하고 App을 한달전 쯤 런칭하였는데... 딱 일주일만에 Google App Engine의 DB read 동작이 무료로 제공되는 한계치를 넘을려 하고 있었다. 어쩔 수 없이 유료화로 전환하여 약간의 비용을 지출하게 되었는데.
실제 사용자 수에 비해 DB read 횟수가 많아 보여 이를 감소하는 방법을 찾아 적용하였다. 혹시, Google App Engine을 사용하여 서비스를 구축하려는 분들에게 도움이 될 듯 싶어 공유한다.

DB read 동작 횟수에 대한 정확한 이해가 필요

  • Entity를 읽으면 무조건 1회의 read 동작
  • Query를 실행하면 1회, Query에서 얻어지는 모든 Entity에 대해 1회의 read 동작 (read는 100k 당 0.07 USD)
  • Key만 조회하는 Query의 경우는 read 1회에 Query에서 얻어지는 모든 Entity Key에 대해 1회의 small 동작 (small은 100k 당 0.01 USD)
즉, Entity를 얻어오는 동작을 최소화하고 Query를 실행 시 Key 값만으로도 충분하다면 언제나 Key only 조회를 실행하는 것이 비용을 줄일 수 있다.

실제 구현은 어떻게?

1. GAE (Google App Engine)이 제공하는 memcache를 활용하여 DB의 물리적인 read를 줄인다. 성능의 이점뿐 아니라 비용을 줄일 수 있다.
2. Query를 실행 시 되도록 Key only Query를 사용한다. 1/7로 비용을 줄일 수 있다.
3. fetch의 offset 인자 대신 Cursor를 사용한다. fetch의 offset을 이용하여 특정 데이터를 skip시 read 동작으로 count 되기 때문이다. 더 자세한 설명은 아래 GAE 문서에서 발췌한 Note를 참고.
Note: Using an offset only avoids returning the skipped entities to your application, but these entities are still retrieved internally. The skipped entities do affect the latency of the query, and your application is billed for the read operations required to retrieve them. To avoid these costs, it is often better to use a query cursor instead of an offset.
4. Query를 이용하여 for loop에서 Entity를 가져오는 대신 Model의 get(keys) 를 이용하는 것이 read 횟수를 줄일 수 있다. Query의 경우 Query 1회, Entity 가져오기 1회의 read 동작이 필요하고 get(keys)는 Entity를 가져오는 1회의 동작만 필요하다.

References:

  1. EBSi에 로그인해서 볼 수 있는 강의목록을 굳이 블로그에 정리한 이유는 Mac에서는 EBSi에 로그인하면 알수 없는 오류로 목록 접근이 안되기 때문이다. 개인적 편의를 위해 정리한 목록을 공유하니 Mac 사용자 분들에게 도움이 되기를.
  2. Android M에 추가된 Doze 모드는 일정한 조건이 되면 어플리케이션의 타이머, Wakelock, 네트워크 사용을 금지한다. 스마트폰의 배터리 수명을 늘리기 위한 기술이지만 개발자에게는 난감할 수도 있는 기능.

    Doze 모드에 진입한 상태에서도 네트워크에 접근하여 필요한 데이터를 가져오는 등의 동작을 구현하기 위해서는 GCM의 high priority message를 사용하면 된다. 단, 어떤 경우에 high priority로 하고 어떤 경우에는 normal priority로 해야할지 고민이 필요하다.

    트위터의 경우 사용자에게 직접 보내는 메시지(direct message)에는 high priority message로 멘션의 경우에는 normal priority 메시지를 사용하여 배터리 효율과 사용성을 모두 만족시킬 수 있었다고 한다. 자세한 내용은 아래 블로그 글을 참조 하시라.

    http://googledevelopers.blogspot.kr/2015/12/how-twitter-used-doze-in-android-60.html

  3. http://blogs.blackberry.com/2015/11/managing-android-security-patching-for-priv/

    Android Monthly Security Updates

    Each month Google releases to BlackBerry and other Android OEMs a security bulletin containing a list of recently discovered Android vulnerabilities. Approximately one month later, Google exposes these in the public domain, so it is critical that BlackBerry release software in advance of public disclosure.  BlackBerry will release these monthly updates to users that have purchased PRIV through shopblackberry.com and to PRIV resellers (carriers and other authorized dealers) that have agreed to participate in our regular monthly update program and facilitate rapid approval of our monthly updates for over-the-air (OTA) to subscribers.

    BlackBerry도 Android Monthly Security Updates에 동참한다는 뉴스입니다. 이미 삼성전자도 동일한 메시지를 발표했었죠. Nexus 기기의 경우 아래와 같이 보안 패치를 제공 받을 수 있습니다.

    ====
    Nexus 4, Nexus 5, Nexus 6, Nexus 7, Nexus 9 및 Nexus 10 기기는 Google로부터 직접 최신 Android 버전을 받을 수 있습니다.이러한 기기는 Google 스토어에서 해당 기기가 처음 판매된 때부터 최소 2년 동안 Android 버전 업데이트를 받게 됩니다.

    보안 패치

    또한 심각하다고 여겨지는 보안 문제에 대해 Nexus 기기는 적어도 다음 기간 동안 업데이트를 받습니다.

    Google 스토어에서 해당 기기가 처음 판매된 때부터 3년
    또는 Google 스토어에서 해당 기기의 판매가 중단된 때부터 18개월
    기기에 마지막으로 보안 패치가 수신된 때를 보려면 다음 단계를 따르세요.
  4. 이번 주 Nexus 5X6P가 발표습니다. 구글 스토어에서는 사전 예약이 시작되었죠. Nexus 5 이후 2년 만에 한국에서도 Nexus 디바이스를 구매할 수 있게 되었네요.

    Google의 레퍼런스 폰답게 운영체제 업데이트를 최초 판매일로 부터 2년간 보장합니다. 보안 패치의 경우는 3년간 보장합니다.  (Nexus Help 사이트 참조)




    Nexus 5XNexus 6P
    5.2 inch Full HD, 423 ppi
    1.8 GHz hexa-core 64-bit
    RAM: 2 GB LPDDR3
    136 g
    2700 mAh Battery
    Nexus Imprint (지문인식)
    12.3 MP, 1.55 μm pixels real camera
    IR laser-assisted autofocus
    4K (30 fps) video capture
    5 MP, 1.4 μm pixels front camera
    Single front-facing speaker
    USB Type-C
    5.7 inches WQHD, 518 ppi
    2.0 GHz octa-core 64-bit
    RAM: 3 GB LPDDR4
    178 g
    3450 mAh Battery
    Nexus Imprint (지문인식)
    12.3 MP, 1.55 μm pixels real camera
    IR laser-assisted autofocus
    4K (30 fps) video capture
    8 MP, 1.4 μm pixels front camera
    Dual front-facing stereo speaker
    USB Type-C


  5. 작년 일본어 공부를 좀 했다고 자신만만하게 떠난 후쿠오카 여행. 하지만, 내 일본어 실력은 아직 멀었는지 일단 물어보고 싶은 것은 자신만만 일본어로 물어보았으나 상대방 말은 영 들리지 않느다. 대략 낭패.

    해외 여행 시 겪는 외국어 울렁증. 대화는 물론 간단한 표지판, 음식점 메뉴에도 까막눈이 된다면 Google 번역기의 도움을 받아보자.

    음성인식 기능으로 간단한 대화가 가능
    2개의 언어를 동시에 인식 가능하므로 한국어와 해석이 필요한 외국어를 설정해놓고 간단한 대화가 가능하다. 아래 비디오는 영어와 독일어로 대화하는 설정 데모.



    카메라 인식 기능으로 표지판, 메뉴 등을 바로 번역해서 확인 가능
    카메라 인식 모드에서는 화면에 비친 외국어를 선택하여 바로 번역해볼 수 있다.


    필기 인식으로 필담도 가능
    음성인식률에 문제가 있다고 생각되면 필기체 인식모드로 변경하여 필담으로 해결하자.

  6. 구글·美이통사, 애플페이 부상에 '적'에서 '동지'로
    언제나 애플이 문제 :)

    구글의 조립식 스마트폰 ‘아라’, 어디까지
    ARA DevCon2 행사에서 논의된 모듈화된 H/W가 사용자에 의해 탁찰 시 안드로이드 운영체제가 동적으로 해당 모듈의 기능을 사용할 수 있도록 지원할 예정이라는 것이 가장 흥미로왔다. ARA 폰은 푸에루토리코에서 출시 예정이라고 한다. 푸에루토리코는 미국령에 미국/지역 통신사들이 혼재되어 있고 스마트폰과 피쳐폰의 비율이 50/50으로 ARA 폰을 테스트하기에 최적의 조건이라고.



    구글, 이동통신 서비스 직접 뛰어드나
    이라는 루머가 있다.

    구글플레이, 애플보다 앱 개수 늘었지만 수익성은 아직
    등록된 application이 갯수는 150만 vs 120만으로 Google Play가 앞서지만 매출은 150억 달러 (15조원 정도) vs 250억 달러로 Appstore가 높다는 기사.

    리브레오피스도 안드로이드용 나온다
    한국에서는 뭐...

    안드로이드 태블릿용 MS오피스 정식판 출시
    MS 오피스 정도는 되어야 한국 시장에 통하지. 무료로 설치할 수 있지만 편집을 하려면 Office 365에 가입해야하는구나. 그냥 Google Docs써야지.

    안드로이드폰 세계 판매량 10억대 돌파
    작년 한해 전체 스마트폰 판매량의 81%를 차지하며 10억대 넘게 안드로이드폰이 팔렸다고. 세계 인구가 72억명 정도라는데...

    • 구글 GO, 안드로이드 앱 개발서 자바와 격돌
      Go 언어의 Android 지원은 꽤 전 부터 제공되고 있었습니다만 기사가 좀 과장이 섞인 것 같습니다. 하지만, iOS에 Swift가 있는 것처럼 Android용 추가 개발 언어가 제공된다면 개발자 커뮤니티에 새로운 활력이 될 수는 있겠지요.
  7. 2015년 1월 1주

    • 삼성, 모든 스마트 TV에 ‘타이젠’ 탑재한다
      Android 관련 뉴스는 아니지만 흥미로운 기사여서 링크를 걸어봅니다. Google의 Android TV와 각을 세우는 시도입니다.  휴대폰에서는 이렇다할 성과를 내지못한 Tizen O.S. TV에서는 어떨런지요. (참고: tizen tag로 stackoverflow를 검색해보니 275개의 질문이 등록되어 있네요.)

  8. 2014년 12월 4주
    Wish your happy new year!

  9. 2014년 12월 3주

    • 카드보드 SDK for Android 공개
      값싼 VR (virtual reality) 구현을 위한 카드보드 SDK가 안드로이드용으로 공개되었습니다.  몇 종류의 카드보드도 구매 가능하네요.
    • Project ARA DevCon 2
      모듈기반 스마트폰 ARA의 두번째 developer conference가 열린답니다. Hangout으로 remote로 참석도 가능합니다. 이곳에서 등록하세요.
Loading
Dynamic Views template. Powered by Blogger.

댓글

이 블로그의 인기 게시물

카페24에서 스프링으로 만든 mvc 모델을 등록 http://m.blog.daum.net/liokingim/1944

블로그 통합검색 관련 서비스 펼치기 내 블로그 친구 리오의 오두막 글목록 방명록 cafe24에서 java spring mvc 사이트 만들기. 리오 | 2013.07.17 10:20 목록 크게 댓글 (1) | 댓글쓰기 카페24에서 스프링으로 만든 mvc 모델을 등록할려고 상당한 삽질을 한 끝에 드디어 성공했습니다. 그 방법을 등록합니다. 요구 사항 1. spring framework 3.3 2. java 3. oracle 10g 4. mvc 5. Controller 를 사용 카페 24에서 서비스하는 호스팅으론 위의 조건을 만족하지 않아서 두개의 호스팅을 신청하였습니다. 일단 데이타베이스는 oracle호스팅 으로 신청, Controller 설정은 불가능하여 Tomcat jsp 호스팅 을 신청하였습니다. mysql은 나중에 추가로 쓸려고 생각하기에 그냥 사용.  1. 스프링에서 새로운 프로젝트를 만들어서 샘플 소스를 만들어 봅니다. 2. 스프링 프로젝트를 선택합니다. 3. 스프링 mvc 프로젝트를 선택합니다. 4. 프로젝트의 패키지 명을 등록합니다.    5. 프로젝트에 위의 두개의 HomeController.java, home.hsp가 보입니다.  6. Run on server 를 클릭하여, 서버를 시작합니다.   7. 서버 실행화면이 뜨면 주소를 위와 같이 간단히 수정하여 위의 화면...

jdbc vs mybatis

파일 공유신청 Tistory JDBC와 Mybatis 차이 Study/SPRING FRAMEWORK 2015.02.12 11:35 Google App Engine으로 해보려다 DB를 MY SQL로 하다보니 Google App Engine을 쓸 수 없어  JAVA에서 유명한 Spring Framework를 쓰기로 했습니다. 일단 My Sql에 접근하기위해 JAVA에서는 JDBC가 있어야 한다고 하네요. 안드로이드에서는 SQLite로 간단하게 했는데, JAVA에선 알아야 할게 많네요;;ㅎ 일단 JDBC를 알아봤더니, Oracle, MySql, MS Sql에 접근하기 위한 드라이버 같은 거랍니다. 위 그림과 같이 JAVA 응용프로그램에서 DB에 접근하기위해 JDBC를 거쳐야 합니다. 아 MS에서 만든 ODBC란 놈도 있는데, 이놈은 Access나 Excel같은데도 접근이 가능한데, JAVA에서는 JDBC-ODBC 드라이버로 ODBC로 접근할 수 있습니다. 다시 본론으로 넘어가서 그럼 Spring Framework에서는 어떻게 하느냐... 바로 Mybatis라는 놈으로 쉽게 접근 할 수 있다하네요. 위 그림처럼 JDBC대신 My Batis를 씁니다. My Batis는 원래 ibatis인데, 2010년 아파치 ibatis...