달력

12

« 2024/12 »

  • 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
2009. 4. 14. 22:23

Google App Engine 좋아하는 것/Google2009. 4. 14. 22:23

지난 한 주동안 인터넷상에서 가장 관심 있는 뉴스를 뽑으라면, 나는 Google의 Google App Engine라고 서스럼 없이 이야기 할 것이다.

요즘 여러 곳에서 화두가 되고 있는, Clouding Computing으로 이야기 되는 서버 팜이 이기도 한, Google의 이 거대한 개발자들을 위한 장난감은 그 규모로 볼때는 Apple의 App Store와 유사한 밥법으로 개발자들을 유혹하고 있다. 개발자들로 하여금 자신들의 서버와 리소스를 이용하여 서비스를 올리도록 Echo 시스템을 제공하고, 잘되면 돈을 받겠다는 정책이다. 이전에는 Account를 받기위해서는 허가가 떨어질때까지 기다려야 했는데, 지금은 신청하는 즉시 무료 서비스를 이용할 수 있다.

Google App Engine는 개발자들이 구글의 서버를 500MB까지 무료로 사용할 수 있도록 하고, 하루에 수백만 페이지 뷰를 서비스 할 수 있다. 더군다나, 지난 주에는 Python에 이어서 Java를 지원할 수 있는 Language로 제공한다고 블러그를 통해서 발표했다. (블러그의 내용은 여기를 참조 바람) 
구글의 Java의 원할한 지원을 위해서 벌써 Eclipse의 Plug-in역시 무료로 제공하고 있다.

아래는 최근에 제공하기로 한 Java 언어와 Eclipse상에서 SDK를 이용하여 개발하고 있는 동영상으로 Google에서 제공하고 있는 동영상이다.
 

이것이 이슈가 되고 있는 또 하나의 이유는 JVM위에 포팅되고 있는 여러가지 Dynamic Language들로 개발한 프로그램이 구동이 가능하다는 것이다.
그동안 200여종이 넘는 우리가 모르는 Language들이 이 JVM위에 포팅되어 왔다. 그 중에 Ruby쪽에 유명한 프로젝트는 JRuby와 Groovy가 있다. 이들 역시 크게 반기는 분위기이다.
Sprin Framwork를 개발하고 있는 SpringSouce 역시 재 빠르게 블러그를 통해서, Google App Engine팀과 공조하고 있을을 발표했다.

지난 주말에 인터넷을 뒤져가면서, 내가 알아낸 사실들이 여러가지가 있지만, Google App Engine의 ClassLoder와 DB에 대한 접속 방법이 이전에 사용하던 Lagacy 시스템과 많은 차이를 가지고 있다는 점이다.
(때가 되면 이 부분에 대해서 다시 이야기 하려고 한다.)
오늘은 Eclipse에서 JRuby를 실행해 보았는데, sqlite쪽에서 문제가 있었다. jdbc지원에 대한 부분에 대한 라이브러리가 없어서 였는데, 이 역시 나중에 정리해 이야기 하려한다.

Wikidipia에는 아래과 같은 정보들이 있다. (이는 Java 지원을 발표하기 이전에 작성된 것이라, 관심있는 것과 다를 수도 있지만, 기초 지식을 얻는데 많은 도움이 될거라 생각된다.)

 
  • 1 Supported programming languages and frameworks
  • 2 Differences from other application hosting
  • 3 Differences between SQL and GQL
  • 4 Restrictions
  • 5 Downloading data from App Engine
  • 6 Quota rates
  • 7 Competition
  • 8 References
  • 9 External links

  • 개발자들을 위한 환경이 또 한번 만들어지고 있다.
    이전에 MS의 경우는 SDK를 제공하여 개발자들을 자신들의 품에 끌어 들였다며, 이제는 Echo System이라 불리우는 Platform을 개발자들에게 제공하고 있고, 1인 개발도 가능하도록 환경들을 만들어 주고 있다. 다시 말하면, 시스템과 리소스 관리에 개발자들은 더 이상 신경 쓰지 않아도 된다는 말이다. (100% 믿기 어려울거라 생각된다.)

    하지만 아직 정확한 방향없이 마케팅적이고 소모적인 구호가 될 가능성은 여전히 높다. 정확한 비전과 방향을 제시하지 못한다면, 정말 거대한 장난감이 될지도 모르지만, MS의 그거와는 방향과 구글이 지향하는 바가 확연히 다르다는 점을 확실히 밝혔다는 점에서 JAVA의 지원은 큰 의미가 있다고 생각이 된다. 

    정말 많은 것을을 배워야 하고, 배울 것들이 너무나 많다.
    즐거운 고민에 대한 비명들이 여기 저기서 들린다.

     
     
    :
    Posted by 행복상자
    MVC 패턴을 이용하여, 기본적인 페이지를 만드는 것은 별로 어렵지 않다. 그리고 scaffold를 이용하여 기본적인 뼈대를 만들어서 원하는 기능을 살을 붙이듯이 개발해 나갈 수 있다.
    Active Record는 데이터 레이어와 비스니스 레이어를 위해서 데이터를 관리하고 쉽게 사용할 수 있도록 도와준다.


    6. Active Record
        : Active Record는 레일즈 애플리케이션과 데이터베이스 간의 연동을 담당한다.
        : 액티브 레코드에서는 레코드 객체를 통해서 데이터베이스 테이블을 조작한다.
        : 각각의 레코드는 데이터베이스 테이블에서 각각의 행과 대응하고, 각각의 액티브 레코드 객체는 데이터베이스 조작에 필요한
          CRUD(생성, 읽기, 수정, 삭제)메소드들을 가지고 있다.
     
        6.1 Active Record의 3가지 특징
            : 설정 대신 컨벤션 이용: 규약에 따라서 필요한 규칙들을 암묵적으로 정의하여 사용한다.
            : 멘타 프로그래밍: 데이터베이스 테이블에 정의된 컬럼들을 찾아서 대응되는 객체의 속성으로 추가하는 작업을 자동을 해준다.
            : 맵핑 언어: 맵핑 언어를 사용하여 테이블 간의 관계를 지정한다.
     
    7. Database 설정
        : Active Record를 이용아혀 여러가지 Data base를 사용할 수 있지만, 나는 sqlite의 사용을 위한 database을 설정하려한다.
        : "config"디렉토리 아래의 database.yml 파일을 다음과 같이 설정한다.
        
        -Code in database.yml-

            development:
              adapter: sqlite
              database: db/photos_development

            test:
              adapter: sqlite
              database: db/photos_test
            production:
              adapter: sqlite
              database: db/photos_production

         7.1 Shema Migration

            : 아래와 같이 Model을 생성한다.

            => ruby script/generate model Photo

            : 위 코드를 통해서 app/modes/photo.rb 파일안에 모델 객첵가 생성된다.

            : Shema Migration을 통하면 데이터베이스와 독립적인 스키마를 구성할 수 있다.

         

        7.2 Shema Migration 설정

            : "config/enviroment.rb"파일을 열어 "config.active_record.schema_format = :ruby"로 설정해주면되나,

            : RubyOnRails 1.1 이후 버전은 이 값이 기본 설정 값이므로, 변경할 필요는 없다.

     

        7.3 up/down 메소드 설정

            :"db/migrate"디렉토리의 001_create_photos.rb 파일을 열고 다음과 같이 수정한다.

            

            -Code in 001_create_photos.rb-

            class CreatePhotos < ActiveRecord::Migration
              def self.up
                create_table :photos do |photo|
                  photo.column "filename", :string
                end
              end

              def self.down
                drop_table :photos
              end
            end
     

     8. 기본 액티브 레코드 클래스

        : 마이그레이셔이나 SQL명령, 어느 것을 사용하더라도 작명 규약을 반드시 지켜야 한다.

        : 테이블 이름이나 id 컬럼의 정의등 모두 작명규약에 따라서 이름이 만들어진다.

     

        8.1 Rails의 작명 규약

            :클래스와 테이블 이름

                . 레일즈는 액티브 레코드 클래스 이름의 영문 복수형을 데이터베이스 테이블 이름으로 간주하여 테이블을 찾는다.

            :식별자

                . 액티브 레코드는 "id"란 이름의 컬럼을 찾아 유일한 식별자로 사용한다. "id"컬럼은 정수형이어야 하며, 데이터베이스는

                  이 컬럼을 키로 사용해야 한다.

            :외래키

                . 외래키는 <clise>_id 의 형태로 이름이 지어져야 한다.

            : 대문자 표기

                . 클래스를 정의할 때 클래스 이름은 각 단어의 첫번째 글자는 대문자로 하고 단어 사이의 공백을 없앤다.

                . 메소드, 데이터베이스테이블 이름, 컬럼 이름. 속성 이름, 심벌 이름등은 단어 사이의 공백을 '_'문자로 대체한다.     

     9. Rails Console
        : 레일즈 콘솔은 데이터베이스와 모델 간의 유기적인 작업을 할 수 있도록 해준다.
        : 이는 다음과 같은 작업을 하도록 도와준다.
            . 데이터 베이스와 연결한다.
            . app/model에 있는 액티브 레코드 클래스들을 불러온다.
            . 데이터베이스와 모델 간에 데이터베이스 작업을 포함하여 유기적인 작업을 할 수 있게 해준다.
        : 다음과 같이 실행한다.
        => ruby script/console

    디버깅과 개발에 활용할 수 있는 콘솔화면이 실행됨을 볼수 있을 것이다.
    참고로, 나의 개발 환경이 윈도우 이므로 "ruby + command"의 형태롤 도스모드에서 명령을 실행하고 있다.
    :
    Posted by 행복상자
    최근에 Ruby on Rails를 2.2로 업그레이드 하고,  몇가지 테스트 하면서 다시 공부하를 시작하고 있다.
    나름대로 전문가라고 자부하는 경력 5년의 김정현 책임이 요즘 너무나 바빠서 몇가지 물어보려해도 연락 자체가 어려운 실정이다.

    작년에 공부하면서 정리했는 문서가 있는데, 이는 한빛 출판사에서 번역한 책으로 "Ruby on Rails: Up and Running"라는 제목을 책을 공부하면서 정리한 것이다. 이책에 대한 정보는 "[도서 추천] Ruby on Rails(초고속 웹 개발의 시작)" 라는 제목으로 이전에 쓴 글이 있는데, 이를 참조하면 책을 이해하는데 도움이 될 것이다.
    하지만 최근에 나온 2.2버전과 2.3 버전은 책의 예제를 따라가다보면, 뭔가 이상하다고 느낄 것이다.
    다시 말해서, 정상적으로 동작하지 않는다. 왜냐하면 책은 1.2 버전을 기준으로 작성되었기 때문이며, 예제를 테스트하려면, Ruby on Rails 1.2 버전을 설치해야 한다.

    내가 이전에 정리하고, 다시 정리한 자료는 이전 버전(1.2)을 기준으로 작성되었다. 정리가 마무리되면 2.2버전으로 차이점과 사용법을 다시 정리할 예정이다.

    아래 정리한 내용을 간략하게 소개하면, 기본 환경은 만들고, 서버를 실행하고 간단하게 MVC 프레임워크에 따라 테스트 페이지를 만드는 방법을 순서대로 정리하였다. 


    1. Ruby On Rails 환경 만들기
        : Rails의 환경은 만들기 위해서는, 아래와 같이 실행을 시키면 "myApps"라는 디렉토리 아래 관련된 폴더와 파일들이 생성된다. 
        => Rails myApps
     
    2. Server Test
        : Rails에서 기본으로 제공하는 WEBrick 서버를 실행시키기 위해서는 아래와 같은 명을 실행하면 된다.
        => ruby script/server
        
        :위와 같이 이를 실행하면, 기본 포트로 3000번을 사용하게된다.
        : 테스트는 다음과 같이 웹브라우져에서 실행한다. http://localhost:3000

     

    3. Server의 Port및 환경 수정
        : port 및 기본 설정 사항을 수정하기 위해서는 script/server 스크립트를 수정하면 된다. (text edit에서 수정가능)
     
     
        3.1 script/generate options
            : 아래과 같이 console창에 입력하고 실행하면, Parameter를 입력에 대한 사용법이 표시된다.
            => ruby script/generate
                Usage: script/generate [options] generator [args]
     
                Rails Info:
                    -v, --version                   Show the Rails version number and quit.
                    -h, --help                       Show this help message and quit.

                General Options:
                    -p, --pretend                  Run but do not make any changes.
                    -f, --force                      Overwrite files that already exist.
                    -s, --skip                       Skip files that already exist.
                    -q, --quiet                     Suppress normal output.
                    -t, --backtrace               Debugging: show backtrace on errors.
                    -c, --svn                       Modify files with subversion. (Note: svn must be in path)


     
    4. Controller 생성하기
        : Rails즈의 구조와 Server가 정상적으로 동작하면, 다음과 같이 Controller를 생성할 수 있다.
        => ruby script/generate controller Greeting
        : 생성시, 이전에 만들어진 folder 또는 파일은 skip하고, "Greeting"을 위한 새로운 파일들이 생성됨을 볼수 있다.
     
        4.1 생성된 Controller 테스트
        : 생성된 greeting controller의 동작을 확인하시 위해서 웹브라우저의 주소창에 다음과 같이 실행한다.
        => http://localhost:3000/greeting  (greeting 만 붙여주면 된다.)
        : 그러나 이는 정상적으로 동작하지 않는다. 왜냐하면 빈 껍데기만 생성되어져 있기 때문이다.
        : app/controllers 폴더의 "greeting_controller.rb"를 열고 아래과 같이 코드를 추가,수정한다.
     
            class GreetingController < ApplicationController
              def index
                render :text=> "<h1>Welcome to your first Rails application</h1>"
              end
            end
        
    5. View 생성하기
        : view에서 Controller에서 전달해준 데이터를 표시하기 위해서는 view를 생성하면 된다.
        : 아래는 controller과 view를 동시에 생성하는 것인데, 기존에 생성한 controller을 유지하려면 "n"을 누르면 된다.
        => ruby script/generate controller Greeting index
        : app/views/greeting/ 디렉토리 아래 index.rhtml 파일 생성된 것을 console창에서 볼 수 있다.
        : 이전에 생성한 greeting_controller.ry파일에서 index 메소드는 그대로 두고 code만 삭제한다.
        : 브라우져에서 새로 고치기를 하면 새로 만든 뷰가 보여지는 것을 확인할 수 있다.
     
        5.2 Controller와 view 연동하기
        : controller에 @welcome_message 인스턴트 변수를 추가한다.
        -Code in greeting_controller.rb-
            class GreetingController < ApplicationController
              def index
                  @welcome_message ="Welcome to your first Rails application"
              end
            end

         -Code in index.rhtml-
            <h1><%= @welcome_message %></h1>
            <p>Find me in app/views/greeting/index.rhtml</p>
     
        : 브라우져를 새로고침해서 원하는 결과가 나왔는지 확인해 보자.

    당연히 원하는 결과가 나올 것이다.
    :
    Posted by 행복상자
    오래 간만에 Ruby On Rails에 관한 이야기를 한다.
    내가 좋아하는 Framwork이고, 앞으로의 발정 가능성에 대해서도 항상 눈여겨 보는 Framework이다.
    한 동안 회사일로 바빠서, 그 동안 약간의 기술적인 관심만을 남겨두고 있다고, 이제 조금 여유가 생겨서 다시 들여다 보게 되었다.

    내 노트북에 설치되어 있는 Rails의 버전은 1.2.6 였는데, 이를 먼저 Upgrade 하기로 하였다.

    Rails의 새버전의 설치는 "gem instll rails"라고 도스창에서 실행하면 자동으로 인터넷에서 다운받아 설치하게 된다. 
    아래는 이를 실행한 결과이다. 여기서는 rails를 설치할 때 dependency에 대해서는 사용자의 확인을 받도록 별도의 옵션을 명령행에 추가하지 않했다.


    만약, 사용자의 확인 없이 rails 설치를 위해서 필요한 패키지들을 모두 설치하려면 아래와 같이 명령창에 넣어서 실행하면 된다. (y옵션을 주면 --dependencies 옵션을 준것과 동일하게 동장한다.)
    gem instll rails -y
    설치가 마쳐졌으면 아래와 같이 Rails의 버전을 확인할 수 있다.



    이제 Rails의 업데이트를 끝 마쳤다. 이번에는 Ruby의 패키지와 컴포넌트를 Update해주는 gem을 업데이트 하겠다. 이는 자신을 업그레이드 해야 하므로 install명령으로는 동작하지 않는다.

    아래와 같이 도스창에 명령를 실행시키면 된다.
     gem update --system


    이역시 무척 간단하게 실행될 것이다.

    마지막으로 embedded DBMS인 sqlite를 지원하기 위해서, 이에 관련된 모듈을 업데이트 하려고 한다.
    아래과 같이 실행하면 된다.
    gem install sqlite-ruby

     
    gem이 이전 버전과 다른 점은 다른 OS의 버전이 있을 때 사용자가 수동으로 이를 확인하고 설치하였었는데, 이 부분이 자동화 된점이 이전 버전과 비교해서 편리해 졌다.

     
    :
    Posted by 행복상자