티스토리 뷰
[NY-School] Google App Engine과 Python 시작하기 - Datastore 사용해서 방명록 만들기
Unikys 2012. 10. 7. 10:16* 이번에는 Google App Engine의 데이터베이스, Datastore를 이용해보자.
2012/10/06 - [Mini Project/NY-School] - [NY-School] Google App Engine과 Python 시작하기전에 공부하기
2012/10/06 - [Mini Project/NY-School] - [NY-School] Google App Engine과 Python 시작하기 - Hello world
*개요
: App Engine의 Datastore는 간단한 API로 구글의 인프라를 이용하여 네트워크 트래픽, 분산 등 데이터 유지에서 고려해야하는 사항들을 해결해준다. App Engine의 데이터 저장소는 High Replication Datastore (HRD)로 Parxos 알고리즘을 이용하여 다수의 데이터 센터로 데이터를 중복해서 저장해둔다. 데이터는 entity로서 저장소에 저장되고, 다른 entity를 자식으로 둘 수 있다. 이는 파일 시스템과 비슷한 구조로 이루어져 있어서 다단계의 구조를 가질 수 있다.
* Datastore를 이용한 예제
: 이번에도 helloworld.py를 수정하자.
: 위의 소스는 App Engine에 포함되어있는 데이터 모델링 API를 이용하고 있다. 일단 from google.appengine.ext import db 를 이용해서 api를 가져온다. 그래서 Greeting의 데이터 모델을 구성한다.
Greeting
author = String
content = String (Multiline)
date = DateTime
: 자세한 Property 설정 스펙은 다음을 참고하자. 나중에 디비 설계를 할때 자세하게 한번 더 볼 것이다.
https://developers.google.com/appengine/docs/python/datastore/
: class MainPage는 '/'에 매핑되어서 폼을 보여준다. db.GqlQuery를 이용해서 방명록을 선택하고 결과를 화면에 출력해준다.
: class Guestbook 핸들러는 방명록이 쓰여졌을 때 Greeting 오브젝트를 만들고 author와 content를 세팅하고, greeting.put을 통해서 데이터를 Datastore에 저장한다. db.Key.from_path는 guestbook_name을 사용하는 Guestbook의 entity를 위한 키를 생성하는 함수이다.
* 데이터 스토어에서 GQL을 이용해서 데이터 선택하는 방법
소스코드에 있는
greetings = db.GqlQuery("SELECT * FROM Greeting WHERE ANCESTOR IS :1 ORDER BY data DESC LIMIT 10")
대신에
greetings = Greeting.gql("WHERE ANCESTOR IS :1 ORDER BY date DESC LIMIT 10", guestbook_key(guestbook_name))
로 대체할 수도 있다. 조금은 간단하게 'SELECT * FROM Greeting"이 생략 가능한 것이다.
: 만약에 필터 기능을 넣고 싶다면 WHERE 절에 추가 옵션을 추가하면 된다.
greetings = Greeting.gql("WHERE ANCESTOR = :1 AND data > :1 ORDER BY data DESC" , guestbook_key(guestbook_name), datetime.datetime.now() + datatime.timedelta(days=-7)
이렇게 순차적으로 파라미터를 입력하거나 또는 아래처럼 파라미터 이름을 매핑할수도 있다.
greetings = Greeting.gql("WHERE ANCESTOR = :ancestor AND data > :date ORDER BY data DESC" , ancestor=guestbook_key(guestbook_name), date=datetime.datetime.now() + datatime.timedelta(days=-7)
: 또는 아래와 같이 선택하는 메카니즘도 가능하다.
greetings = Greeting.all()
greetings.ancestor(guestbook_key(guestbook_name))
greetings.fileter("date >" , datetime.datetime.now() + datetime.timedelta(days=-7))
greetings.order("-date")
* 실행
: 이제 다시 실행을 해보자.
: 방명록을 입력해보자. 'Hello, Guestbook!' 입력하고 submit을 해보니,
: 입력한 내용이 출력되었다. (이전에 users의 로그인 창에 로그인했더니 사용자가 출력되어서 나왔다.)
: GAE콘솔로 들어가서 확인해보자. Google App Engine Launcher의 'SDK Console'을 누르거나, http://localhost:8080/_ah/admin/로 접속을 하면 개발용 서버의 datastore 상황을 검색할 수 있다. Greeting에 들어가보면 추가된 것을 볼 수 있다. 이렇게 저장된 데이터는 삭제 요청을 할때까지는 웹서버에 계속 보존하게 되므로 데이터베이스처럼 사용하면 된다.
* index.yaml 생성
: 로컬에서 datastore를 사용하면서 order등을 사용하게 되면 index.yaml파일이 자동으로 생성하게 된다. 들어가서 확인해보면,
: Greeting에서 date를 기준으로 order를 했더니 인덱스가 자동으로 생성되었다. RDB처럼 인덱스를 수동으로 추가를 할수도 있는데, 아래 사이트에 인덱스에 대해서 문서화 되어있다. 나중에 데이터베이스 설계할때 다시 한번 볼 것이다.
https://developers.google.com/appengine/docs/python/datastore/indexes
* GAE와 Python로 Datastore 사용하기 끝.
- Total
- Today
- Yesterday
- php
- K100D
- google app engine
- 팁
- GX-10
- 뽐뿌
- Writing
- 안드로이드 앱 개발 기초
- Javascript
- 속깊은 자바스크립트 강좌
- ny-school
- gae
- 삼식이
- 서울
- 자바스크립트
- c++
- mini project
- Python
- HTML5 튜토리얼
- 안드로이드
- gre
- Android
- 샷
- java
- TIP
- HTML5
- lecture
- 강좌
- 탐론 17-50
- 사진
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |