전문적으로 개발하는 것은 아니고, 어디까지나 취미로 시작했던 작업이다.

기존에 Azuare로 구현했던 내용을 이번에는 Google Apps Engine으로 개발한 것이다.

아마도 단순 접근성으로 따지면 단연 Google Apps Engine인 것 같다.

제일 먼저 높은 점수로 줄 수 있는 부분은 대부분의 비용이 Free 라는 사실이다.

이거 때문에, Azure에서 이 Google Apps Engine을 선택한 주요한 원인이니까,

상당한 매리트였다.

그리고 Java 지원. 사실 지금 그나마 다룰 줄 언어는 C/C++, C#, Java 뿐이니, Python이라든가, Peal 이렇게 나왔으면 아마도 GG였을 것 같다. Google Apps Engine 초창기는 Python 이라고 했는데, 그 당시의 생각만 했다면 접근 불가였을 것이다. 그런 시스템이 지금은 Java를 훌륭하게 지원한다.

다음은 시작하기 가뿐한 Start up Tutorial 이다. 이것 따라하기만 하면 금방 개념이라든가

처리하는 방법을 배울 수 있었다. 훌륭한 내용이지 않을까 싶다.


그러나, 이런 훌륭한 접근성에 비해 마음에 안드는 부분이 있기는 했다.

제일 먼저 Back 단에서 처리하는 작업을 하기 위한 일종의 Service 개념이 없었다.

지금까지 찾아서 확인한 것 까지 본다면, JSP 페이지와 같은 I/F를 통해 Request/Response 기반의

작업 뿐인 것 같다. 물론 cron 이나, queue와 같은 것들을 활용하여,

각 Request를 마치 Service 처럼 구성하면 될지는 모르겠지만…


처음에 아무 생각없이 Azure에서 구현한 방식대로 구현한 뒤, 내 PC에서 돌릴 때는 문제가 없었다가,

이번에 처음으로 Google Apps Engine에 올려보니, 역시 Request Time out 이 발생하였다.

아마도 Request가 들어오게 되면 처리하는 내용이 많다보니, Response까지 나오는 시간이

의외로 많이 걸리게 되었는데, 바로 걸려 버리는 문제가 발생했다.


일단, 소정의 목적만 달성하고, 현재는 재설계 계획 중이다.

Response가 빠르게 할 수 있도록 Job을 Page 단위로 분해하여 재조립을 해야 할 필요가 느껴졌다.

여튼 현재로는 Back 단에서 서비스 처럼 동작하는 부분이 없다는 약점만은 어떻게든 보완할 필요가 있다.
( 최소한 Azure에는 Worker 라는 개념이 있고, Amazone 에서는 Enterprise 서비스를 활용하면 그 안에서 처리할 방법이 있는 것 같다. )


Java로 웹 서비스 같은 것을 개발할 계획이라면, 한번 활용해 보는 것도 나쁘지 않을 것 같다!!

728x90

.NET 2.0 시절 부터 웹 프로그램을 시작하는 바람에,

ASP.NET 2.0에서 제공하는 MVC 분리 작업에 놀라면서 다양한 방법으로 사용했다.

사실 이 부분에 있어 대부분의 View와 연결하는 작업이 숨겨져서 구현된 부분이 많아

그 내용을 조사하는데 많은 시간을 할애한것도 사실이지만,

최소한 전체적으로 바라 볼때, 상당히 매력적인 것은 사실이였다.

 

그러다가, 요즘 Java  쪽으로 넘어와서 보는데,

왠걸… 이거 구석기 시대의 웹프로그래밍이 아닌가…

일단 servlet. 이건 Http 처리를 위한 최하단 프로그래밍이였고,

JSP는 옛날 유행했던 HTML 코드와 프로그램 코드가 엉겨서 어쩔 줄 모르게 만드는
(이 부분이 내가 과거 웹프로그래밍을 기피하게 된 원인 1순위) 형태였다.

 

이미 시작한 것 끝까지 가자는 마음에 하나씩 구현하다가,

우연히 JSP Tag 라는 것을 들었다. 그러다가… 아하.. 라는 생각을.

바로 이 JSP Tag라는 것이 지금까지 내가 해왔던 ASP.NET 2.0의 형태였다.

단지 틀린 것은 ASP.NET 2.0에서는 대부분 MS에서 구현하여 숨긴 내용을

여과없이 보여주면서, 원하는대로 만들라고 하는 것 뿐이였다.

 

