SlideShare a Scribd company logo
1 of 42
레일스 를 이용한 애자일 웹 개발  가이드 2008. 3. 14 유스풀패러다임  김석준 ( [email_address] )
[object Object],[object Object],[object Object]
[object Object]
애자일 소프트웨어 개발 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
왜  레일스 인가 ? ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],사람 원칙 프랙티스 도구
레일스 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
레일스  기본 구성요소들 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
레일스  레퍼런스 *  참고 : http://rubyonrails.org/
레일스 의 확산 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object]
[object Object]
5 분만에 블로그를 만든다구요 ?? ,[object Object],*  출처 : “ 루비온레일스와 함께하는 애자일 웹개발”  ( 인사이트 )
DEMO Iteration#1 사용자가 글을 작성한다 ?H
설계 먼저 ! ,[object Object],Post http://mycom.kr/posts C reate R etrieve U pdate D elete GET PUT DELETE POST
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
리소스 표현 (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 . . .
One ‘ 리소스’ , Multi Use  http://localhost:3000/posts http://localhost:3000/posts.xml http://localhost:3000/posts.json http://localhost:3000/posts.iphone . . .
XML-RPC vs. SOAP vs. REST
( 코딩하는데 )  얼마나 걸리나요 ? 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
[object Object]
액티브레코드와  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 *
다대다 관계의 표현 등 ,[object Object],[object Object],조인 테이블 조인 모델
액티브레코드 마이그레이션 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
[object Object]
{ 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
[object Object],[object Object],[object Object],[object Object],레일스와 자바스크립트 <%= javascript_include_tag 'jquery-1.2.3.pack.js' %> <%= yield :javascript %> <%= javascript_include_tag :defaults %> STRUCTURE PRESENTATION BEHAVIOR
바퀴를 다시 만들지 않기 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],http://rubyforge.org/ http://agilewebdevelopment.com/plugins
[object Object]
레일스 테스팅 프레임워크 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
BDD(Behavior Driven Development) $ script/spec -fs specodelsost_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
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
Spec – Code - Refactor
DEMO Iteration#2 사용자는 여러 명의 친구들과  친구관계를 맺는다 ?H
스펙 먼저 ! 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
실패 확인 !
구현 예 ( 자기참조 다대다 연관과 조인모델 ) 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 * *
성공 !   그러나 완전히 끝난 건 아닙니다 ..
[object Object],로컬 빌드 하루에 여러 번 체크 인 반복 1~4 주 기능추가 1~6 월 데모 및 연습 릴리스 *  출처 : “ 애자일 프랙티스”  ( 인사이트 )
레일스 배포 (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  되면서요 좀 더 빠른거요 .  쉬우면서 . 이제 조금 알 것 같네요 . 레일스 오늘 처음이에요
[object Object],[object Object],[object Object]
경험으로부터의 발견 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
끝  =  새로운 시작 ,[object Object],[object Object],*  출처 :  http:// rspec.info/

More Related Content

What's hot

Isomorphicspring Isomorphic - spring web seminar 2015
Isomorphicspring Isomorphic - spring web seminar 2015Isomorphicspring Isomorphic - spring web seminar 2015
Isomorphicspring Isomorphic - spring web seminar 2015sung yong jung
 
AngularJS In Production
AngularJS In ProductionAngularJS In Production
AngularJS In ProductionMooYeol Lee
 
React를 이용하여 멀티플랫폼에서 개발하기
React를 이용하여 멀티플랫폼에서 개발하기React를 이용하여 멀티플랫폼에서 개발하기
React를 이용하여 멀티플랫폼에서 개발하기WebFrameworks
 
Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.Kyoung Up Jung
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)수보 김
 
JavaSript Template Engine
JavaSript Template EngineJavaSript Template Engine
JavaSript Template EngineOhgyun Ahn
 
Django in Production
Django in ProductionDjango in Production
Django in ProductionHyun-woo Park
 
간단한 블로그를 만들며 Django 이해하기
간단한 블로그를 만들며 Django 이해하기간단한 블로그를 만들며 Django 이해하기
간단한 블로그를 만들며 Django 이해하기Kyoung Up Jung
 
진짜기초 Node.js
진짜기초 Node.js진짜기초 Node.js
진짜기초 Node.jsWoo Jin Kim
 
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?Sang-ho Choi
 
Why javaScript?
Why javaScript?Why javaScript?
Why javaScript?Kim Hunmin
 
컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기우영 주
 
SpringMVC 전체 흐름 알아보기
SpringMVC 전체 흐름 알아보기SpringMVC 전체 흐름 알아보기
SpringMVC 전체 흐름 알아보기Myung Woon Oh
 
막하는스터디 두번째만남 Express(20151025)
막하는스터디 두번째만남 Express(20151025)막하는스터디 두번째만남 Express(20151025)
막하는스터디 두번째만남 Express(20151025)연웅 조
 
Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기Kyoung Up Jung
 
T.D.D로 Flask API 맛보기
T.D.D로 Flask API 맛보기T.D.D로 Flask API 맛보기
T.D.D로 Flask API 맛보기JIHUN KIM
 
자바 웹 개발 시작하기 (10주차 : ㅌㅗㅇ ㅎㅏ ㄹㅏ)

자바 웹 개발 시작하기 (10주차 : ㅌㅗㅇ ㅎㅏ ㄹㅏ)
자바 웹 개발 시작하기 (10주차 : ㅌㅗㅇ ㅎㅏ ㄹㅏ)

자바 웹 개발 시작하기 (10주차 : ㅌㅗㅇ ㅎㅏ ㄹㅏ)
DK Lee
 
Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Kim Hunmin
 

What's hot (20)

Handlebars
HandlebarsHandlebars
Handlebars
 
Isomorphicspring Isomorphic - spring web seminar 2015
Isomorphicspring Isomorphic - spring web seminar 2015Isomorphicspring Isomorphic - spring web seminar 2015
Isomorphicspring Isomorphic - spring web seminar 2015
 
AngularJS In Production
AngularJS In ProductionAngularJS In Production
AngularJS In Production
 
React를 이용하여 멀티플랫폼에서 개발하기
React를 이용하여 멀티플랫폼에서 개발하기React를 이용하여 멀티플랫폼에서 개발하기
React를 이용하여 멀티플랫폼에서 개발하기
 
Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)
 
