시작하기(레일즈 6)
이 페이지의 내용
참고
이 튜토리얼은 Ruby on Rails 6 용입니다. 사용 중인 버전이 아닌 경우 탐색 메뉴에서 사용 중인 Rails 버전에 적합한 튜토리얼을 선택하세요.
새 애플리케이션
이 섹션에서는 데이터 액세스 를 위해 Mongoid를 사용하여 새 Ruby on Rails 애플리케이션 을 만드는 방법을 보여줍니다. 이 애플리케이션 은 Ruby on Rails 시작하기 에 설명된 블로그 애플리케이션 과 유사합니다. 가이드 이지만 데이터베이스 어댑터로 ActiveRecord 대신 Mongoid를 사용합니다.
mongoid-demo GitHub 리포지토리에서 이 애플리케이션의 전체 소스 코드를 찾을 수 있습니다.
참고
이 가이드는 사용자가 Ruby on Rails에 대한 기본적인 지식을 갖고 있다고 가정합니다. Ruby on Rails에 대해 자세히 알아보려면 시작하기 가이드 또는 기타 Rails 가이드를 참조하세요.
설치 rails
Rails 생성기를 사용하여 애플리케이션의 스켈레톤을 생성하겠습니다. 이를 위해 가장 먼저 할 일은 rails
gem을 설치하는 것입니다.
gem install rails -v '~> 6.0'
새 애플리케이션 만들기
다음과 같이 rails
명령을 사용하여 애플리케이션 스켈레톤을 만듭니다.
rails new blog --skip-active-record --skip-bundle cd blog
참고
다음과 같은 경고를 받을 수 있습니다.
Could not find gem 'puma (~> 3.11)' in any of the gem sources listed in your Gemfile. Run `bundle install` to install missing gems.
잠시 후에 gem 설치를 처리해 드리니 무시하세요.
대신 Mongoid를 사용할 것이므로 ActiveRecord가 종속성으로 추가되지 않도록 요청 하기 위해 --skip-active-record
을 전달합니다. 또한 Gemfile
를 수정하여 mongoid
종속성을 추가할 것이기 때문에 --skip-bundle
을 전달합니다.
RSpec으로 애플리케이션 을 테스트하려는 경우 --skip-test
및 --skip-system-test
옵션을 전달하여 기본값 Rails 테스트 설정 을 생략하도록 생성기에 지시할 수 있습니다.
rails new blog --skip-bundle --skip-active-record --skip-test --skip-system-test cd blog
Git 리포지토리 만들기
필수는 아니지만 애플리케이션에 맞는 Git 리포지토리를 생성하는 것이 좋습니다.
git init . git add . git commit
이 튜토리얼을 따라하면서 변경 사항을 커밋합니다.
Mongoid 추가
1. Gemfile
을 수정하여 mongoid gem에 대한 참조를 추가합니다.
gem 'mongoid'
참고
Rails 6.0 을(를) 사용하려면 Mongoid 7.0.5 이상이 필요합니다.
gem 종속성을 설치합니다.
bundle install
기본 Mongoid 구성을 생성합니다.
bin/rails g mongoid:config
이 생성기는 config/mongoid.yml
구성 파일(MongoDB 배포에 대한 연결을 구성하는 데 사용) 및 config/initializers/mongoid.rb
이니셜라이저 파일(다른 Mongoid 관련 구성에 사용될 수 있음)을 생성합니다. 여기서는 ActiveRecord를 사용하지 않으므로 database.yml
파일이 없습니다.
로컬에서 MongoDB 실행
이전 단계에서 생성된 구성은 MongoDB Server가 로컬로 실행될 때 적합합니다. 아직 로컬 MongoDB Server가 없는 경우, MongoDB를 다운로드하고 설치하세요.
생성된 mongoid.yml
파일은 수정 없이 작동하지만, 개발을 위해 서버 선택 타임아웃을 줄이는 것이 좋습니다. 이렇게 변경하면 mongoid.yml
의 주석 처리되지 않은 줄은 다음과 같이 표시됩니다.
development: clients: default: database: blog_development hosts: - localhost:27017 options: server_selection_timeout: 1
MongoDB Atlas 사용
MongoDB를 다운로드하고 설치하여 로컬에서 실행하는 대신 무료로 MongoDB Atlas 계정을 생성하고 Atlas에서 무료 MongoDB cluster를 만들 수 있습니다. 클러스터가 만들어지면 클러스터에 연결하기 페이지의 안내에 따라 URI를 가져옵니다. Ruby 드라이버 2.5 이상의 형식을 사용하세요.
URI을 config/mongoid.yml
파일에 붙여넣고 정의된 호스트를 주석 처리합니다. Atlas를 사용할 때 개발 환경에서는 서버 선택 시간 제한을 5초로 설정하는 것이 좋습니다.
config/mongoid.yml
의 주석 처리되지 않은 콘텐츠는 다음과 같이 표시됩니다.
development: clients: default: uri: mongodb+srv://user:pass@yourcluster.mongodb.net/blog_development?retryWrites=true&w=majority options: server_selection_timeout: 5
기타 Rails 종속성
첫 번째 Rails 애플리케이션 을 만드는 경우 컴퓨터에 Node.js를 설치해야 할 수 있습니다. 이 작업은 운영 체제 패키지를 통해 또는 바이너리를 다운로드하여 수행할 수 있습니다. .
그런 다음 Yarn이 설치되어 있지 않은 경우설치 지침을 따르세요. .
마지막으로 webpacker를 설치합니다.
rails webpacker:install
애플리케이션 실행
이제 다음을 실행하여 애플리케이션 서버를 시작할 수 있습니다.
rails s
localhost:3000으로 이동하여 애플리케이션에 액세스합니다.
게시글 추가
표준 Rails 스캐폴딩을 사용하여 Mongoid는 블로그에 필요한 모델, 컨트롤러 및 뷰 파일을 생성하여 블로그 게시물 작성을 빠르게 시작할 수 있습니다:
bin/rails g scaffold Post title:string body:text
localhost:3000/posts로 이동하여 게시글을 작성하고 이미 작성된 게시글을 확인합니다.
댓글 추가
애플리케이션을 대화형으로 만들기 위해 사용자가 게시글에 댓글을 추가할 수 있는 기능을 추가해 보겠습니다.
Comment
모델을 만듭니다.
bin/rails g scaffold Comment name:string message:string post:belongs_to
Post
모델 파일 app/models/post.rb
를 열고 댓글에 대해 has_many
연관 관계를 추가합니다.
class Post include Mongoid::Document field :title, type: String field :body, type: String has_many :comments, dependent: :destroy end
참고
다음은 Mongoid < 7.0.8 또는 7.1.2 버전을 사용하는 경우에만 필요합니다. (참조 MONGOID-4885 자세한 내용은
Comment
모델 파일 app/models/comment.rb
을 열고 생성된 embedded_in
연관 관계를 belongs_to
로 변경합니다.
class Comment include Mongoid::Document field :name, type: String field :message, type: String belongs_to :post end
포스트 쇼 보기 파일 app/views/posts/show.html.erb
을 열고 기존 댓글을 렌더링하고 새 댓글을 남기라는 메시지를 표시하는 섹션을 추가합니다.
<section class="section comments"> <div class="container"> <h2 class="subtitle is-5"> <strong><%= @post.comments.count %></strong> Comments </h2> <%= render @post.comments %> <div class="comment-form"> <hr /> <h3 class="subtitle is-3">Leave a reply</h3> <%= render partial: 'comments/form', locals: { comment: @post.comments.build } %> </div> </div> </section>
댓글 양식 파일을 열고 :message
필드 유형을 text_field
에서 text_area
로 변경하고 :post_id
필드 유형을 text_field
에서 hidden_field
로 변경합니다. 결과는 다음과 같아야 합니다.
<%= form_with(model: comment, local: true) do |form| %> <% if comment.errors.any? %> <div id="error_explanation"> <h2><%= pluralize(comment.errors.count, "error") %> prohibited this comment from being saved:</h2> <ul> <% comment.errors.full_messages.each do |message| %> <li><%= message %></li> <% end %> </ul> </div> <% end %> <div class="field"> <%= form.label :name %> <%= form.text_field :name %> </div> <div class="field"> <%= form.label :message %> <%= form.text_area :message %> </div> <div class="field"> <%= form.hidden_field :post_id %> </div> <div class="actions"> <%= form.submit %> </div> <% end %>
다음 콘텐츠를 사용하여 댓글 보기에 대한 부분인 app/views/comments/_comment.html.erb
를 만듭니다.
<p> <strong><%= comment.name %>:</strong> <%= comment.message %> <br> <%= link_to 'Delete', [comment], method: :delete, class: "button is-danger", data: { confirm: 'Are you sure?' } %> </p>
이제 게시글에 댓글을 남길 수 있습니다.
기존 애플리케이션
ActiveRecord 대신 Mongoid를 사용하도록 기존 Ruby on Rails 애플리케이션 을 전환하려면 다음 단계를 따르세요.
Dependencies
Gemfile
에 언급된 sqlite
, pg
등과 같은 RDBMS 라이브러리를 제거하거나 주석 처리하고 mongoid
을 추가합니다.
gem 'mongoid'
참고
Rails 6.0 을(를) 사용하려면 Mongoid 7.0.5 이상이 필요합니다.
gem 종속성을 설치합니다.
bundle install
로드된 프레임워크
config/application.rb
검사합니다. require 'rails/all'
을 통해 Rails의 모든 구성 요소가 필요한 경우 개별 프레임워크가 필요하도록 변경합니다.
# Remove or comment out #require "rails/all" # Add this require instead of "rails/all": require "rails" # Pick the frameworks you want: require "active_model/railtie" require "active_job/railtie" require "action_controller/railtie" require "action_mailer/railtie" # require "action_mailbox/engine" # require "action_text/engine" require "action_view/railtie" require "action_cable/engine" require "sprockets/railtie" require "rails/test_unit/railtie" # Remove or comment out ActiveRecord and ActiveStorage: # require "active_record/railtie" # require "active_storage/engine"
참고
현재 ActiveStorage에는 ActiveRecord가 필요하며 Mongoid와 함께 사용할 수 없습니다.
ActiveRecord 구성
모든 구성 파일(config/application.rb
, config/environments/{development,production.test}.rb
)을 검토하고 config.active_record
및 config.active_storage
에 대한 참조를 제거하거나 주석 처리합니다.
스프링 중지
애플리케이션에서 Rails 6 의 기본값인 Spring을 사용하는 경우 종속성 또는 구성을 변경한 후 Spring을 중지해야 합니다.
./bin/spring stop
참고
때때로 ./bin/spring stop
클레임을 실행 하면 Spring이 중지되지만 그렇지는 않습니다. 계속 진행하기 전에 모든 Spring 프로세스가 종료되었는지 확인합니다.
참고
애플리케이션 에 ActiveRecord 참조가 없는 경우에도 Spring이 ActiveRecord를 로드하려고 시도하는 경우가 있습니다. 이 경우 sqlite3
와 같은 ActiveRecord 어댑터 종속성을 Gemfile
에 추가하여 ActiveRecord가 완전히 로드되도록 하거나 애플리케이션 에서 Spring을 제거 할 수 있습니다.
Mongoid 구성
기본 Mongoid 구성을 생성합니다.
bin/rails g mongoid:config
이 생성기는 config/mongoid.yml
구성 파일(MongoDB 배포에 대한 연결을 구성하는 데 사용) 및 config/initializers/mongoid.rb
이니셜라이저 파일(다른 Mongoid 관련 구성에 사용될 수 있음)을 생성합니다. 일반적으로 모든 Mongoid 구성에는 mongoid.yml
를 사용하는 것이 좋습니다.
로컬에서 MongoDB 실행 및 MongoDB Atlas 사용 섹션을 검토하여 MongoDB 배포 방법을 결정하고 이에 맞게 Mongoid 구성(config/mongoid.yml
)을 조정합니다.
모델 조정
애플리케이션에 이미 모델이 있는 경우, ActiveRecord에서 Mongoid로 마이그레이션할 때 모델을 변경해야 합니다.
ActiveRecord 모델은 ApplicationRecord
에서 파생되며 컬럼 정의를 갖지 않습니다. Mongoid 모델에는 일반적으로 상위 클래스가 없지만 Mongoid::Document
를 포함해야 하며 일반적으로 필드를 명시적으로 정의합니다(그러나 명시적인 필드 정의 대신 동적 필드를 사용할 수도 있습니다).
예를 들어, ActiveRecord에서의 기본적인 Post 모델은 다음과 같을 수 있습니다:
class Post < ApplicationRecord has_many :comments, dependent: :destroy end
동일한 모델이 Mongoid에서는 다음과 같을 수 있습니다.
class Post include Mongoid::Document field :title, type: String field :body, type: String has_many :comments, dependent: :destroy end
또는 다음과 같이 동적 필드를 사용할 수 있습니다.
class Post include Mongoid::Document include Mongoid::Attributes::Dynamic has_many :comments, dependent: :destroy end
MongoDB는 데이터를 저장하기 전에 스키마를 정의할 필요가 없으므로 Mongoid는 ActiveRecord 마이그레이션을 활용하지 않습니다.
데이터 마이그레이션
관계형 데이터베이스에 이미 데이터가 있고 이를 MongoDB로 전송하고 싶다면, 데이터 마이그레이션을 수행해야 합니다. 위에서 언급한 것처럼 MongoDB는 데이터를 저장하기 위해 사전 정의된 스키마가 필요하지 않기 때문에 스키마 마이그레이션이 필요하지 않습니다.
Mongoid는 ActiveRecord 연결의 상위 집합을 지원하지만 모델 참조가 컬렉션에 저장되는 방식이 Mongoid와 ActiveRecord 간에 다르기 때문에 마이그레이션 도구는 마이그레이션 중인 데이터에만 적용되는 경우가 많습니다. 이와 관련하여 RDBMS에서 MongoDB로 마이그레이션하는 데 필요한 몇 가지 리소스(예: RDBMS에서 MongoDB로의 마이그레이션 가이드 및 현대화 가이드)를 제공합니다.
Rails API
Mongoid를 사용하여 Rails API 애플리케이션을 생성하는 프로세스는 일반 애플리케이션을 생성할 때와 동일하며 유일한 변경 사항은 rails new
에 --api
매개변수를 추가하는 것입니다. Rails API 애플리케이션을 Mongoid로 마이그레이션하는 과정 또한 위에서 설명한 일반 Rails 애플리케이션에 대한 과정과 동일합니다.
이 튜토리얼에서 설명하는 것과 유사한 완전한 Rails API 애플리케이션은 mongoid-demo GitHub 리포지토리에서 찾을 수 있습니다.