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 행복상자
인생에 대해서 다신 한번 생각하게 하는 영화를 보았다.
많은 사람들이, 특히 젊을 때는 시간이라는 것이 무한하다고 생각하고, 살고 있는지도 모른다. 그러다가 결혼하고 아이를 갖고, 이 아이가 성장함에 따라서, 인생의 끝을 향해 달려 간다는 것을 깨닫게 된다.

이 영화는 2시간 40분정도로 짦지 않은 시간이지만, 한 아이의, 한 남자의 일생과 사랑을 이야기 하는데는 결코 길지 않은 시간이다. 

이야기는 한 병석에서 마지막 임종을 기다리는 모녀로 부터 시작된다. 그리고 어머니의 부탁으로 읽혀지는 어떤 사람의 일기장과 시간을 모티브로, 벤자민 버튼의 이야기는 그의 비극적인 탄생으로 부터 시작된다.

벤자민의 어머니는 그를 출산하자 곧 죽게되고, 그의 아버지는 그의 흉한 몰꼴을 보고 죽이려고 했으나, 그를 양로원 앞에 버려둔다. 의사는 그가 얼마 못 살거라 했지만, 그는 흑인 부부의 아들로 성장하게 되고 점점 더 젊어지는 기이한 인생을 살게 된다. 

그의 육체의 나이는 정신의 나이와 정 반대의 모습이기 때문에, 80이 노인의 모습일 때는, 다른 노인들과 별 다른 차이를 발견하지 못했지만, 정신적으로는 왕성한 호기심은 여는 아이와 다를 바가 없었다. 여느 아이들은 그 또래의 아이들과 친구였지만, 벤자민의 친구들은 양로원에 의탁되어지는 노인들이었다. 그리고 그들은 벤자민과는 반대로 쇠약해지고, 죽음을 기다리는 사람들이었다. 벤자민은 이들을 통해서 과연 무엇을 배우고 생각하고 있었을까?

벤자민은 육체와 정신이 완전히 반대로 성장하였기 때문에, 노인들이 인생의 끝자락에서 인생을 관망하는 태도를 너무나도 어린 나이에 깨닫게 되었다. 그는 어는 정도의나이가 되었을 때는, 인생을 받아 들이고 수긍하고 인정하는 것들을 남들보다 쉽게 받아 들였다. 그리고, 꿈을 이루는 데도, 나이가 제약이 된다고 생각하지도 않했다. 하지만 아직도 그가 정발로 바라고, 이루어 지기를 소망했던 것이 무엇인지 모르겠다.

벤자민은 다른 사람들이 살고 있는 시간과는 정 반대로 시간을 거슬러서 살기 때문에, 그를 아는 사람들의 죽음을 지켜보아야 했다. 그의 소망은 사랑하는 사람들과 같이 늙으가고, 자신의 죽음을 지켜보아주기를 원하지 않았을까?

정상적인 시간의 흐름에 속하거나, 시간을 거슬러 살거나, 모두에게는 각자의 삶이 있고, 그 삶에는 기쁨과 슬픔 그리고 사랑과 즐거운이 있다. 어떤 사람들은 이를 받아 들이기도 하지만, 어떤 사람들은 이름 받아들이지 못하기도 한다. 운명이라는 갇힌 틀안에서 전혀 선택이라는 것을 할 방법이 없는 상황에서도 때로는 이를 받아들이고 새로운 시작의 기회를 삼아할 할 필요가 있다.

영화에서는 여러 등장인물들을 통해서, 인생을 접하는 여러가지의 모습들을 보여주고 있다. 같은 시대를 살던 사람들에게도 동일한 삶은 없을 뿐더러, 삶을 접하고, 이해하는데는 너무나도 다른 태도와 가치관들이 보인다.

한 남자의 애절한 사랑만이 아니라, 삶을 같이 공유하지 못하는 것이 너무나도 슬플쁜이다.
얼마전에, 한국의 성자이신, 김수환 추기경님이 돌아가셨는데, 많은 분들이 지금도 그분의 죽음을 슬퍼하고 애도하고 있다. 단지 갑작스러운게 돌아가셔서, 안타깝다고만 생각하지 말고, 생전에 바라셨던 것들이 남은 이들의 삶을 통해서 이루었으면 좋겠다. 그 분도 그걸 원하시지 않을까?  


그래서,
가장 행복한 한때는 사랑하는 사람들과 삶을 공유하고, 이야기 할 수 있는 시간인것 같다.

Posted by 행복상자
오전에 있었던 강좌에 이어서, 오후에 있었던 3개의 강좌들이다.
사실 모든 강좌들을 다 보게되면, 약 7시간 정도가 필요하다. 전부를 한번에 들어 볼수는없지만, 주제별로 나누어 보면 큰 도움이 될거라 생각이 든다.
강의에 사용되었던 자료들에 대한 링크도 추가한다.

Individual slide sets in PDF format:
  • 1: Hello World
  • 2: Just Enough Ruby
  • 3: Basic Rails
  • 4: Advanced Active Record
  • 5: AJAX and Testing
  • 6: Configuration And Deploy
  • 7: Extra Material

    Ruby on Rails Short Couse:

    Ruby on Rails - Part 4: Advanced Active Record


    Ruby on Rails - Part 5: AJAX and Testing


    Ruby on Rails - Part 6: Configurtion and Deploy

Posted by 행복상자

우연히 YouTube 사이트를 검색하다가 Ruby on Rails에 대한 동영상 강좌가 올라와 있는 것을 발견하였다. 하루동안 버클리 대학에서, 세미나가 진행 되었던 것들인데, 주제별로 잘 나누어져 있어서, 처음 접하는 사람들이 Ruby on Rails를 이해하고 공부하는데 큰 도움이 될거라 생각된다.
세미나는 "Ruby on Rails Short course"라는 제목으로 열렸는데, 동영상은 영어로 진행되어서 이해하기가 어려울 수 있다. 더군다나, 말하느 속도도 상당히 빨라서, 집중해서 들어야 한다. 하지만, 레일즈의 데모를 보면 쉽게 이해 할 수 있을 것이다. 레일즈가 유명해진 것도 15분 내외의 데모 동영상을 통해서 알려 졌으니 말이다.

아래에 첨부한 동영상들은 오전에 있었던 강의 동영상 들이다.
그리고 강의에 사용되었던 자료들의 링크이다.

Individual slide sets in PDF format:


Ruby on Rails Short Couse:

Ruby on Rails - Part 1: Hello World
 

Ruby on Rails - Part 2: Just Enough Ruby

Ruby on Rails - Part 3: Basic Rails

 

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 행복상자
원래는 책에서 Closure에 대한 설명에 대한 설명이 있는데, 나의 관심을 끈 것은 Anonymous함수의 사용에 대한 것이었다.

아래의 예제는 동일한 동작을 하는 메소드를 Event에 추가하는 예제인데, 중간 정도에 보면 난데 없이 "(function(){" 으로 시작하는 구문이 나온다. 이 부분이 Anonymoun function 이다.
이렇게 만들면 "Global"로 선언할 필요없이 임시적으로 함수 블럭의 사용이 가능하다.
구문을 닫을 경우는 "})();"를 이용하면 된다.

 // An element with an ID of main
var obj = document.getElementById("main");

// An array of items to bind to
var items = [ "click", "keypress" ];

// Iterate through each of the items
for ( var i = 0; i < items.length; i++ ) {
    // Use a self-executed anonymous function to induce scope
    (function(){
        // Remember the value within this scope
        var item = items[i];
        // Bind a function to the elment
        obj[ "on" + item ] = function() {
            // item refers to a parent variable that has been successfully
            // scoped within the context of this for loop
            alert( "Thanks for your " + item );
        };
    })();
}

사실 위의 코드는 불필요한 내용들이 많이 들어있다. 굳지 저렇게 써야하나 라는 생각이 들지도 모르지만, 이것은 단지 예제 정도록 사용하면 된다.
그래도 몇가지 건질 것이 있다면, 위의 코드에서 "id"를 이용하여 오브젝트를 가져오고, Event를 Bind하는 내용을 담고 있는데, Event명을 obj["on" + item]의 형태로 Event를 binding한다.
위의 코드는 "click" 과 "keypress"에 대한 이벤트가 발생하면 메시지를 발생시키는 예제이다.

Posted by 행복상자
내가 현재 진행하고 있는 프로젝트는 Spring Dynamic Modules 1.1.2를 기반으로 개발하고 있다. 그리고 이를 기반으로 다른 솔루션 또는 Web Application들이 개발되고 있다.

지금은 지난 말까지 개발된 Framework의 일부 Architecture와 모듈을 Refactory중에 있다. 이의 필요성은 아마도 Spring DM Server가 나온다면, 사라질지도 모른다. 개발하고 있는 Core가 Spring DM Server와 거의 유사한 Architecture를 하고 있기 때문이다. 아마도 Spring DM Kernel만 있다고 누군가가 같다고 할지도 모르지만, Spring의 많은 기능을 얻어다 사용하기 때문에 이를 갈 수는 없고 많은 혜텍을 입었다고 할 수 있다.

지난 주에 Spring Dynamic Module 1.1.3이 발표되었다.
몇가지 변경된 사항을 살펴보았는데, 크게 바뀐 부분들은 눈에 들어오지 않는다.

아래는 Spring Dynamic Module의 Change Log이다.


Changes in version 1.1.3 (2009-02-13)
-------------------------------------

General
* various documentation improvements and fixes

Package org.springframework.osgi.context
* improved proxying of classes that are boot delegated outside the OSGi environment

Package org.springframework.osgi.io
* fixed manifest headers parsing problem when dealing with nested whitespaces
* fixed handling of optional required bundles
* improved OsgiBundlePatternMatchingResolver to return ContextResources
* changed OsgiBundlePatternMatchingResolver#findResources(String) visibility to protected

Package org.springframework.osgi.service
* fixed visibility issue when invoking non-public proxied methods
* improved waiting code to deal with spurious or accidental wakeups
* fixed issue with OsgiServiceProxyFactoryBean that caused autowiring to fail in some cases

Posted by 행복상자
지난 번에 VirtualBox를 설치하고, Window 7을 설치해서 사용하는 것에 대해, 알아보기로 했는데 이제서야 글을 올린다. 설치는 무척 간단하였다. 왜냐하면 기본적으로 설정을 변경하지 않고, VirtualBox의 기본 옵션들을 그대로 이용하였기 때문이다. Winodos 7을 설치하고 이를 테스트 하였는데, 일단 듀얼 CPU가 장착되어 있는 PC에서 사용하는 것이 유용하다. 물로 메모리는 2G 이상의 시스템에서 사용하는 것이 좋다. 윈도우즈 7을 설치하게 되면, 비디오의 메모리는 변경해 주는 것이 좋다. 너무 적게 잡으면 시스템이 느리고, 부자연 스럽다. 대락 200메가 내외이면 적당하다.

자 그럼 설치방법에 대해서 알아보도록 하겠다.
VirtualBox를 이용하여 설치시의 옵션들은 나중에 재 수정 가능하므로, 초기에는 기본으로 설정하는 것이 쉽고 빠를 거라 생각된다. (별다른 고민을 하지 않으므로 빠르다. ^^)

먼저 VirtualBox의 아이콘을 클릭하여 프로그램을 실행한후, 왼쪽 상단의 "새로 만들기" 버튼을 메뉴에서 클릭하면 아래와 같은 화면이 나타난다. 처음에 프로그램을 설치할 때는 영문으로 메뉴와 텍스트가 표시되었는데, 그래서 한글을 별로 기대하지 안했는데, 친절하게 한글로 메뉴와 기능들을 사용자에게 제공한다. (이쯤되면, 감동이 시작된다. 별로 기대하지 않했는데, 뭔가를 주게되면, 찡하게 느끼게 되니까.)


간단하게 다음 버튼을 클릭한다.
그러면 아래과 같이 "새 가상 머신 만들기" 창이 나타나고, 사용자는 여기서 자신이 설치할 OS를 고르면 된다. Windows, Linux, Unix등 설치하기를 원하는 것을 고프면 된다. 나는 Windows 7 Beta를 설치할 예정이므로 아래와 같이 "Microsort Wondows"를 선택하고 버전은 "Windows 7"을 선택했다.


"다음 > "을 클릭하면 은 가상 머신의 메모를를 할당해 주어야 한다. 아래와 같은 창이 나오면, 적절하게 잡아 주면 된다. 나의 경우는 총 사용가능한 메모리가 2GByte 이므로 1GByte를 할당하였다. 이는 나중에 조정이 가능하므로 적당히 넣어 주면 된다. (본인이 한번 정하면 절대 바꾸지 않는 완벽 주의자가 아니라면 말이다.)
 

자, 여기서 부터는 속도를 내자, 기본크기를 20GByte를 사용할 수 있도록 했다. 파일 명과 저장 위치는 "새로 만들기(N)..." 버튼을 클릭해서 정할 수 있다.


