RSS

태그 보관물: iPhone

Google App Engine 사용 후기

gae icon

구글 앱엔진으로 프로젝트 하나를 마쳤습니다.

간단한 이미지 콘텐츠 관리서버와 API를 앱엔진에서 구성하고, 아이폰에서 해당 API를 호출하여 이미지를 보여주는 형태의 서비스입니다.

처음으로 앱엔진을 이용해봤지만 간단한 후기를 적어 보고자 에어를 펼쳤습니다. 혹시 누군가에게 도움이 되길 바라며, 유리병에 넣고 바다에 던져보는 거지요. 🙂

처음 앱엔진을 접했던 것은 2008년 12월쯤 아이폰 앱스를 개발하면서 cocos2d라는 라이브러리를 이용할 때였습니다. 거기 글로벌 랭킹를 관리해주는 아이가 바로 앱엔진이었던 것이였죠. 벌써 2년이 훌쩍 넘었군요. 좀 더 호기심을 가지고 들여다 봤다면 클라우드를 먼저 접해볼 수 있었겠지만 그리 못했습니다. 아쉬움이 많이 남습니다.

2년사이에 간간히 앱엔진으로 뭔가를 해봐야겠다는 생각 뿐이었고 실행에 옮기지 못했습니다. 그 사이에 저는 전업 앱개발자가 되어가고 있었지요. 이전에 하던 서버쪽 개발은 별로 흥미를 끌지 못했던 시기였습니다. 전업 앱개발자로서 SNS를 개발해보고 나서 API서버의 역할과 앱과의 통신에 대해서 이해하게 되었지요.

그래서 개인 프로젝트에 적용해보기로 맘먹었고, 그래서 머리 속 기억 저편의 앱엔진을 다시 전두엽으로 불러냈습니다. 😉

2년이란 시간이 지나는 동안 앱엔진은 자바 런타임을 도입했다는 것 외에는 큰 변화가 없었습니다. 하지만 관련해서 사용자들의 리뷰는 넘쳐나고 있었지요. 이들의 리뷰와 간증 덕분에 쉽게 이것을 해보자는 결정과 함께 착수했습니다.

약 2달간의 짬짬이 공부가 시작된 셈입니다. 꾸준하진 못했지만 토요일마다 카페에서 앱엔진을 배우기 위해서 이런저런 코딩을 해보고 실제로 서비스를 구현해봤습니다.

결론적으로 서비스는 파이썬 기반의 앱엔진으로 구현이 되었습니다.

구현하기까지 삽질한 순서를 회고해보면,

1. 초기 샘플 코드 재구현해보기 (방명록 구현하기)
2. 사진 올리고 보여주기 구현
3. data model 구현
4. json출력하기 구현
5. 관리자 페이지 작성
6. API 페이지 작성
7. Memcache 적용

이렇게 꼽을 수 있겠네요.

이 정도로 앱엔진의 모든 기능을 써봤다고 말하기는 많이 부족하지만, 간단한 RESTful 웹서비스 구현은 할 수 있겠구나는 확신이 생기더군요. 각 단계에서 느꼈던 소회를 불어보려고 합니다.

1. 초기 샘플를 따라서 구현

앱엔진의 초기 화면에서 삐적 마른 아저씨가 보여주는 동영상을 몇 번 보면서 따라했습니다. 모방을 충분히 해보니까 이 동네가 어떻게 돌아가는 지 조금 알 거 같더군요. 이 방명록 샘플에 필요한 모든 게 다 들어있다고 해도 되겠습니다. webapp framework를 사용하여 request 처리하는 방법과 처리 결과를 django를 이용해서 response하는 방법 datastore Model를 만드는 방법 이것만으로도 기본적인 웹서비스를 만들기 위한 기초는 놓여졌다고 봐야겠더군요.

2. 사진 업로드하고 보여주기

사진데이터는 BLOB로 datastore에 저장됩니다. 마치 테이블의 한 필드에 저장되는 것 처럼 말이죠. BLOB처리도 매우 간단히 처리가 되더군요. 그런데 그 이미지를 보기 위한 핸들러가 필요했습니다. 각 이미지가 들어있는 row에 대해서 key값으로 blob데이터를 불러와서 이미지로 Content-Type를 이미지로 설정해서 뿌려주니 잘 되네요. 이것도 모두 앱엔진 문서화에 포함되어 있습니다.

3. Model 설계

데이터 모델을 서비스에 맞게 디자인하고 테이블을 설계하듯이 파이썬 클래스를 db.Model를 상속받아 만들면 모델이 만들어집니다. 그 모델을 get(), put(), delete()이런 메소드를 사용할 수 있게 됩니다.

4. json으로 출력하기

django.utils에 simplejson모듈을 그냥 가져와 쓰면 되더군요. 오히려 파이썬의 dictionary와 list에 대응하는 {}, [] 표기법이 익숙치가 않아서 조금 햇갈렸습니다만 곧 이해가 되었습니다. 아울러 json의 구조상 reculsion으로 구현해야하는 부분에서 살짝 고민스러웠는데 다른 사람들이 해놓은 패턴을 따라해서 곧 해결했습니다. 그럴듯한 json를 리턴해주는 API도 구현이 끝났습니다.

5. 관리자 페이지

사실 관리자 페이지에서 콘텐츠를 입력하기 때문에 초반부터 작업이 되었습니다만 효과적인 구현이 어려웠습니다. 관련해서 찾아보니 앱엔진의 Model을 기준으로 자동으로 admin페이지를 구성해주는 appengine-admin프로젝트가 있더군요. 그것을 이용하면 어땠을까 아쉬움이 남았습니다.

6. API 구현

이제 아이폰 앱스와 앱엔진 사이의 API를 구현했습니다. json으로 쉽게 만들 수 있어 쉽게 구현했습니다. 이때 Model사이의 join개념을 사용하기 위해서 ReferenceProperty를 사용하여 최종적으로는 tree형태의 자료구조가 json으로 출력되도록 했습니다. 뭔가 무거운 느낌이 들었지만 그냥 잘 작동 되는 것 같아(?) 넘어갔습니다.

7. Memcache 적용

API를 호출하면서 본격적인 테스트에 들어갔는데, 이상하게도 좀 무거운 API를 호출하면 앱엔진 어드민 콘솔에서 로그에 빨간색으로 경고가 떴습니다. cpu사용과 api호출이 과하다는 경고였습니다. 몇 번 사용하지 않았는데도 cpu가 쿼터의 90%에 육박하는 것이었죠. 실 서비스로 간다면 쿼터를 넘어서 서비스가 불가능했겠지요. 결국 같은 내용을 리턴해주는 쿼리를 매번 할 필요없이 특정 시간동안은 memcache에 저장한 다음 그것을 리턴해주는 방식으로 cpu와 api호출 과부하 문제를 해결했지요.

아직 앱 승인전이고 실 서비스가 진행됨에 따라 예기치 못한 문제가 발생할 수 있겠습니다. 그렇게 경험한 뒤에 그 경험을 나눌 것을 약속드립니다. 🙂

글을 마무리 하면서, 앱엔진은 독립 앱스 개발자들에게 날개를 달아주는 서비스라고 생각합니다. 클라우드 세상은 이미 도래했고 서로 나를 이용해달라고 아우성입니다. 앱엔진을 공부하는 동안 AWS(아마존 웹 서비스)에도 급 관심이 생기더군요. 특히 대용량 저장을 위한 S3는 먼저 써보고 싶어질 정도였죠. 앱스 개발자 여러분 클라우드에 도전해보십시오. 막연한 두려움 가질 필요가 없어요. 해보면 별거 없습니다.  주저하고 있다면 저질러보십시오. 이년전에 제가 주저하다가 말아버린 걸 후회하는 전철을 밟지 마시길 당부드립니다.

최피디 드림.

 

태그: , , , , , , ,

iOS open source TouchCode 퀵리뷰

우리 회사에서 독특한 학습 및 공유 문화중에 ‘퀵리뷰’라는 게 있어요. 이것에 대해서는 다음에 더 이야기 하기로 하고, 팀내에 TouchCode라는 iOS용 라이브러리를 리뷰할 사람이 있냐고 해서 제가 손들어 퀵리뷰해봤습니다.

“iOS 용 오픈소스 툴셋 TouchCode JSON/XML/Notification/Metrics/RSS/UI/HTTPD/Logging/SQL 등 총 10개의 즉시 사용가능한 프로젝트 코드들”

위와같은 설명과 함께 왔길래 뭔가 대단한 것인가 해서 찾아봤더니 결론은 “별거 아니다”에 도달했어요.

엄밀히 말하자면 7개 기능에 대한 코드 꾸러미인데, 재사용하기는 쉽지 않을 정도로 수준이 낮았습니다.  three20의 설계가 들어 있는 것도 아니고 JSON Framework 처럼 사용하기 쉬운 것도 아닌 어설픈 상태였던 것이죠.

TouchCode의 현상태는 몇개의 프로젝트를 수행하면서 얻게된 코드들을 가공하지 않고 묶어놓은 상태라고 진단할 수 있겠습니다. 문서화는 거의 안되어 있고, 샘플코드도 없을 때가 많습니다. 이 프로젝트를 얼마나 가져가서 사용하는 지 의심스러울 정도입니다.

빛깔만 좋은 개살구에 지나지 않는 TouchCode지만, 계속해서 변화하는 코드이기에 Jonathan Wight가 어떻게 키워갈지는 지켜보고 싶습니다.

 

 

 

 
댓글 남기기

게시자: 켬 2011년 3월 2일 in iOS개발

 

태그: , , ,