아직은 JSP tag 손대기는 시간상이나, 지식상으로 딸리기 때문에, 일단 당분간은
JSP 구현을 계속 할 예정이다. ( 의외로 많이 익숙해져 버렸다. )

게다가 바로 이 Servlet은 AJAX.NET을 위한 데이터 I/F 구현에 있어서는

최강의 모습을 보여주니 더욱더 매력적이지 않을 수 없다.

 

나중에 시간이 되면 JSP tag 쪽 공부도 할 예정이다.

728x90

지금까지 해온 웹 프로그래밍은 ASP.NET 2.0 기반으로 해왔기 때문에, 이 지식을 기반으로 Java에 매핑하기 시작했다. 사실 지금까지 ASP.NET 2.0 형태로 Web Form을 구성하면서, 외부에 노출되지 않은 내부 기능들에 많이 답답해 왔던 것도 사실이다.


그런데, 이번 Java기반 웹 프로그래밍을 하면서 이 ASP.NET이 많은 부분에 있어 프로그래머에게 편의를 주고 있다는 점을 알게되었다. ( 물론 Java 기반의 웹 프로그래밍을 전부 파악하고 하는 말은 아니다. 분명 Java에서도 다양한 기능들이 있기 때문에, 쉽게 처리할 수 있는 방법은 있을 것이다. )


일단 ASP.NET 2.0 으로 넘어가면서 웹 페이지 디자인 코드 부분과 코드 부분이 명확하게 나뉘게 되었다. 그래서 실제적인 .NET 코드들은 코드 부분이 담기는 페이지에 담기고, HTML 부분은 ASP 부분에만 담기게 되었다. 그 사이를 IIS와 .NET 엔진에서 알아서 붙여 진행하였다. ( 이 부분은 대부분의 웹 프로그래밍 환경에서는 최악의 문제점으로 알고 있다. 디자인과 코드가 뒤엉키다 보면 유지보수가 너무 어렵다. )


더 결정적인 부분.

사실 Form에서 데이터를 전달할 때, Ghost 페이지라는 것을 만들어 사용했다. 즉, Form에서 입력된 데이터를 DB에 저장하거나, 그 데이터를 기반으로 특정 값을 찾는 작업을 하려고 할 때, 사용자에게 보여주지는 않는 페이지를 Form의 Action으로 등록하여 처리하는 것이다. 


이 때, Servlet과 JSP에서는 이렇게 처리한다.

JSP에는 실제 사용자에게 값을 입력 받을 때 사용되는 Form(혹은 결과값을 보여주는 Form)으로 제공되고, Servlet은 이 Form에서 만들어진 값을 받아 처리하게 되는 일종의 Ghost 페이지처럼 동작하도록 하는 것이다.


즉, 입력 Form(JSP) –> Servlet –> Form(JSP).


합리적이긴 하지만, ASP.NET 2.0 기반 프로그래머 입장에서는 순간 헤매기 십상일 듯 싶었다.

게다가 Servlet 이라는게 사실 Web Server와 직접 연동하여 동작하는 작업을 구성하는 것이기 때문에 왠지 접근하기가 쉽지 않은(.NET 에서는 이 부분의 로직을 모두 숨겨서 알아서 처리해 줬기 때문이다. )부분이라, 망설임이 지대로다.


지금 Google Apps Engine 코드들을 하나씩 까면서 차근 차근 따라가보고 있다.

뭐랄까 새록새록 한 기분?

728x90

원본글 : http://code.google.com/appengine/docs/java/gettingstarted/installing.html

Google App Engine에 대한 Java 응용 프로그램은 App Engine Java SDK(Software Development Kit)을 이용하여 만들고, 업로드 하게 됩니다.

SDK에는 직접 제작한 Java 응용 프로그램을 자신의 컴퓨터에서 테스트 해볼 수 있도록

웹 서버 소프트웨어를 포함하고 있습니다.

이 웹 서버에는 모든 형태의 App Engine 서비스를 모의 실험할 수 있도록 준비되어 있습니다.

로컬 버전의 데이터 저장 장소를 제공하며, Google Account 모듈 및 URL 추출 및

Email 발송 등등의 기능들도 포함 되어 있습니다..


Java 구하기.

Google App Engine에서는 Java 5와 Java 6를 지원합니다.

먼저 App Engine을 구동 시키기 위해서는 Java 6의 가상 머신(JVM)과 표준 라이브러리가 팔요합니다.

개인 PC에서 동작되는 내용이 App Engine에서도 정상적으로 동작하기 위해서는

가급적 Java 6에서 컴파일하고, 테스트를 하시는 것을 권장해 드립니다.

하지만, 개발자분들 중에는 Java 6 시용이 쉽지 않은 분들도 계실 것입니다.

( 예를 들면, Mac OS X를 사용하여 개발하시는 분들 같은 경우 최신 버전이 Java 5일 경우가 많습니다.)

일단은 App Engine 자체가 Java 5와의 호환성을 유지하기 때문에,

Java 5로 만들어진 JAR 나 컴파일 된 클래스들도 App Engine에서 정상적으로 동작합니다.


먼저 여러분이 가진 PC 환경에 맞는 Java SE Development Kit(JDK)을 다운로드 받으시고 설치하시기 바랍니다. Mac 사용자 분들은 Apple의 Java 개발자용 사이트 에서 최신 버전의 JDK를 받으시고 설치 하시기 바랍니다.

JDK를 설치하셨다면, 다음 명령을 명령 창(Windows라면 명령줄 프롬프트이고, Mac 사용자라면 Terminal)에 넣어 실행해보시어 현재 설치된 Java 가 정상적으로 설치되어 있는지, 버전이 맞는지 등을 확인해주시기 바랍니다.

java -version

javac -version

만일 Java 6가 설치되어 있다면 출력되는 내용에 버전 번호가 대략 1.6.0 이런 식으로 표시될 것입니다. 만일 Java 5라면, 1.5.0 이런 식으로 출력되겠죠.


Eclipse와 Google Plugin for Eclipse 사용하기.

Eclipse 개발환경을 이용하여 Java를 개발하고 있으시다면,

Google Plugin for Eclipse를 사용하여 개발, 테스트, 배포의 모든 단계가 훨씬 간단하게 하실 수 있습니다. Plugin은 Eclipse 안에서 응용 프로그램의 빌드, 테스트, 배포 전 단계에 필요한 모든 것을

처리할 수 있도록 각종 도구들을 담고 있습니다.

Plugin 자체는 Eclipse에서 제공하는 Software Update 기능을 사용하여 설치할 수 있습니다.

그러나, Eclipse 의 버전에 따라 설치할 수 있는 Plugin이 다릅니다.

다음은 각 버전 별로 설치할 수 있는 Plugin의 URL입니다.


Google Plugin for Eclipse – for Eclipse 3.3 ( Europa )

http://dl.google.com/eclipse/plugin/3.3

Google Plugin for Eclipse – for Eclipse 3.4 ( Ganymede )

http://dl.google.com/eclipse/plugin/3.4

Google Plugin for Eclipse – for Eclipse 3.5 ( Galilieo )

http://dl.google.com/eclipse/plugin/3.5

Eclipse에서 Software Update를 이용하여 Plugin을 설치하는 방법이나,

새로운 프로젝트를 생성하는 방법 등에 대한 자세한 내용은 Google Eclipse Plugin을 사용하기를 보시기 바랍니다.


SDK 구하기.

Eclipse를 이용하여 Google Plugin을 설치하셨다면,

App Engine SDK가 자동적으로 Eclipse 안에 설치됩니다.

(개별적으로 설치하여 직접 콘솔에서 작업하는 경우라면 원본의 내용을 참고하시기 바랍니다.)


데모 응용프로그램 실행해보기

Eclipse의 Plugin 형태로 SDK가 설치되어 있다면, Eclipse 설치 디렉터리 밑에 plugins/com.google.appengine.eclipse.sdkbundle_VERSION/ 의 경로 중

VERSION 부분이 SDK 버전 번호로 구성된 폴더에 위치되어 있습니다.
(예를 들어 1.3.0 버전이라면 plugins/com.google.appengine.eclipse.sdkbundle.1.3.0_1.3.0.v200912141120 식으로 담겨 있습니다.) 일단 명령 창을 띄워서 디렉터리를 저 위치로 이동하시기 바랍니다.

만일 Mac OS X나 Linux 사용자 이면,

실행용 배치 파일이 실행될 수 있도록 실행 권한이 설정되어 있는지 반드시 확인해주시기 바랍니다.

( chmod u+x dev_appserver.sh 라는 명령을 입력하여 설정되어 있어야 합니다. )


윈도우 사용자라면, 다음 명령어를 입력하면 개발용 서버에 방명록 데모 응용 프로그램이 실행되게 됩니다.
(아래 내용의 줄 바꿈은 길이가 너무 길어 줄 바꿈이 된 것입니다. 실제로는 한 줄로 표현 되야 합니다.)