만약 위에서 "새로 만들기를 클릭하였다면" 아래와 같은 화면을 만날 수 있을 것이다.

위 화면에서 "다음 >" 버튼을 누르면 아래화면이 나타나는데, 옵션중에 "동적 확장 저장소"를 선택한다. (설명을 화면의 내용에 표시 되어 있다.) 




사용할 가상 하드디스크의 크기를 설정한다. 아까 이야기 한것처럼 최소 권장 크기가 20GB바이트이므로 그냥 20GByte를 선택한다.

위의 단계를 마지막으로, 윈도우즈 7을 설치를 위한 준비 단계는 모두 마쳤다.
아래 화명에서 "마침"버튼을 누르면 된다.


이제 생성한 이미지를 이용해서, Window 7을 설치하면 된다.
VirtualBox 프로그램을 실행하고, 상단의"시작" 버튼을 이용하여, 설치 CD 또는 DVD를 이용해서, 설치하면 된다.

아래는 윈도우 7의 설치 화면이다.

설치는 무척 XP보다도 간단하였다. 내가 가진 시스템은 듀얼코어가 아닌 원 코어의 Intel의 2.3Gbyte 포로세슬르 사용하는 시스템이다. 약 25~30분정도 걸렸다.

아래는 VirtualBox에서 Windows 7을 처음 실행시켰을 때, Windows 7이 실행을 준비하고 있는 화면이다. 약간의 시간이 걸렸다. 

마지막으로, 이 화면이 윈도우 7이 실행된 화면이다. 화면의 하단 오른쪽에 조그만하게 Windows 7 이라고 표시된 것이 보인다.

혼자 있는 물고기가 외로와 보인다.

윈도우즈 7을 설치하면, 네트워크는 기존 시스템의 IP를 Proxy해서 사용하게되는데, 네트워크 설정을 보면, IP6를 기본으로 지원하게 되어 있는 부분이 특이점이다.
이에 대한 사용기는 별도로 따로 올리거나 이야기하지는 않겠지만, 시스템을 가볍고, 사용자를 끌만한 매력을 가지고 있다. Vista의 실패만큼 앞으로 성공할 가능성이 많은 MS의 새로운 OS이고, 써볼만한 가치가 있다고 생각이 든다.

올해에는 정식 버전이 출시될거라는 예측이 여려 경로를 통해서 들려온다. 이는 Windows 7이 Beta버전이지만, 안정성에 큰 문제가 없다는 반증이기도 하지만, 지난 해의 Vista의 실패로 인한 MS의 매출이 많이 줄어든 탓이기도 하다.

 
Posted by 행복상자
내가 다니는 회사는 제법 규모도 크고, 제조업으로는 알아주는 회사이다. 하지만 내가 느끼는 고민과 동일한 고민을 회사내의 다른 누구가가 할 거라 생각치 않지만, 비슷한 고민들은 하고 있을거라 생각한다.

세상에는 많은 기회들이 있다. 하지만 기회라는 것은 준비된 자들의 몫이었지, 운과 요행으로 얻더라도 이는 얼마 못가서 그 모든것을 준비된 자들에게 빼앗겨 버린다. 이는 순간이고 곧 찰라이다.
하지만, 항상 준비할 수 있는 기회는 있다. 나는 이것을 패러다임의 변화라고 생각을 한다.
새로운 무엇을 기다리며 준비하는 것은 이전에 했던 것들을 그대로 답습해서는 절대로 얻기가 힘들다. 왜냐하면, 남들도 벌써 나와 똑같이 애를 쓰고 노력하고 있기 때문이다.

최근에 우리 사회에 "황제의 귀환"이라고 하며서 각 방송국의 오락프로에 경쟁적으로 섭외하고 있는 개그맨이 있다. 우리에게는 잊혀졌다 돌아온 것처럼 보이지만, 그는 나름 대로 숨어서 내고을 쌓고 있었을 거다. 그가 한 이야기가 생각이 난다.

"이경규씨는 앞으로 콩트가 쇠퇴하고 예능이 주류가 될 거라고 했고 그와 달리 저는 앞으로도 콩트 코미디가 영원히 존재할 거라고 주장했어요. 결과적으로 저는 판단을 잘못한 거고 변화를 따르지 못한 거죠 "


