RSS

태그 보관물: appengine

KR Domain 검색 OpenAPI

한국인터넷진흥원(KISA)에서 OpenAPI를 지원한다는 기사를 보고 평소에 오픈API에 호기심이 많았던 제가 사용해보려고 신청을 했습니다. 누구든지 이메일과 사용목적만 채워서 신청 하면 API를 사용할 수 있는 것 같습니다. 하지만 키가 발급되니 과도한 사용에 대해서는 규제가 될 수 있겠습니다.

제공하는 API는 한종류로  Whois OpenAPI 입니다. kr로 끝나는 도메인을 검색해서 누가 등록했는지 정보를 XML형식으로 리턴해줍니다. 이 API를 이용해서 KR 도메인을 검색해주는 페이지를 하나 만들어 봤습니다.

요즘은 JSON을 주로 쓰시는거 같던데, 여기는 XML로 내려주는 게 좀 아쉬웠습니다. JSON으로 주면 좋겠다는 생각이 간절하더군요.

그래서 gateway역할을 하는 놈을 하나 만들었습니다. 🙂

whois 요청을 하면 json으로 내려주는 앱스입니다.

사용법은 간단합니다.

post나 get방식으로 key, domain_name을 채워서 request하면 json으로 response해줍니다.

요청할 주소는, http://social-tools.appspot.com/whois.json 입니다.

key는 당연히 KISA에서 받으셔야 합니다. domain_name은 abc.kr 이런 식으로 kr로 끝나는 도메인이어야 합니다.

필요하신 분들은 맘껏 쓰시기 바랍니다. 😉

최피디 드림

Advertisements
 
댓글 남기기

게시자: 켬 2011년 4월 18일 in 100LoC, OpenAPI, Python

 

태그: , , ,

GAE용 python2.5 설치하기

OSX 사용자들에게는 이미 python이 설치되어 있는데 그 버전이 2.6.x입니다.  구글 앱엔진의 python runtime 2.5.x와 차이가 있어서, urllib같은 모듈을 사용할 때 ctype 모듈을 가져올 수 없다는 에러를 보신분이 계실겁니다. 그럼 내 맥북에도 2.5를 설치할 동기는 충분해졌다고 봐야겠죠?

어떻게 설치하는게 가장 빠른가 하면, macports입니다. mac port는 BSD계열의 유닉스에서 패키지를 아주 쉽게 설치할 수 있도록 해주는 유틸인데요. 리눅스의  yum, apt-get같은 것이라 보시면 됩니다. 맥포트가 기본으로 깔려 있지 않기 떄문에 설치를 해줘야 합니다. macport사용을 위해서는 개발툴인 Xcode가 깔려 있어야 합니다. 앱스 개발자분들이라면 이미 깔려있으리라 예상되니 pass! (ptyhon 문법이더군요)

설치방법은 정말 간단합니다.

sudo port install python25

이 한 줄이면 설치됩니다. 설치는 /usr/bin/ 아래에 되었군요. 그런데 terminal 에서 python이라고 치면 2.6x가 뜹니다. 아마도 관련 심볼릭 링크 때문인가보네요. 단순히 python 링크만 바꿔주는게 아니라 library도 2.6 이 아닌 2.5로 바꿔줘야 하는데 이것들이 귀찮습니다. 이때 쓰려고 python_select란 유틸이 있습니다. 이것도 macport를 써서 쉽게 설치할 수 있습니다.

sudo port install python_select

설치되었다면 실행시켜야지요~!

python_select python25

이제 python을 실행시키면 2.5.x가 뜹니다. (올레~!)

하지만 appengine launcher를 실행시켜서 앱스를 실행해봐도 여전히 2.6.x의 라이브러리를 참조하는 듯 에러를 내고 있습니다. 이럴 때는 appengine laucher의 preferences에서 Python Path:를 /usr/bin/python2.5 로 바꿔주고 리스타트 하면 해결됩니다.

이게 2.5.x 환경의 appengine 테스트 환경이 구성되었습니다.

즐프하세요~!

최피디 드림

 
댓글 남기기

게시자: 켬 2011년 4월 18일 in AppEngine, OSX, Python

 

태그: , , ,

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는 먼저 써보고 싶어질 정도였죠. 앱스 개발자 여러분 클라우드에 도전해보십시오. 막연한 두려움 가질 필요가 없어요. 해보면 별거 없습니다.  주저하고 있다면 저질러보십시오. 이년전에 제가 주저하다가 말아버린 걸 후회하는 전철을 밟지 마시길 당부드립니다.

최피디 드림.

 

태그: , , , , , , ,