appengine-java-sdk\bin\dev_appserver.cmd appengine-java-sdk
\demos\guestbook\war

Mac OS X 나 Linux 사용자는 다음과 같은 명령어를 입력하시면 됩니다.
(아래 내용의 줄 바꿈은 길이가 너무 길어 줄 바꿈이 된 것입니다. 실제로는 한 줄로 표현 되야 합니다.)

./appengine-java-sdk/bin/dev_appserver.sh appengine-java-sdk
/demos/guestbook/war

개발 서버가 실행되면, 기본 설정이 8080 포트를 이용하여 요청 처리하게 됩니다.
브라우저를 실행하여 다음 URL을 넣어보시기 바랍니다.


http://localhost:8080/


명령 줄에서 개발용 웹 서버 실행에 대한 더 자세한 정보가 필요하시면
the Dev Web Server referece를 참고하시기 바랍니다.

서버를 중지하시려면, 명령 창에서 Ctrl + C를 누르면 됩니다.


다음은…

여러분의 PC에 App Engine 응용 프로그램을 개발하고 테스트 할 수 있는 개발 환경이 갖추어졌을 것입니다.
이제부터 간단한 프로젝트를 시작하도록 하겠습니다.


프로젝트 생성하기로 계속됩니다.

728x90

원본글 : http://code.google.com/appengine/docs/java/gettingstarted/introduction.html


Google Apps Engine에 오신 것을 환영합니다!

App Engine 응용 프로그램 제작은 간단하기 때문에, 몇 분 정도만 투자해도 쉽게 만들 수 있습니다.

그리고 시작하는데 비용이 전혀 들지 않습니다. 단지,

만든 응용 프로그램을 업로드하고, 사용자들과 나누어 활용하시기만 합니다.

이 작업에 대해 아무런 비용 청구는 없습니다.


Google Apps Engine은 Java 또는 Python을 이용하여 제작하실 수 있습니다.

여기에서 소개하는 방법은 Java를 이용한 방법으로 만일 Python으로 제작하시고 싶으시다면,

Getting Start: Python 을 보시기 바랍니다.


이 튜토리얼에서는 다음과 같은 내용들을 알려드릴 것입니다.

  • JSP 와 서블릿과 같은 표준 Java 웹 기술을 사용하여 App Engine 응용 프로그램 만드는 법.
  • Eclipse로 App Engine Java 프로젝트를 생성하는 방법
    (원본에서는 없이 하는 방법도 소개하나, 여기서는 생략)
  • Google Plugin for Eclipse 를 이용하여 App Engine 개발하기
  • Java Data Object(JDO) 표준 인터페이스를 활용한 App Engine 저장 방법 사용하기.
  • 사용자 인증하는 방법을 Google Account를 이용하여 App Engine 응용 프로그램에서 처리하기.
  • App Engine으로 새로 만든 응용 프로그램을 업로드 하기.

튜토리얼 끝 즈음에서 여러분들은 공용 게시판에 메시지를 쓸 수 있는

단순한 방명록 응용 프로그램을 직접 작성해보게 됩니다.

다음은.

Google App Engine 자바 응용 프로그램을 개발하기 위해서는 먼저 App Engine Java SDK(software development kit)과 그 외 관련 구성요소들을 다운로드 받으셔야 합니다.

2009/12/22 14:02Java SDK 설치하기로 계속 됩니다.

728x90

Windows Azure 학습할 겸 해서 만들어봤다.

Hands on Lab에 들어있는 내용을 그대로 만들기는 성격 상 허락되지 않기 때문에,
나름대로 쓸모가 있을 법한 내용을 기반으로 구성해보았다.

원리는 간단하다. 현재 로또 사이트를 접속해서 사이트에서 제공하는 당첨번호를 강제로 긁어와
내부적으로 데이터를 쌓는다. 쌓을 때, 번호 별 출현 갯수나, 합계 별 출현 갯수등을 제공하는 UI를 제공한다.
원래는 당첨 번호 확인 같은 기능이나, 자신의 번호 저장 기능 같은 것도 만들어 넣으려고 계획했지만,
Azure가 유료 서비스가 될 거라는 이야기에, 그냥 포기했다.

차라리 무료로 접근이 가능한 Google Apps Engine 쪽으로 선회할 예정이다.

그래도 일단 만들어 본 내용이기 때문에, 소스를 남기도록 한다.

소스 다운로드 링크 : 클릭

Codeplex에 올려 놓으려고 했지만, VS 2008 Team Explorer 클라이언트를 깔기
귀찮아서, 걍 포기.

이 코드를 실행하려면, 최소한 자신의 PC 안에 Azure 개발 플랫폼을 구축해야 한다.

  • Windows vista 이상.
  • IIS 7.0 이상.
  • Visual Studio 2008 이상.
  • SQL Express 2008 이상.
  • Azure SDK 설치.

자세한 내용은 이전 포스트를 참고 하면 된다.

일단 이 버전으로 이번 App는 Close.

이제 부터 Google Apps Engine으로 Go! 다. Java로 Go! 다!!!!


UPDATE !!! 파일 내용에 대한 링크를 Skydrive를 이용해서 올려놨었는데, 이상하게 링크가 깨지더군요.
그래서 개인적으로 사용중인 NAS 쪽에 올려놨습니다.

뭐 필요하신분은 그다지 없을 것 같지만, 그래도 혹시나 하는 마음에 변경 처리했습니다.
728x90
아직 문서들을 정독하지 않아서, 몰랐다.

public CloudQueue GetQueueReference ( string queueAddress )

를 보면 queueAddress 라는 인자값을 넣게 되어 있다.

여기에 늘 그렇듯 낙타식 문자열(카멜식 이름. 예를 들면.. guestBookQueue )으로 적어 주었는데,
에러가 난다. 그래서 한참을 헤맸는데, Hands on Lab을 보니, 모든게 소문자...
혹시나 해서 소문자로 모두 변경해서 써보니, 직빵으로 해결되었다는...

이 주소값은 기본값이 소문자로 되어 있으며 소문자 외의 문자가 오면,
역시나 알기 힘든 Exception을 뱉는거 같다.

이야... 이거 난이도가 높다.




728x90
이전 포스트에서 특정 데이터의 Query를 할 때 LINQ에서 제공하는 select 문자을 이용하여 아래와 같이 처리한 적이 있다.
var result = from g in this.context.AnalysisSumDataEntry
                       where g.PartitionKey == "AnalysisSumData"
                         select g;

그런데 일반적인 LINQ 방법으로 저 내용을 Sort를 하려면 아래와 같이 되는 줄 알았다.

var result = from g in this.context.AnalysisSumDataEntry
                       where g.PartitionKey == "AnalysisSumData"
                       orderby g.Count                       
                       select g;

굵게 해서 표시한 저 orderby를 사용하고, 실제 Sort 할 필드에 대해서 정의한 내용을 넣으려 했다.
( 참고로 AnalysisSumDataEntry 에는 Count와 Index 라는 int 형 프로퍼티를 가지고 있다. )

그런데, 위와 같이 처리하려고만 하면, 결과 값에 Exception 이 담겨 있어, toList 부터 ElementAt 까지 뭐든 메소드든 다 Exception을 뿜어버리고 만다. 즉 결과에 오류가 있다는 것이다.
혹시나 하는 마음에 orderby를 지우자 정상적으로 동작한다.
분명 숫자를 의미하는 int 형일텐데.... 라는 생각에 이런 저런 고민을 무럭 무럭 자랐다.

그래서 결국 편법을 택했고 그 방법은 아래와 같다.       
private IEnumerable<AnalysisSumDataEntry> SelectBase()
        {
            var result = from g in this.context.AnalysisSumDataEntry
                         where g.PartitionKey == "AnalysisSumData"
                         select g;
           
            return result;
        }

        public List<AnalysisSumDataEntry> Select()
        {
            IEnumerable<AnalysisSumDataEntry> result = SelectBase();
            List<AnalysisSumDataEntry> list = result.ToList<AnalysisSumDataEntry>();

            list.Sort(delegate(AnalysisSumDataEntry src, AnalysisSumDataEntry tgt)
            {
                return src.Count - tgt.Count;

            });

            return list;
        }

즉 Generic 에서 제공하는 List 템플릿에 때려 박고, 그 내용을 가지고 List의 Sort를 사용하여 Sort 해버렸다.
지금 방식대로 하면 Desending 즉 내림 차순이 되고 Asending 즉 오름 차순으로 하려면, 굵게 해 놓은 return 값의 식을 역순으로 바꾸면 된다. ( return tgt.Count - src.Count )

이게 답인지는 모르겠지만.. 현재로는 저렇게 밖에는....
아무래도 데이터 선언 방법 부터 차근 차근 LINQ를 따라가봐야 겠다.

728x90

+ Recent posts

728x90