너무나 당연하다고 생각할지 모르지만, 그는 변화라는 실체에 대해서 알았지만, 그 것을 자신의 기회로 삼지 못했기 때문에, 변화이 기회를 놓쳤기 때문에, 그동안의 공백이 있었다고 이야기 하고 있다.

내가 요즘 두려워하는 것은, 이와 같은 맥락에서 이다.
짧게 질문을 하나 던저 보겠다.
요즘 경기가 어렵지만, 나름 선전하고 있는 기업들이 몇개 있다. Googel, Apple 그리고 닌텐도등 몇게의 회사들이 있는데, 이들 회사들이 과거와 같이 미래에도 승승장구하고 나아간다면, 지속적인 성장을 계속한다면, 이는 한국의 삼성과 LG와 같은 기업에 어떠한 영향를 끼칠 것인가? 긍적적으로 도움이 될것인가 아니면, 그렇지 못할 것인가?

이들 회사들은 소프트웨어 회사이다. 하지만 지금은 하드웨어 영역까지 그 영향력을 넓혀가고 있는 중이다. 혹시 Apple는 하드웨어 회사가 아니냐고 할지 모르지만, 그들의 최소한의 인력만을 가지고, 아웃소싱해서 제품을 생산해 내고 있다. 마치 이는 Nike가 제품을 생산하는 구조와 유사하다. 마케팅과 설계 및 제품에 대한 서비스만을 고객들에게 팔고 있는 것이다.
그리고, 이들은 소프트웨어의 강점을 살려서 하드웨어를 만들고 시장에 크게 어필하고 있다.

반면, 한국의 삼성과 LG는 그렇지 못하다. 근본적으로 제조 회사이고 제조업체이다. 이들은 자신들이 만든 제품을 팔기 위해서 소프트웨어를 만들고 있을 뿐이다. 소프트웨어는 한낱 악세서리에 불과하다. 애플과 구글과 마이크로 소프트사가 자신들의 영역을 확장하고 있는데 반하여, 현재의 위치를 지키기 위해서 노럭할 뿐이다.

자 좀더 나가서 생각하면, 소프트웨어 회사들이 하드웨어까지 영역을 확장하는 이유는 과연 무엇일까? 궁긍적으로는 이익을 늘리기 위해서이다. 하지만 단지 물건을 판다는 것이 아니라 서비스를 생산하고 이를 통하여 수익을 창출하려는 것이다. 이는 역시 하드웨어 업체도 동일하고, 서비스를 통해서 이익을 얻기를 바라고 있다.

다만 차이점은 소프트웨어 업체는 그들의 유연한 생각과 패러다임을 유감없이 새로운 서비스를 창출하는데 집중하고 있고, 하드웨어 업체는 기존의 생각의 틀의 변화 없이 지키는데 신경을 쓰고 있는 것이다.

이미 많은 디바이스 또는 가전 제품과 기기들은 Network이 가능하고, 이를 통해서 새로운 서비스틀이 고객들을 즐겁게 해주고 있다. 하지만 기존 틀속에 갖힌 생각으로 절대로 새로운 서비스를 제공할 수 없으며, 결국은 쇠퇴의 길을 걷게 될 것이다.

내가 일하는 회사가 이들 중의 하나가 된다면 굉장히 서글픈 일이다.
소프트웨어든 하드웨어든 새로운 패러다임 안에서는 다 같이 서비스를 제공하기 위한 매개체일 뿐이고, 이익을 창출하는 도구일 뿐이다. 과거 10년 동안 지금과 같이 기술적으로 진일보 했던 적도 없고, 기술적으로 성숙했던 적도 없다. 경제적인 어려움으로 닫쳐버린 지갑을 열수 있는 새로운 서비스를 만든다면, 이보다 더 큰 기회는 없을 거라 생각한다. 하드웨어를 통해서 또는 소프트웨어를 통해서 어떠한 서비스를 제공할 수 있을지가 관건이다. 이는 절대로 하드웨어 마이드로는 이룰수 없다. (반도체와 LCD와 같은 부품은 따로 논하지 않는다.)

구글이 왜 그리 많은 돈을 들여서 Android와 같은 플랫폼을 만들면, Apple과 폐쇄적인 회사가 SDK를 제공하고 자신들에 플랫폼에 Application을 올릴수 있도록 오픈하는지를 생각해 봐야한다.


Posted by 행복상자