JavaSript Template Engine
JavaSript Template EngineJavaSript Template Engine
JavaSript Template Engine
 
Django in Production
Django in ProductionDjango in Production
Django in Production
 
간단한 블로그를 만들며 Django 이해하기
간단한 블로그를 만들며 Django 이해하기간단한 블로그를 만들며 Django 이해하기
간단한 블로그를 만들며 Django 이해하기
 
진짜기초 Node.js
진짜기초 Node.js진짜기초 Node.js
진짜기초 Node.js
 
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
 
Why javaScript?
Why javaScript?Why javaScript?
Why javaScript?
 
컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기
 
SpringMVC 전체 흐름 알아보기
SpringMVC 전체 흐름 알아보기SpringMVC 전체 흐름 알아보기
SpringMVC 전체 흐름 알아보기
 
막하는스터디 두번째만남 Express(20151025)
막하는스터디 두번째만남 Express(20151025)막하는스터디 두번째만남 Express(20151025)
막하는스터디 두번째만남 Express(20151025)
 
Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기
 
T.D.D로 Flask API 맛보기
T.D.D로 Flask API 맛보기T.D.D로 Flask API 맛보기
T.D.D로 Flask API 맛보기
 
역시 Redux
역시 Redux역시 Redux
역시 Redux
 
자바 웹 개발 시작하기 (10주차 : ㅌㅗㅇ ㅎㅏ ㄹㅏ)

자바 웹 개발 시작하기 (10주차 : ㅌㅗㅇ ㅎㅏ ㄹㅏ)
자바 웹 개발 시작하기 (10주차 : ㅌㅗㅇ ㅎㅏ ㄹㅏ)

자바 웹 개발 시작하기 (10주차 : ㅌㅗㅇ ㅎㅏ ㄹㅏ)

 
Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까?
 

Viewers also liked

루비온레일즈_01_간단한 정적인 홈페이지 제작
루비온레일즈_01_간단한 정적인 홈페이지 제작루비온레일즈_01_간단한 정적인 홈페이지 제작
루비온레일즈_01_간단한 정적인 홈페이지 제작SangHun Lee
 
JavaScript on Rails 튜토리얼
JavaScript on Rails 튜토리얼JavaScript on Rails 튜토리얼
JavaScript on Rails 튜토리얼Sukjoon Kim
 
