역시 예제는 소녀시대를 이용해서.....-_-;
우선 저는 파이썬을 전혀 모르는 상태에서 만들었기때문에 태클환영합니다ㅠ

앱엔진 셋팅은 이곳을 참조 http://mudchobo.tomeii.com/tt/390

우선 편하게 코딩하기 위해서 NetBeans를 이용할 것인데, 이것을 이용해서 애플리케이션을 실행하거나 하지는 않아요. 실행은 cmd창 띄운 뒤, 그냥 수동으로 실행할겁니다(설정을 못해서-_-) 디버깅도 어떻게 하는지 모르겠네요. 할 순 있는건가-_-;

넷빈즈실행 -> New Project -> Python -> Python Project -> Project이름은 GirlsGenerationsAge-_-; -> Finish!
프로젝트 Properties에서 Sources -> Encoding을 utf-8로 변경.

우선 DB모델을 만들어야하는데요.
[code]class Sosi(db.Model):
    name = db.StringProperty()
    birth = db.IntegerProperty()[/code]
db.Model을 상속받고, name과 birth라는 property가 있어요. name은 이름이고. birth는 태어난 해입니다.

첫 메인페이지를 만들어야하는데요.
[code]class MainPage(webapp.RequestHandler):
    def get(self):
        path = os.path.join(os.path.dirname(__file__), 'html/index.xhtml')
        self.response.out.write(template.render(path, {}))[/code]
이 페이지는 html/index.xhtml파일을 불러오게 되어있어요. 그럼 html/index.xhtml파일을 만들어봅시다.
우선 html이라는 폴더를 source에다가 하나 만들고, 거기에다가
New -> Other -> Other -> XHTML File -> File Name은 index입력 후 finish.
html/index.xhtml
[code]<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
        <title>소녀시대 나이검색</title>
    </head>
    <body>
        <form action="/search" method="post">
            <div>소녀시대 멤버이름을 입력하세요 :
            <input type="text" name="name" />
            <input type="submit" value="검색" /></div>
        </form>
    </body>
</html>[/code]
메인페이지가 완성이 되었어요! 그럼 이제 요청을 하는 search페이지를 만들어봅시다.
[code]class Search(webapp.RequestHandler):
    def post(self):
        name = self.request.get('name')
        sosis = db.GqlQuery("SELECT * FROM Sosi WHERE name = :1", name)
        sosi = sosis.get()
        if sosi:
            now = time.localtime()
            age = now.tm_year - sosi.birth + 1
        else:
            age = 0
        path = os.path.join(os.path.dirname(__file__), 'html/search.xhtml')
        template_values = {
            'age': age,
            'name': name
        }
        self.response.out.write(template.render(path, template_values))[/code]
post요청이 들어오면 post함수를 호출하네요. name에 대한 파라메터값을 받아서 그 값을 이용해 GqlQuery를 날려줘서 sosi객체를 가져옵니다. 그러면 현재 year를 이용해서 나이를 구할 수 있습니다. 그럼 search.xhtml파일에 값을 나이와 이름을 넘겨줘서 요청하게 되어있네요.
html/search.xhtml
[code]<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
        <title>소녀시대 나이 검색결과</title>
    </head>
    <body>
        {% ifequal age 0 %}
            {{name}}은/는 소녀시대의 멤버가 아닙니다.
        {% else %}
            {{name}}의 나이는 {{age}}세 입니다.
        {% endifequal %}
    </body>
</html>[/code]
저기 html안에 if문같은 것은 Django template language라는 것인데요. JSP에서 jstl같은게 아닐까요?-_-;
암튼 값이 없으면 0을 넘겨주기 때문에 0이면 멤버가 아니고, 나이가 나오면 멤버가 되는 형식으로 되어있습니다.

아래는 이해는 잘 못했습니다만, 어떤 요청이 오면 어떤 클래스를 요청하고 정의하는 것 같은데, 이렇게 쓰이더라구요-_-;
[code]application = webapp.WSGIApplication([
    ('/', MainPage),
    ('/search', Search)
], debug=True)[/code]
끝으로 메인페이지입니다.
[code]def main():
    db.delete(Sosi.all())
    Sosi(name=u"윤아", birth=1990).put()
    Sosi(name=u"수영", birth=1990).put()
    Sosi(name=u"효연", birth=1989).put()
    Sosi(name=u"유리", birth=1989).put()
    Sosi(name=u"태연", birth=1989).put()
    Sosi(name=u"제시카", birth=1989).put()
    Sosi(name=u"티파니", birth=1989).put()
    Sosi(name=u"써니", birth=1990).put()
    Sosi(name=u"서현", birth=1991).put()
    run_wsgi_app(application)[/code]
