본문 바로가기
Cloud/Google App Engine

구글 앱 엔진(Google App Engine)으로 웹 애플리케이션 시작하기(1)

by o테리o 2010. 3. 19.
제공 : 한빛 네트워크
저자 : Noah Gift
역자 : 김인희
원문 : Getting Started with the Google App Engine

구글 앱 엔진 소개

저 위에 높이 있는 것이 뭐지? 새인가? 아니, 비행기인가? 아니, 귀도 반 로섬(Guido Van Rossum)과 그가 참여한 앱 엔진(App Engine)팀이 아닌가? [역자주: 귀도 반 로섬은 암스테르담 출신으로 파이썬의 창시자이며 2005년에 구글에 합류하였다] 필자는 이번 주말에 구글 앱 엔진(Google App Engine, 이하 GAE)을 사용해서 교육용 예제 애플리케이션 하나를 만들어 보았는데, “이거 정말 굉장한 물건이야!”라고 소리칠 정도로 정말 놀랍다는 말밖에 할 수가 없었다.

GAE를 아직도 들어본 적이 없는 분들을 위해 간단히 설명하자면, GAE는 일반 대중들이 구글의 인프라를 쉽게 사용할 수 있도록 파이썬 API의 형태로 구글에서 제공한 기술을 일컫는다. 파이썬 개발자들은 손쉽게 애플리케이션 작업에 착수할 수 있기에, GAE는 그들에게 있어 중요한 의미를 가진다. 그렇다고 PHP, 자바, 루비, Perl 등 다른 언어에 익숙한 개발자가 파이썬으로 당장 작업에 착수하거나 애플리케이션을 작성하는데 어려움이 있다는 뜻은 아니다. 다른 언어에 익숙하다면 파이썬 또한 비교적 쉽게 배울 수 있는데, 이는 파이썬이 가장 배우기 쉬운 언어 중에 하나로 손꼽힐만한 요소를 갖추고 있기 때문이다.

이 기사를 통해 몇 가지 GAE 관련 문서들을 살펴보고, 그 후에 SDK를 사용해서 실제로 애플리케이션을 만들어 볼 것이다. 기사 작성을 위해 참고 예제를 만들어 본 것이 있는데 욕심쟁 이 동전 앱 엔진(Greedy Coin App Engine)이라 불리는 애플리케이션이다.

GAE 맛보기

개발자 API

먼저 개발자에게 공개된 API는 다음과 같다.
  • Datastore: 파이썬이나 GQL로 만든 쿼리를 통해 확장성이 뛰어난 구글의 인프라를 사용할 수 있도록 해주는 굉장한 기능을 제공한다.
  • Users API: 이 API를 사용하면 구글의 인증 시스템을 통해 손쉽게 사용자를 인증할 수 있다.
  • Email: 구글 서버를 사용하여 이메일을 보낼 수 있으며 풍부한 API를 제공한다.
  • URL Fetch: HTTP 요청으로 다른 호스트에 있는 데이터를 가져올 수 있다.
제한된 애플리케이션 리소스

GAE 기반으로 작성된 애플리케이션은 CPU 사용량, 대역폭, 저장공간과 같은 리소스에 제한을 받는다.
  • 개발자당 3개의 애플리케이션
  • 500MB 저장공간
  • CPU/메모리/디스크 I/O에 관한 여러 가지 제한사항
  • 하루 2,000건의 이메일 사용
GAE는 리소스 수요량을 높게 잡아 갑작스런 트래픽 증가에 대처하고 있으며, 만약 리소스 제한선을 넘어가는 요청을 한다면 403에러가 발생하게 된다.

더 자세한 내용은 http://code.google.com/appengine/articles/quotas.html에 서 찾아볼 수 있다.

GAE에서 장고(Django) 실행하기

WSGI 핸들러를 사용해서 몇 가지 부분만 수정하면 장고(Django) 기반의 애플리케이션을 실행할 수 있다. (역자주: 장고는 파이썬 기반의 웹 프레임워크이며 WSGI는 웹서버와 애플리케이션간의 통신 규약이다) 더 자세한 내용은 http://code.google.com/appengine/articles/django.html에서 찾아볼 수 있다.

접근 권한 설정

GAE의 기본 접근 권한은 구글 계정이 있는 사용자라면 누구나 애플리케이션을 공유하도록 하고 있다. 그러나 구글 앱 도메인 계정에게만 접근을 허용하도록 변경하는 것도 가능하다.

로깅 설정

