• Like
  • Save
레일스를 이용한 애자일 웹 개발 가이드
Upcoming SlideShare
Loading in...5
×

레일스를 이용한 애자일 웹 개발 가이드

  • 1,503 views
Uploaded on

 

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,503
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
0
Comments
0
Likes
3

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. 레일스 를 이용한 애자일 웹 개발 가이드 2008. 3. 14 유스풀패러다임 김석준 ( [email_address] )
  • 2.
    • 애자일 소프트웨어 개발과 레일스
    • 애자일을 지원하는 레일스의 주요 기능들
    • 마무리
  • 3.
    • “ 사람들이 소프트웨어를 계속 사용하는 한 소프트웨어는 절대로 ‘완료’되지 않는다 . ”
  • 4. 애자일 소프트웨어 개발
    • People
      • ‘ 프로세스와 도구’ 보다는 ‘개인과 상호작용’
    • Working Software
      • ‘ 포괄적인 문서화’ 보다는 ‘동작하는 소프트웨어’
    • Collaboration
      • ‘ 계약 협상’ 보다는 ‘고객과의 협력’
    • Responsiveness
      • ‘ 계획 준수’ 보다는 ‘변화에 대응’
  • 5. 왜 레일스 인가 ?
    • 레일스는 ..
      • 애자일을 지원하는 하나의 ‘도구’
    • 설정보다 관례 (Convention over Configuration)
    • 반복금지 ! (DRY!)
    • 루비 언어
    • 빠른 개발
    • 편리한 유지보수
    • 적은 코딩량
    • 즐거움 ( 행복 ?)
    사람 원칙 프랙티스 도구
  • 6. 레일스
    • 세상에 처음 공개 (2004.7)
      • David Heinemeier Hansson
      • Basecamp 프로젝트 (37signals) 가 모태
    • 레일스 1.0 (2005.12)
      • Scaffold 코드 자동 생성 등
    • 레일스 1.1 (2006.3)
      • RJS, 통합테스팅 등
    • 레일스 1.2 (2007.1)
      • 리소스 (resource) 개념 도입
    • 레일스 2.0 (2007.12)
      • MVC 웹 프레임워크에서 REST 플랫폼으로 ( http://weblog.rubyonrails.org/2007/12/7/rails-2-0-it-s-done )
  • 7. 레일스 기본 구성요소들
    • MVC 구조
      • 액티브레코드 , 액션뷰 , 액션컨트롤러
    • 스크립트 자동생성 (code generation)
    • 템플릿 (html, xml, js 등 )
    • 라우팅 (routing)
    • 액티브레코드와 OR/M
    • 데이터베이스 마이그레이션
    • 자바스크립트와 Ajax 처리 헬퍼 (helper), RJS
    • 배포 (Deployment)
    • 플러그인 (Plugin)
    • REST 와 리소스
  • 8. 레일스 레퍼런스 * 참고 : http://rubyonrails.org/
  • 9. 레일스 의 확산
    • 레일스의 ‘친구’들
      • Django
      • CakePHP
      • Grails
      • ErlyWeb
      • jRuby on Rails
    • 루비 VM
      • jRuby: Java Powerd Ruby Implementation
      • YARV: Yet Another Ruby VM (ruby 1.9.1)
      • IronRuby : Ruby + Microsoft .NET
      • Rubinius 등
  • 10.
    • 애자일 소프트웨어 개발과 레일스
    • 애자일을 지원하는 레일스의 주요 기능들
    • 마무리
  • 11.
    • “ 프로그램이 쓸모 있으려면 어떤 기능이 필수적인지 사용자에게 물어보라 . ”
  • 12. 5 분만에 블로그를 만든다구요 ??
    • $ rails myblog
    * 출처 : “ 루비온레일스와 함께하는 애자일 웹개발” ( 인사이트 )
  • 13. DEMO Iteration#1 사용자가 글을 작성한다 ?H
  • 14. 설계 먼저 !
    • “ 리소스 (resource)” 중심 설계
    Post http://mycom.kr/posts C reate R etrieve U pdate D elete GET PUT DELETE POST
  • 15. 7 가지 표준 REST 액션들 포스트 삭제 destroy DELETE /posts/1 포스트 갱신 update PUT /posts/1 새 포스트 생성 create POST /posts 포스트 수정 edit GET /posts/1/edit 포스트 생성 new GET /posts/1/new 특정 포스트 show GET /posts/1 포스트 목록 index GET /posts 의미 대응 액션 URI
  • 16. 리소스 표현 (representation) def index @posts = Post.find(:all) respond_to do |format| format.html # index.html.erb format.xml { render :xml => @posts } end end Desktop App. RIA (Flex ..) ActiveResource Mobile (iPhone..) HTML XML JSON . . .
  • 17. One ‘ 리소스’ , Multi Use http://localhost:3000/posts http://localhost:3000/posts.xml http://localhost:3000/posts.json http://localhost:3000/posts.iphone . . .
  • 18. XML-RPC vs. SOAP vs. REST
  • 19. ( 코딩하는데 ) 얼마나 걸리나요 ? class User < ActiveRecord::Base has_many :posts end class Post < ActiveRecord::Base belongs_to :user end $ script/generate model User $ script/generate scaffold Post $ rake db:migrate user posts
  • 20.
    • “ 자기 자신은 정말 많은 노력을 하고 있다고 생각하지만 잘 안되는 이유는 쓸데없는 일에 매달려 있기 때문이다 . ”
  • 21. 액티브레코드와 OR/M class Post < ActiveRecord::Base has_many :comments end class Comment < ActiveRecord::Base belongs_to :post end t.string &quot;title&quot; t.text &quot;body&quot; t.datetime &quot;created_at&quot; t.datetime &quot;updated_at&quot; t.integer &quot;user_id&quot; Post t.integer &quot;post_id&quot; t.text &quot;body&quot; t.string &quot;author&quot; t.datetime &quot;created_at&quot; t.datetime &quot;updated_at&quot; Comment *
  • 22. 다대다 관계의 표현 등
    • has_and_belongs_to_many (habtm)
    • has_many :through (Rails 1.1 이상 )
    조인 테이블 조인 모델
  • 23. 액티브레코드 마이그레이션 class CreatePosts < ActiveRecord::Migration def self.up create_table :posts do |t| t.string :title t.text :body t.datetime :created_at t.datetime :updated_at t.integer :user_id end end def self.down drop_table :posts end end db/migrate/001_create_posts.rb
  • 24.
    • “ 요구사항은 잉크처럼 유동적이다 . ”
  • 25. { action }.html.erb <h1>New comment</h1> <%= error_messages_for :comment %> <% form_for([@post, @comment]) do |f| %> <p> <label for=&quot;body&quot;>Body</label><br /> <%= f.text_area :body, :rows => 3 %> <label for=&quot;author&quot;>Author</label><br /> <%= f.text_field :author %> </p> <p> <%= f.submit &quot;Create&quot; %> </p> <% end %> <%= link_to 'Back', posts_path %> app/views/comments/new.html.erb
  • 26.
    • Prototype 과 scriptaculous 라이브러리 탑재
    • 편리한 JavaScript & Ajax 헬퍼 (helper) 들
    • RJS (Ruby JavaScript)
    • 점진적 개선하기 (Progressive Enhancement)
    레일스와 자바스크립트 <%= javascript_include_tag 'jquery-1.2.3.pack.js' %> <%= yield :javascript %> <%= javascript_include_tag :defaults %> STRUCTURE PRESENTATION BEHAVIOR
  • 27. 바퀴를 다시 만들지 않기
    • 레일스 플러그인
      • Restful_authentication
      • Will_paginate
      • Attatchment_fu
      • . . .
    • 루비젬
    http://rubyforge.org/ http://agilewebdevelopment.com/plugins
  • 28.
    • “ 단위테스트가 더 나은 설계를 보장하지는 않지만 , 더 쉬운 코드를 만들어 주고 해야할 일에만 집중하게 해 준다 . ”
  • 29. 레일스 테스팅 프레임워크
    • Test::Unit
      • 단위 테스팅
        • 모델 객체에 대한 단위 테스팅 : Unit Test
        • 컨트롤러에 대한 단위 테스팅 : Functional Test
      • 통합 테스팅
        • 전체 스토리 흐름에 대한 테스팅 : Integration Test
    • 기타
      • 셀레늄 (selenium) 을 이용한 사용자 테스팅 (blackbox)
        • 참고 : “ 자바 개발자를 위한 레일스” ( 인사이트 ) 6 장
      • Rcov 를 이용한 테스트 커버리지 관리 등
  • 30. BDD(Behavior Driven Development) $ script/spec -fs specmodelspost_spec.rb Post - title 은 반드시 입력해야 한다 - title 은 중복되어서는 안된다 - title 은 5 자 이상이어야 한다 (PENDING: Not Yet Implemented) - body 는 최대 1,000 자까지 쓸 수 있다 (PENDING: Not Yet Implemented) Pending: Post title 은 5 자 이상이어야 한다 (Not Yet Implemented) Post body 는 최대 1,000 자까지 쓸 수 있다 (Not Yet Implemented) Finished in 0.731 seconds 4 examples, 0 failures, 2 pending
  • 31. RSpec describe Post do before(:each) do @post = Post.new end it &quot;title 은 반드시 입력해야 한다 &quot; do @post.save.should be_false end it &quot;title 은 중복되어서는 안된다 &quot; do @post.title = 'Original Title' @post.save @new_post = Post.new(:title => 'Original Title') @new_post.save.should_not be_true end it &quot;title 은 5 자 이상이어야 한다 &quot; it &quot;body 는 최대 1,000 자까지 쓸 수 있다 &quot; end Behavior Example
  • 32. Spec – Code - Refactor
  • 33. DEMO Iteration#2 사용자는 여러 명의 친구들과 친구관계를 맺는다 ?H
  • 34. 스펙 먼저 ! require File.dirname(__FILE__) + '/../spec_helper' describe User do before(:each) do @user = User.create(:name => ' 김석준 ') end it “ 여러 명의 친구를 가진다 &quot; do kim = User.create(:name => ' 김철수 ') hong = User.create(:name => ' 홍길동 ') @user.friends << kim @user.friends << hong @user.should have(2).friends end end
  • 35. 실패 확인 !
  • 36. 구현 예 ( 자기참조 다대다 연관과 조인모델 ) class User < ActiveRecord::Base has_many :friendships has_many :friends, :through => :friendships end $ script/generate model Freindship $ rake db:migrate class Friendship < ActiveRecord::Base belongs_to :user belongs_to :friend, :class_name => 'User‘ end friend 나 ‘ 김철수’ ‘ 홍길동’ User Friendship * *
  • 37. 성공 ! 그러나 완전히 끝난 건 아닙니다 ..
  • 38.
    • “ 짧은 반복으로 개발하고 점진적으로 배포하자 . 앞으로 1 년이나 남은 프로젝트에서 집중하기란 쉬운 일이 아니다 .”
    로컬 빌드 하루에 여러 번 체크 인 반복 1~4 주 기능추가 1~6 월 데모 및 연습 릴리스 * 출처 : “ 애자일 프랙티스” ( 인사이트 )
  • 39. 레일스 배포 (Deployment) * 출처 : http://ikspres.springnote.com/pages/622563 NginX + Mongrel_cluster Apache + mod_proxy_balance + Mongrel_cluster Pound + Mongrel_cluster Pen/Balance + Mongrel_cluster Mongrel ( evented Mongrel) Webrick 무지 빠르고 . 간지나는 아파치 아니면 안되요 . 좀  복잡해도 참을께요 좀 더 빠르거요 . SSL 되면서요 좀 더 빠른거요 . 쉬우면서 . 이제 조금 알 것 같네요 . 레일스 오늘 처음이에요
  • 40.
    • 애자일 소프트웨어 개발과 레일스
    • 애자일을 지원하는 레일스의 주요 기능들
    • 마무리
  • 41. 경험으로부터의 발견
    • ( 사용자에게 ) 소중한 것 먼저 .
    • 요구사항은 변한다 .
    • 바퀴를 새로 만들려 하지 말자 .
    • 웹표준의 준수
    • 짧은 반복 , 점진적 개선과 배포 .
    • 테스트 ( 또는 스펙 ) 먼저 !
    • 리소스 (Resource) 중심 사고 .
    • 코드리뷰와 DRY!
  • 42. 끝 = 새로운 시작
    • Take very small steps
      • 처음부터 코딩으로 달려들지 마세요 . 대신 , 예제 (example) 를 하나 추가하세요 . 그러면 그 예제가 여러분을 다음 번 할일로 안내할 거예요 . 코드가 꼬이기 전에 리팩터링하는 시간을 가지는 걸 잊지 마세요 . 언제나 코드를 명료하게 유지하세요 .
    * 출처 : http:// rspec.info/