뭐 우선 처음 애플리케이션이 실행될 때, DB에 있는 걸 다 날려버리고, 해당 데이터를 삽입하고 시작하게 됩니다.
GirlsGenerationsAge.py

파이썬 전체 코드입니다.



이제 YAML파일을 만들어야 합니다.
New -> Other -> Other -> YAML File -> File Name은 app, Folder는 src폴더로 지정해야합니다.
app.yml
[code]application: ggages
version: 1
runtime: python
api_version: 1

handlers:
- url: /.*
  script: GirlsGenerationsAge.py[/code]
우선 script부분에서 해당 py파일을 넣어주면 되고, application에는 App Engine에서 생성한 Application ID를 입력해주시면 됩니다. Girls' Generations Age의 약자로.....ggages(최소 6자기때문에 s를...-_-)

실행을 해봅시다.
cmd창을 열어서 해당 넷빈즈 프로젝트로 이동합니다. 아래와 같이 실행합니다.
[code]C:\Users\mudchobo\Documents\NetBeansProjects\GirlsGenerationsAge>dev_appserver.py src/[/code]
그리고, http://localhost:8080 으로 브라우저를 띄워서 접속해봅시다.
실행이 제대로 된다면, 이제 구글에 올려봅시다.
[code]C:\Users\mudchobo\Documents\NetBeansProjects\GirlsGenerationsAge>appcfg.py update src/[/code]
이렇게 하면 처음하는 경우에 구글계정의 아이디와 비밀번호를 물어봅니다. 입력하면 바로 디플로이됩니다.

http://ggages.appspot.com/에 접속하면 디플로이 된 것을 확인할 수 있습니다. 자신의 계정에 맞게 디플로이하면 되겠죠?^^

 
Posted by 머드초보

댓글을 달아 주세요

  1. BlogIcon chang 2009.03.10 15:17  댓글주소  수정/삭제  댓글쓰기

    안녕하세요~ 머드초보님. 저도 글 잘 보고 갑니다.

    • 머드초보 2009.03.13 12:12  댓글주소  수정/삭제

      앗~ aproxacs님^^
      방문해주셔서 감사해요~ ^^
      저도 파이썬을 파야겠습니다^^

  2. django 2009.06.28 20:06  댓글주소  수정/삭제  댓글쓰기

    파이썬은 아래와 같은것을 거짓으로 해석합니다.

    An empty list ([])
    An empty tuple (())
    An empty dictionary ({})
    An empty string ('')
    Zero (0)
    The special object None
    The object False (obviously)

    따라서 {% ifequal age 0 %} 이런식으로 쓸 필요없이 {% ifequal age %} 로 사용하셔도 됩니다.

 
사실 어떤 블로그를 보고 구글에서 세미나 한다고 해서 가보고 싶어서 신청했는데, 되서 가게 되었는데....난....App Engine이 뭔지도 모르고....OpenSocial은 또 뭐고.....-_-; 아무것도 모르는 상태에 가서 세미나를 들었습니다. 역시나......뭔소린지 하나도 모르고 그냥 돌아왔습니다 ㅠ

우선 처음에 가니....구글코리아가 여기 강남에 있었군요-_-; 참 색다른 경험이였습니다-_-; 알록달록한 것이 참 이쁘네요. 암튼, 시간이 좀 늦어져서 좀 늦게 20분 후에 시작했던 것 같네요.

Making Money with OpenSocial

간단하게 오픈소셜로 수익을 얻을 수 있는 것을 발표했습니다. 그 첫번째로 광고구요. 광고는 인터넷에서 필수적인 수익모델이죠^^ Buddy Poke라는 것이 가장 유명한 것 같은데, 지금 방금 실행해보니....대체 뭐하는 건지 모르겠습니다-_-; 전 친구가 하나도 없어서 그런가요?-_-; 그냥 어떤 놈이 나와서 저한테 손만 흔드는군요-_-; 왠지 플렉스로 만든 것 같습니다. 플렉스 컴포넌트들이 막 보이네요.
http://www.buddypoke.com/

두번째로는 Virtual Currency네요. 이건 국내에서 게임 업체나 커뮤니티업체들이 많이 하는 모델이죠. 아바타 사려면 돈을 결제해야하는 그런...cyworld에 도토리 보내 달라고 하는 복혜은이 생각나네요(친구입니다-_-).

세번째는 offers인데요. 어떤 요구사항을 들어주고, 돈이나 Point를 받는거죠. 이것도 국내에서 많이 하는..-_-; OK CashBag모을 때나 던전앤파이터를 하는데, 캐쉬가 모자라서 창고를 못살 때 쓰는 좋은 방법이죠-_-; 아래는 Mobsters라는 건데, 게임인 듯 한데, 뭔가 복잡하군요. 이곳에서 쓰이는 돈을 받기위해서 어딘가 회원가입을 해서 Cash를 모아야하나 봅니다-_-;
http://profile.myspace.com/Modules/Applications/Pages/Canvas.aspx?appId=104283