루비, REST, jQuery 그리고 agile 웹에 관한 이야기
루비, REST, jQuery 그리고 agile 웹에 관한 이야기루비, REST, jQuery 그리고 agile 웹에 관한 이야기
루비, REST, jQuery 그리고 agile 웹에 관한 이야기Sukjoon Kim
 
Front-end Development with Ruby on Rails
Front-end Development with Ruby on RailsFront-end Development with Ruby on Rails
Front-end Development with Ruby on Rails추근 문
 
오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)
오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)
오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)Taeung Song
 
문돌이가 가르치는 웹 프론트엔드 1차시
문돌이가 가르치는 웹 프론트엔드 1차시문돌이가 가르치는 웹 프론트엔드 1차시
문돌이가 가르치는 웹 프론트엔드 1차시동현 조
 
패스트캠퍼스 프론트엔드 강의 오리엔테이션
패스트캠퍼스 프론트엔드 강의 오리엔테이션패스트캠퍼스 프론트엔드 강의 오리엔테이션
패스트캠퍼스 프론트엔드 강의 오리엔테이션Taegon Kim
 
프로그래머가 되고 싶으세요
프로그래머가 되고 싶으세요프로그래머가 되고 싶으세요
프로그래머가 되고 싶으세요Chris Ohk
 
이제 막 웹개발자 되고싶은 분들께
이제 막 웹개발자 되고싶은 분들께이제 막 웹개발자 되고싶은 분들께
이제 막 웹개발자 되고싶은 분들께지수 윤
 
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)MinGeun Park
 
초보 개발자를 위한 웹 프론트엔드 개발 101
초보 개발자를 위한 웹 프론트엔드 개발 101초보 개발자를 위한 웹 프론트엔드 개발 101
초보 개발자를 위한 웹 프론트엔드 개발 101Chang W. Doh
 
초급 개발자 탈출
초급 개발자 탈출초급 개발자 탈출
초급 개발자 탈출JeongHun Byeon
 
게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법Chris Ohk
 
2.네이버 프론트엔드 김지태
2.네이버 프론트엔드 김지태2.네이버 프론트엔드 김지태
2.네이버 프론트엔드 김지태NAVER D2
 
손코딩뇌컴파일눈디버깅을 소개합니다.
손코딩뇌컴파일눈디버깅을 소개합니다.손코딩뇌컴파일눈디버깅을 소개합니다.
손코딩뇌컴파일눈디버깅을 소개합니다.Kwangsung Ha
 
EMOCON 2015 - Sketch3로 기획서 관리하기
EMOCON 2015 - Sketch3로 기획서 관리하기EMOCON 2015 - Sketch3로 기획서 관리하기
EMOCON 2015 - Sketch3로 기획서 관리하기이상한모임
 
소프트웨어 개발자 로드맵
소프트웨어 개발자 로드맵소프트웨어 개발자 로드맵
소프트웨어 개발자 로드맵중선 곽
 
웹 Front-End 실무 이야기
웹 Front-End 실무 이야기웹 Front-End 실무 이야기
웹 Front-End 실무 이야기JinKwon Lee
 

Viewers also liked (18)

루비온레일즈_01_간단한 정적인 홈페이지 제작
루비온레일즈_01_간단한 정적인 홈페이지 제작루비온레일즈_01_간단한 정적인 홈페이지 제작
루비온레일즈_01_간단한 정적인 홈페이지 제작
 
JavaScript on Rails 튜토리얼
JavaScript on Rails 튜토리얼JavaScript on Rails 튜토리얼
JavaScript on Rails 튜토리얼
 
루비, REST, jQuery 그리고 agile 웹에 관한 이야기
루비, REST, jQuery 그리고 agile 웹에 관한 이야기루비, REST, jQuery 그리고 agile 웹에 관한 이야기
루비, REST, jQuery 그리고 agile 웹에 관한 이야기
 
Front-end Development with Ruby on Rails
Front-end Development with Ruby on RailsFront-end Development with Ruby on Rails
Front-end Development with Ruby on Rails
 
오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)
오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)
오픈소스 개발참여한 이야기 (NIPA 오픈프론티어 3기 송태웅)
 
문돌이가 가르치는 웹 프론트엔드 1차시
문돌이가 가르치는 웹 프론트엔드 1차시문돌이가 가르치는 웹 프론트엔드 1차시
문돌이가 가르치는 웹 프론트엔드 1차시
 
