Ubuntu 시작 한 뒤에 업데이트 관리자가 새로운 업데이트가 있다고 알려주면,
최신 업데이트를 위해 실행 뒤 다운로드를 받을때, 간혹 패키지 파일을 다운로드 받을때 서버 연결 접속 실패라고 뜬다.
서버 주소를 알려주면서 나오는 이 메세지를 보면서.. 이 서버 말고 또 없낭? 하는 의문이 생겨 인터넷을 뒤져보다
아래에 있는 영문 싸이트를 찾게 되었다.
기본적으로 /etc/apt/sources.list 파일을 열어 안의 내용을 바꿔주면 된다고 한다.
file is what apt-get/synaptics uses to find available software for you to install.Any lines with the # will be ignored
이 파일이 apt-get/synaptics 에서 사용되고, 안에 있는 설정으로 소프트웨어 찾아 설치하게 된다고 한다.
내 경우는 compiz 설치를 위해 명령어 및 여러 인터넷에서 알려주는걸 해봤는뎀.. 다운로드가 안되어 고민을 했었는데 저 파일에 있는 설정을 바꾼뒤 다운로드가 아주 잘 되었다.
간단하게 하나를 만들었다. 이렇게 만들어진 Layout 파일은 Controller 이름인 store 랑 같기 때문에 컴파일 할때 Rails 는 위의 Controller 와 같은 이름의Layout 을 적용 시킨다.
<%= stylesheet_link_tag "depot" , :media => "all" %> : depot.css 의 link 태크 부분을 적용시킨다.
<%= @page_title || "Pragmatic Bookshelf" %> : @page_title 인스턴스 변수에 페이지 헤딩 값을 넣는다. 그런뒤
main div 태그에 <%= yield :layout %> 를 넣어 주었다. (질문)
Store 라는 이름의 Controller를 generate 유틸리티로 만든다. 위에 index 가 붙었는데 이건 Method 이름이다.
전에는 Product 라는 Controller 만 만들었지만, 이번엔 Store 라는 Controller 를 만들며 그 안에 index 라는 Method 를 함께 만드는 것이다.
잘 만들어 졌다면, 첫번째로, 데이터 베이스에 있는 품목 리스트를 보여주는것으로 시작을 해보자.
strore_contoller.rb 안에 있는 index Method 를 바꿔줘야 한다.
depot/app/controllers/store_controller.rb
class StoreController < ApplicationController
def index
@products = Product.find_products_for_sale
end
end
위의 코드는 Model 에서 품목 리스트를 들고 와야 한다는 내용의 코드이다.
자 다음은 Controller 에서 호출을 받은 Model 이 판매되고 있는 품목 리스트(producst_for_sale)를 Method 를 통해 찾는다.
depot/app/models/product.rb
class Product < ActiveRecord::Base
def self.find_products_for_sale
find(:all, :order => "title" )
end
# validation stuff...
find 는 Rails Method 이다. find Method 는 Product Object 를 들고 있는 Array 를 반환하는데 Array 안에는 데이터 베이스에서 받는 각각의 Row 별 값들이 들어있다. :all 파라미터는 주어진 조건의 모든 Row 값들을 들고 온다는 뜻이며 :order 를 주어 "title" 컬럼으로 Sorting 되어 들고 오라는 뜻이다.
들고 온 뒤에는 find_products_for_sale Method 는 자신을 호출한 Controller 로 받아온 값들을 돌려준다.
자 Controller 는 값들을 받았으니, View 를 통해 결과값들을 보여줘야 한다.
depot/app/views/store/index.html.erb
<h1>Your Pragmatic Catalog</h1>
<% for product in @products -%>
위의 명령어 줄을 넣어주면 /db/migrate/20080601000003_add_test_data.rb 파일이 생성된다.
이 파일안에 코드를 넣게 되는데, Create Method 를 사용하여 넣어준다.
class AddTestData < ActiveRecord::Migration
def self.up
Product.delete_all
Product.create(:title => 'Pragmatic Version Control' ,
:description =>
%{<p>
This book is a recipe-based approach to using Subversion that will
get you up and running quickly---and correctly. All projects need
version control: it's a foundational piece of any project' s
infrastructure. Yet half of all project teams in the U.S. don't use
any version control at all. Many others don't use it well, and end
up experiencing time-consuming problems.
</p>},
그런뒤 depot.css 와 image 파일들을 다음 경로에서 다운받아 각각 public/stylesheets 와 public/images 폴더에 넣어 두면 된다. add_test_data.rb 도 테스트 파일이기 때문에 직접 치지 않고 아래 링크에서 다운받아 사용해도 된다.
코드를 보면 대충 알겠지만,
a) list-line-odd, 와 list-line-even 을 돌려 홀수라인과 짝수라인 색을 다르게 하여 보여준다는것을 알 수 있다.
b) 그리고 link_to 'Destroy' 를 보면 :confirm=> "Are You Sure" 가 씌여 있는데 'Destroy (없애다)' 링크를 누르면 확인 버튼
이 팝업으로 떠 지우기전 확인을 하게 하는걸 알 수 있다.
c) h Method 를 사용하여 product title 과 description 에 남아있는 Html 코드를 뛰어 넘게 했다.
이렇게 함으로써 리스트까지 완료하였다.
이제껏 우리가 한 일을 정리해 보면
1) development 데이터베이스를 만들어 Rails 에플리케이션과 연결하였다.
2) Migrations 을 사용하여 Development 데이터 베이서의 스키마를 만들고 수정하였으며 테스트 데이터를 가동시켰다.
3) products 테이블을 만들었으며 scaffold generator 로 사용가능한 에플리케이션을 만들었다.
4) 코드도 작성했는데, 그중 하나는 유효여부를 확인하는 코드이며
5) view 코드를 작성하여 좀더 이쁜 리스트가 나오게 만들었다.
자.. iteration 4 는 여기서 끝이다.
여기까지 작업하면서 몇가지 궁금한 점이 생겼다. 작동이 어찌 되는거지? 그냥 따라 하기만 하면 되는건가?
솔직히 Rails 는 처음 경험해 보는 언어이며, MVC 구조도 처음이다. 그래서 이해 하지 못한 부분들이 있기 때문에 읽으면서 건너 뛴 부분들도 많다. 물론 모든 부분들을 이해하면 좋겠지만, 내가 웹 언어를 공부하는 방법중 하나는 따라하기다.
물론 처음 언어를 공부하게 된다면 심도있는 길을 선택해야 겠지만, 내 목표는 일단 Ruby on Rails 를 통한 MVC 구조 이해 및 agile web development 를 배우는 것이다.
pdf 를 읽어보며 하나의 작은 쇼핑몰을 만들어 가는 이 책은 내 목표에 딱 맞는 듯 싶다.
좀더 공부해 보면 심도있게 재 정리 할 수도 있을 테고.. 그날이 오기만을 기다리며 읽어 내려갈 뿐.. ㅋㅋㅋ
자.. 이제 할일은..
depot> 폴더를 지우고, 다시 첨부터 해보는 거다. iteration 이 분단위로 일어나기 때문에 총 15분 이내로 다시 한번 만들어 볼 수 있을 듯.. ㅋㅋㅋ
1) 없는 컬럼 추가하기
Iteration 1 에서 Product 테이블을 만들었고, 페이지에서 데이터를 추가하고 빼고 하는 페이지들을 만들어 봤다.
Iteration 2 시작에서는 필요한 컬럼중 초기에 만들지 않은 컬럼을 테이블에 추가해 보기로 하겠다.
가격(Price) 컬럼을 만들어 보겠다.
이 외에도 리스트에 넣을 수 있는 게 있다.
Socket : MySQL 데이터베이스 아답터에게 서버와의 소켓을 설정할 수 있으며 또한 아래의 명령어로 올바른 소켓을 찾을 수 있다.
mysql_config --socket
pool : 어플리케이션에 연결될 수 있는 사용자 수
3) 디비 연결 테스트 하기 명령라인 2개로 전체적인 application 의 틀과 db 연결을 만들어봤다.
mySql 서버 시작 명령어 : sudo /etc/init.d/mywql start
잘 되는 지 테스트를 해보려면 아래의 명령어를 치면 된다.
depot> rake db:migrate
이 명령어가 무엇을 하는지는 지금 알필요가 있을까? 있더라도 패스..
다음의 명령어를 실행해 보자, 에러가 났다면 위의 yml 파일을 열어 확인하자.
depot> mysql -u root depot_development
mysql> create table dummy(i int);
mysql> drop table dummy;
mysql> exit 혹은 quit
4) 품목 모델과 시스템 관리 어플리케이션을 만들어보자 depot> ruby script/generate scaffold product title:string description:text image_url:string
명령어를 치고 나면 여러가지 일들이 일어난다. MVC 모델 중 Model 관련된 부분들이 만들어진다.
위의 명령어를 치면 각 model, view, controllers 폴더 아래 필요한 파일들과 폴더들이 만들어진다.
depot> rake db:migrate
위의 명령어는 만들어진 development 데이터베이스에, product 테이블에, title 컬럼은 string이며 description 컬럼은 text, 그리고 image_url 컬럼은 string 으로 세팅이 된다. 정말 만들어졌는지 궁금하다면, mysql 에서 depot_development db 에 연결하여 select * from product 라고 쳐보자. 아마 아무런 데이터가 있지 않겠지만은, 테이블이 생성된걸 확인 할 수 있을 것이다.
위의 명령어들로 일단 db 에 테이블 도 만들어졌고, application 에서 db 연결될 수 있도록 준비가 다 되었다.
자 그럼 WEBrick-based web serer 를 실행시켜 보자
depot> ruby script/server
서버가 실행되고 있다면, 익스플로러 혹은 다른 웹 브라우저 상단/하단 URL 창에
http://localhost:3000/products
라고 치면, 페이지들이 볼 수 있을 것이다.
이로써 iteration 1 이 끝났다.
출처 : Agile Web Development with Rails (Third Edition by Sam Ruby, Dave Thomas, David Heinemeier Hansoon with etc) 위의 내용은 직접 웹에서 구입한 agile Web development with Rails 의 pdf 파일(영문) 에서 읽고 이해한 내용 중, 개인적으로 필요한 부분을 추스려 올린 것으로, 만약 문제시 삭제될 수 있다.
배경: 선물 쿠폰을 들고와 매장에서 물건을 사고 쿠폰을 이용하여 잔액을 낸다.
쿠폰번호를 입력하고 인증 서버에 인증요청한뒤 결과를 가지고 온다.
인증서버는 2000 서버이고 웹포스 서버가 따로 존재하고 있다.
문제: 인증서버를 2003 서버로 업그레이드 한 뒤 인증 서버에서 결과물을 들고 올 수가 없다.
어느날 매장에서 쿠폰 인증이 되지 않아 쿠폰관련된 상품을 판매 등록할 수 없다고 연락이 왔다.
문득 생각에 요즘 보안 정책이 까다로워 져서 서버관리자에게 문의를 해봤지만, 80 포트를 막지 않는다고 한다.
ㅡ,.ㅡ 당연한건가? 난 잘 모르겠지만, 여하튼 그래서 인증서버 관리자에게 문의를 했다.
최근 바뀐 거라곤 2000 에서 2003 으로 서버 OS 를 업그레이드 한 거 밖에 없다고 한다. 음.. 그게 다라고?
asp 소스를 가만 히 보니 인증을 위해 get 형식으로 ULR 을 조합하여 ServerXMLHTTP 객체를 생성한뒤 값을 태운다.
그럼 이부분에서 문제가 있는게 당연한데, 솔직히 ServerXMLHTTP 객체가 뭔지 몰라 인터넷을 찾아봤다
ServerXMLHTTP 의 정의는 MSND 고객지원에 가보면 아래야 같이 정의가 되어 있다. "ServerXMLHTTP는 다른 웹 서버 간에 서버의 안전한 HTTP 액세스를 위한 메서드와 속성을 제공합니다. 이 개체를 사용하면 다른 웹 서버 간에도 XML 데이터를 교환할 수 있습니다."
음.. 그렇군.. 그리고 바로 밑에 플랫폼 요구사항을 보니 windows 2000 서버에서나, NT 4.0 과 IE 5.01 이상에서 사용할 수 있다고 씌여 있는데, 중간에 아는 선배가 MSXML2.ServerXMLHttp 말고 Microsoft.xmlHTTP 로 써바.. 라고 이야기를 해주셔서, 그렇게 했더니 일단 작동이 되어 매장의 불만을 해소 시켜줄 수 있었다. 하지만, 궁금증은 더 커졌고..그럼.. 2003 서버에서는 안되나? 라는 궁금증이 생겨났고, 좀더 읽어 내려갔다.
XMLHTTP 와 ServerXMLHTTP 설명이 나왔다.
XMLHTTP 는 클라이언트 응용프로그램용으로 설계된것. WinInet 기반, URLMon 에 의존
ServerXMLHTTP 는 서버 응용 프로그램용으로 설계된 것, HTTP 클라이언트 스택인 WinHTTP 에 의존
(뭥미? ㅡ,.ㅡ)
대충 XMLHTTP 도 뭔지 알게되었다. 그럼 2003 에서는 XMLHTTP 가 돌지 않는 이유는 뭘까?
인터넷을 뒤져보니 XsXml2.ServerXmlHttp.4.0 을 사용하려고 하는데 Windows 2003 R2 Sp2 에서 에러가 난다고 하더라..
답변을 보니, IE6 과 그 이상 브라우저들은 MSXML3 이 탑재되어 있어 MSXML2.ServerXMLHTTP.3.0 의 사용이 가능하다고 한다.
음 그럼 Set objXmlHttp = CreateObject("MSXML2.ServerXMLHTTP.3.0") 이라고 써주면 된다 이거쥥?
안되더라.. ㅡ,.ㅡ 췟..
결국엔 Set objXmlHttp = CreateObject("Microsoft.xmlHTTP") 이걸 지금 사용중이다.
이부분에 대해서 아시는 분 알려주세요 ㅠ.ㅠ 문제 없이 사용하고 있지만, 절대 뭔지 모르고 사용하고 있다눈.. ㅠ.ㅠ