네번째는 Brand Marketing이라고 하는데, 뭘 말하는건지 모르겠네요.

위에 사례를 들어보니...오픈소셜 애플리케이션을 만들고 싶군요. 마이스페이스같은 SNS서비스에 APP를 만드는 것인 것 같습니다. 한번 알아봐야하겠습니다(뒷조사를..-_-)


Google App Engine

아....외국인입니다...뭔말하는지 못알아 듣겠군요. 다행히 통역해주시는 분이 계셨습니다만, 몇마디는 생까고 해주신 것오늘 가장 큰 깨달음은 영어공부를 해야한다였습니다-_-; 영어공부를 해야합니다...ㅠ
오늘 대충 얘기를 들어보니 App Engine은 구글에서 서버사이드환경을 제공하며 구글이 제공하는 Framework를 이용해서 손쉽게 웹애플리케이션을 구축할 수 있는 것 같습니다. 즉, 웹애플리케이션을 구동시키기 위한 서버 환경셋팅과정은 생까고, 구글에서 제공하는 서버환경 및 Database를 사용할 수 있는 것입니다. 뭐 단점이라면 지원언어가 Python밖에 없는 합니다. 아직 사용해보지는 않았지만, 이걸 사용한다면 서버 비용 절감 및 개발 시간 단축정도가 되겠네요. 게다가 구글인증을 사용해서 구글서비스와 손쉽게 연동이 되는 듯 하네요.

우선 처음에 얘기해준게 역시나 이거였습니다. 웹 애플리케이션 개발 시 문제점! 서버셋팅이죠. 서버머신도 있어야하고, 그곳에 여러 제품(Linux, Database 등)의 셋팅 등의 어려움이 있는데, App Engine에서는 이 모든 것을 하나에 담아서 제공합니다(아놔.....오늘부터 파이썬 파야하나....-_-)

또한 장점으로 쉽게 시작할 수 있고(파이썬 아닌사람이나-_-), 쉽게 변경이 가능하다고 하네요. 또한 구글과 같은 Infra를 사용해서인지 구글규모의 대규모 서비스도 가능하다고 하네요. 아...BigTable설명하면서 Database관련된 것을 보여줬는데, GQL(당연히 Google Query Language겠지-_-)라는 것을 이용해서 쿼리를 날립니다. SQL과 비슷한 문법으로....마치 HQL과 같은 형태로 App Engine에 맞게 최적화시킨 듯 합니다.

데모를 보여줬는데, 간단한 Hello World찍는 건데, 있다가 한번해봐야겠습니다. 설정할 수 있는 파일인 yaml(야믈이라고 읽더군요-_-)을 이용해서 뭐 하는 것 같은데...암튼, 방명록같은 것도 손쉽게 만들 수 있는 것 같습니다. 게다가 셋팅이 필요없는 개발환경을 제공하는 점이 너무 좋은 것 같네요. Java로 방명록 만드려면, 톰캣깔고, MySQL깔고, 뭐 그래야하는데, 이건 뭐 그런게 필요없는 듯 합니다. 좋아요~


App Engine + OpenSocial

뭐 두개를 이용해서 애플리케이션을 만들 수 있는 것 같은데, 둘 다 전혀 모르는 거라...그냥 멍하니 보다가 왔습니다.

아....보니까 OpenSocial애플리케이션 만드는 법이 Google에 Gadget(외국인들은 개짓이라고 발음합니다. 개짓하고있네-_-)만드는 거랑 같은 코드인 것 같네요. Module들어가고...전에 다음위젯뱅크 좀 보다가 본 건데, Javascript로 개발하는 듯 합니다. 지금 0.8버전까지 나왔는데, 지금은 기존처럼 Javascript형태로 개발이 가능한데, 나중에 템플릿기반의 개발이 가능한 듯 합니다. HTML태그를 입력하는 형태로 개발을 할 수 있는 듯 합니다. 마치 Flex에서 xml로 코딩할 수 있는 것 처럼이랑 비슷한 것 같습니다. 차후버전인 0.9에서 지원한다고 하네요.

아무것도 모르는 상태에서 글을 쓰려니 저도 뭔소리 한지도 모르겠네요. 그냥 들은 거랑 제 생각을 좀 포함해서 쓴겁니다. 잘못된 내용이 있을 수도 있습니다. 돌은 던지지 마시구요-_-;
사용자 삽입 이미지

제가 좋아하는 공책과 펜이군요. 공책과 펜을 너무 좋아합니다ㅠㅠ


 
Posted by 머드초보

댓글을 달아 주세요