GAE는 조작이 쉽고 기능이 강력한 파이썬의 로깅 모듈을 탑재하였다. 5단계의 로그를 기록할 수 있으며, 이들 로그는 관리자 콘솔(http://appengine.google.com/admin) 로 모아진다. 더 자세한 내용은 http://code.google.com/appengine/articles/logging.html에 서 찾아볼 수 있으며, URL 경로 뒤에 ?debug를 붙이면 디버그의 로그 확인도 가능하다.

애플리케이션 예제와 코드

svn 체크아웃을 하면 상당수의 애플리케이션 예제들을 다운받을 수 있다

http://code.google.com/p/google-app-engine-samples/source/checkout

폼(Form) 유효성 검사

GAE에는 구글 데이터스토어에서도 동작하는 커스터마이징된 장고의 폼 유효성 검사 프레임워크가 있다. 이 프레임워크로 폼 작성시 손쉽게 데이터의 유효성을 검사할 수 있다.

데이터스토어

구글 데이터스토어는 요구사항 변화에 유연하면서도 DB 스키마에 영향을 덜 받는 객체지향 데이터베이스이다. 또한 ZODB에 다소 영향을 받으면서도 JQuery와 FBQL의 정신을 계승하고 있다.
SELECT * FROM Story
WHERE title = 'App Engine Launch'
AND author = :current_user
AND rating >= 10
ORDER BY rating, created DESC
한가지 놀랄 말한 사실은, 데이터스토어가 관계형 데이터베이스의 성능 저하의 한 원인으로 지적받고 있는 조인(join)을 지원하지 않는다는 점이다. 필자는 데이터스토어가 GAE API의 감춰진 보석중의 하나라고 보고 있다.

미니 튜토리얼

애플리케이션 작성: 욕심쟁이 동전 교환기

소개

필자는 최근에 “욕심쟁이 동전 교환 알고리즘”에 대한 블로그를 작성한 바 있으며, 커맨드 라인 툴로 작성이 되어있던 알고리즘을 GAE 애플리케이션으로 작성하기로 결정했다. 다른 사람이 보기에 이 방식이 상당히 낯설겠지만, 예전부터 다수의 소규모 웹 애플리케이션들을 커맨드 라인 툴로 작성해왔기에 필자는 어느새 커맨드 라인 툴을 좋아하는 사람이 되어버렸다.

시작하기에 앞서 몇 가지 확실히 밝혀둘 것이 있다. 우선 이 튜토리얼은 철저히 기능 위주의 예제 애플리케이션을 소개하여 여러분들이 소스 코드로 이것저것 해볼 수 있도록 하는 것을 목적으로 두고 있다. 슈퍼유저라면 svn으로 체크아웃 받은 소스코드를 이용해서 자신만의 창작물을 작성해볼 수도 있다.

이 기사 뒤편의 참고자료에 예제 애플리케이션 링크와 소스 코드를 체크아웃 받을 수 있는 서브버젼(subversion) 저장소 링크가 있다.

또한, 이 튜토리얼은 GAE 공식 사이트에 있는 것보다 더 간략하고 실용적인 내용을 담고 있다. 우리가 앞으로 다루고자 하는 항목에 대해 의문사항이 있으면, 참고자료에 있는 GAE 공식 사이트를 방문해서 보다 자세한 사항을 찾아볼 수 있다. 이 튜토리얼은 ‘실용적인’ 내용을 우선시 하기 때문에 이해하기 힘든 부분이 있을 수 있다. 그런 경우, 우선 공식 웹사이트의 튜토리얼을 참고하고 이해한 후에 넘어가길 바란다. 지금까지 언급한 다운로드 관련 정보나 링크는 기사 뒤편에 있는 참고자료에서 확인 가능하다.

시작하기

현재 GAE에는 대략 10,000개의 베타 계정이 생성되어 있다. 필자의 경우 운이 좋아 베타 계정을 얻을 수 있었지만, 그렇지 않더라도 우선은 SDK를 사용해서 오프라인으로 애플리케이션을 제작해 두었다가 공식적으로 계정이 열리면 바로 GAE에 올릴 수 있도록 준비해 두는 것도 좋다. 우선, SDK를 다운받고 helloworld 애플리케이션 작성을 위한 3단계 과정을 수행해보자.

[1단계]
우선 helloworld 디렉토리를 만들고 그 안에 helloworld.py 파일을 생성한다.
print 'Content-Type: text/plain'
print ''
print 'Hello, world!'
[2단계]
helloworld 디렉토리에 다음과 같이 app.yaml를 생성한다.
application: helloworld
version: 1
runtime: python
api_version: 1

handlers:
- url: /.*
script: helloworld.py
[3단계] 이제 dev_appserver.py 스크립트에 helloworld 디렉토리의 절대 경로나 “.”를 넣어 실행하기만 하면 된다. 다음과 같이 필자는 helloworld 디렉토리 안에서 실행을 해보았다.
dev_appserver.py .
helloworld 애플리케이션은 로컬 호스트(http://localhost:8080/) 에서 동작하고 있으며, 지금까지의 3단계 과정이 애플리케이션 개발 시작의 전부이다. 여러분도 앞으로 알 수 있겠지만, GAE의 API가 상당히 강력한 기능을 갖고 있기 때문에 GAE로 애플리케이션을 작성하는 것은 누워서 떡 먹기이다.