패스트캠퍼스 프론트엔드 강의 오리엔테이션
패스트캠퍼스 프론트엔드 강의 오리엔테이션패스트캠퍼스 프론트엔드 강의 오리엔테이션
패스트캠퍼스 프론트엔드 강의 오리엔테이션
 
프로그래머가 되고 싶으세요
프로그래머가 되고 싶으세요프로그래머가 되고 싶으세요
프로그래머가 되고 싶으세요
 
이제 막 웹개발자 되고싶은 분들께
이제 막 웹개발자 되고싶은 분들께이제 막 웹개발자 되고싶은 분들께
이제 막 웹개발자 되고싶은 분들께
 
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
[0119 박민근] 기술 면접시 자주 나오는 문제들(ver 2013)
 
초보 개발자를 위한 웹 프론트엔드 개발 101
초보 개발자를 위한 웹 프론트엔드 개발 101초보 개발자를 위한 웹 프론트엔드 개발 101
초보 개발자를 위한 웹 프론트엔드 개발 101
 
초급 개발자 탈출
초급 개발자 탈출초급 개발자 탈출
초급 개발자 탈출
 
게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법
 
2.네이버 프론트엔드 김지태
2.네이버 프론트엔드 김지태2.네이버 프론트엔드 김지태
2.네이버 프론트엔드 김지태
 
손코딩뇌컴파일눈디버깅을 소개합니다.
손코딩뇌컴파일눈디버깅을 소개합니다.손코딩뇌컴파일눈디버깅을 소개합니다.
손코딩뇌컴파일눈디버깅을 소개합니다.
 
EMOCON 2015 - Sketch3로 기획서 관리하기
EMOCON 2015 - Sketch3로 기획서 관리하기EMOCON 2015 - Sketch3로 기획서 관리하기
EMOCON 2015 - Sketch3로 기획서 관리하기
 
소프트웨어 개발자 로드맵
소프트웨어 개발자 로드맵소프트웨어 개발자 로드맵
소프트웨어 개발자 로드맵
 
웹 Front-End 실무 이야기
웹 Front-End 실무 이야기웹 Front-End 실무 이야기
웹 Front-End 실무 이야기
 

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

김윤환_포트폴리오
김윤환_포트폴리오김윤환_포트폴리오
김윤환_포트폴리오Yun-hwan Kim
 
Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기KwangSeob Jeong
 
Web Framework (웹 프레임워크)
Web Framework (웹 프레임워크)Web Framework (웹 프레임워크)
Web Framework (웹 프레임워크)Junsu Kim
 
RESTful API 설계
RESTful API 설계RESTful API 설계
RESTful API 설계Jinho Yoo
 
Web_06_Ruby On Rails (임시)
Web_06_Ruby On Rails (임시)Web_06_Ruby On Rails (임시)
Web_06_Ruby On Rails (임시)team air @ Dimigo
 
ecdevday3 효율적인 유지보수를 위한 개발 및 관리
ecdevday3 효율적인 유지보수를 위한 개발 및 관리ecdevday3 효율적인 유지보수를 위한 개발 및 관리
ecdevday3 효율적인 유지보수를 위한 개발 및 관리Kenu, GwangNam Heo
 
코드로 바로 해버리는 서버리스 오케스트레이션 - Azure Durable Functions
코드로 바로 해버리는 서버리스 오케스트레이션 - Azure Durable Functions코드로 바로 해버리는 서버리스 오케스트레이션 - Azure Durable Functions
코드로 바로 해버리는 서버리스 오케스트레이션 - Azure Durable FunctionsJongin Lee
 
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Javajigi Jaesung
 
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)SangIn Choung
 
처음 시작하는 라라벨
처음 시작하는 라라벨처음 시작하는 라라벨
처음 시작하는 라라벨KwangSeob Jeong
 
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXpressEngine
 
Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012Daum DNA
 
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)DK Lee
 
[IoT] MAKE with Open H/W + Node.JS - 3rd
[IoT] MAKE with Open H/W + Node.JS - 3rd[IoT] MAKE with Open H/W + Node.JS - 3rd
[IoT] MAKE with Open H/W + Node.JS - 3rdPark Jonggun
 
Front end dev 2016 & beyond
Front end dev 2016 & beyondFront end dev 2016 & beyond
Front end dev 2016 & beyondJae Sung Park
 
track2 01. 서버리스 아키텍처 소셜미디어 개발기인데요. React를 썼어요/ 삼성SDS, 도경태 & 양선호
track2 01. 서버리스 아키텍처 소셜미디어 개발기인데요. React를 썼어요/ 삼성SDS, 도경태 & 양선호 track2 01. 서버리스 아키텍처 소셜미디어 개발기인데요. React를 썼어요/ 삼성SDS, 도경태 & 양선호
track2 01. 서버리스 아키텍처 소셜미디어 개발기인데요. React를 썼어요/ 삼성SDS, 도경태 & 양선호 양 한빛
 
Collaboration with Eclipse final
Collaboration with Eclipse finalCollaboration with Eclipse final
Collaboration with Eclipse finalKenu, GwangNam Heo
 

Similar to 레일스를 이용한 애자일 웹 개발 가이드 (20)

김윤환_포트폴리오
김윤환_포트폴리오김윤환_포트폴리오
김윤환_포트폴리오
 
Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기
 
Web Framework (웹 프레임워크)
Web Framework (웹 프레임워크)Web Framework (웹 프레임워크)
Web Framework (웹 프레임워크)
 
RESTful API 설계
RESTful API 설계RESTful API 설계
RESTful API 설계
 
Web_06_Ruby On Rails (임시)
Web_06_Ruby On Rails (임시)Web_06_Ruby On Rails (임시)
Web_06_Ruby On Rails (임시)
 
ecdevday3 효율적인 유지보수를 위한 개발 및 관리
ecdevday3 효율적인 유지보수를 위한 개발 및 관리ecdevday3 효율적인 유지보수를 위한 개발 및 관리
ecdevday3 효율적인 유지보수를 위한 개발 및 관리
 
요즘웹개발
요즘웹개발요즘웹개발
요즘웹개발
 
코드로 바로 해버리는 서버리스 오케스트레이션 - Azure Durable Functions
코드로 바로 해버리는 서버리스 오케스트레이션 - Azure Durable Functions코드로 바로 해버리는 서버리스 오케스트레이션 - Azure Durable Functions
코드로 바로 해버리는 서버리스 오케스트레이션 - Azure Durable Functions
 
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
 
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
 
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
 
처음 시작하는 라라벨
처음 시작하는 라라벨처음 시작하는 라라벨
처음 시작하는 라라벨
 
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
 
Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012
 
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
 
[IoT] MAKE with Open H/W + Node.JS - 3rd
[IoT] MAKE with Open H/W + Node.JS - 3rd[IoT] MAKE with Open H/W + Node.JS - 3rd
[IoT] MAKE with Open H/W + Node.JS - 3rd
 
Front end dev 2016 & beyond
Front end dev 2016 & beyondFront end dev 2016 & beyond
Front end dev 2016 & beyond
 
track2 01. 서버리스 아키텍처 소셜미디어 개발기인데요. React를 썼어요/ 삼성SDS, 도경태 & 양선호
track2 01. 서버리스 아키텍처 소셜미디어 개발기인데요. React를 썼어요/ 삼성SDS, 도경태 & 양선호 track2 01. 서버리스 아키텍처 소셜미디어 개발기인데요. React를 썼어요/ 삼성SDS, 도경태 & 양선호
track2 01. 서버리스 아키텍처 소셜미디어 개발기인데요. React를 썼어요/ 삼성SDS, 도경태 & 양선호
 
Collaboration with Eclipse final
Collaboration with Eclipse finalCollaboration with Eclipse final
Collaboration with Eclipse final
 
hexa core
hexa corehexa core
hexa core
 

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

  • 1. 레일스 를 이용한 애자일 웹 개발 가이드 2008. 3. 14 유스풀패러다임 김석준 ( [email_address] )
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8. 레일스 레퍼런스 * 참고 : http://rubyonrails.org/
  • 9.
  • 10.
  • 11.
  • 12.
  • 13. DEMO Iteration#1 사용자가 글을 작성한다 ?H
  • 14.
  • 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.
  • 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.
  • 27.
  • 28.
  • 29.
  • 30. BDD(Behavior Driven Development) $ script/spec -fs specodelsost_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
  • 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.
  • 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.
  • 42.