시작하기(레일즈 7)
이 페이지의 내용
참고
이 튜토리얼은 Ruby on Rails 7용입니다. 다른 버전을 사용하고 있는 경우 네비게이션 메뉴에서 사용 중인 Rails 버전에 적합한 튜토리얼을 선택하세요.
새 애플리케이션
이 섹션에서는 Mongoid ODM을 사용하여 새 Ruby on Rails 애플리케이션 생성 방법을 설명합니다. 데이터 액세스를 위해 Rails의 기본 ActiveRecord 어댑터를 MongoDB의 ORM과 유사한 라이브러리로 대체하여 Ruby on Rails 시작하기 가이드에 설명된 블로그 애플리케이션과 유사한 애플리케이션을 생성할 것입니다.
이 애플리케이션의 전체 소스 코드는 mongoid-demo Github 리포지토리 에서 확인할 수 있습니다. .
참고
이 가이드는 Ruby on Rails에 대한 기본 지식을 갖추고 있다고 가정합니다. Ruby on Rails에 대해 자세히 알아보려면 시작하기 가이드 를 참조하세요. 또는 기타 Rails 가이드를 참조하세요.
설치 rails
Rails 생성기를 사용하여 애플리케이션의 스켈레톤을 생성하겠습니다. 이를 위해 가장 먼저 할 일은 rails
gem을 설치하는 것입니다.
gem install rails -v 7.1
새 애플리케이션 만들기
다음과 같이 rails
명령을 사용하여 애플리케이션 스켈레톤을 만듭니다.
rails new blog --skip-active-record cd blog
여기에서는 대신 Mongoid를 사용할 예정이므로 ActiveRecord가 종속성으로 추가되지 않도록 요청하기 위해 --skip-active-record
를 전달합니다.
선택적으로 테스트 건너뛰기
RSpec으로 애플리케이션을 테스트하려는 경우 --skip-test
및 --skip-system-test
옵션을 전달하여 생성기가 기본 Rails 테스트 설정을 생략하도록 지시할 수 있습니다.
rails new blog --skip-active-record --skip-test --skip-system-test cd blog
Mongoid 설정
1. 를 수정하여 Gemfile
mongoid 에 대한 참조를 추가합니다. gem:
gem 'mongoid'
gem 종속성을 설치합니다.
bundle install
기본 Mongoid 구성을 생성합니다.
bin/rails g mongoid:config
이 생성기는 config/mongoid.yml
구성 파일(MongoDB 배포에 대한 연결을 구성하는 데 사용) 및 config/initializers/mongoid.rb
이니셜라이저 파일(다른 Mongoid 관련 구성에 사용될 수 있음)을 생성합니다. 여기서는 ActiveRecord를 사용하지 않으므로 database.yml
파일이 없습니다.
자체 관리형 MongoDB를 위한 구성
이전 단계에서 만든 구성은 MongoDB 서버가 로컬에서 실행 중일 때 적합합니다. 아직 로컬 MongoDB 서버가 없는 경우 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
애플리케이션 실행
이제 다음을 실행하여 애플리케이션 서버를 시작할 수 있습니다.
bin/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 include Mongoid::Timestamps field :title, type: String field :body, type: String has_many :comments, dependent: :destroy 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>
app/views/comments/_form.html.erb
를 열고 :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/view/comments/_comment.html.erb
를 다음 내용으로 변경합니다.
<p> <strong><%= comment.name %>:</strong> <%= comment.message %> <%= link_to 'Delete', [comment], data: { "turbo-method": :delete, "turbo-confirm": 'Are you sure?' } %> </p>
이제 게시글에 댓글을 남길 수 있습니다.
기존 애플리케이션
Mongoid는 기존 Rails 애플리케이션에 쉽게 추가할 수 있으며 다른 ActiveRecord 어댑터와 함께 실행할 수 있습니다. 이 사용 사례에 해당하는 경우, 종속성을 업데이트하고 구성 파일을 채우면 애플리케이션 내에서 MongoDB를 사용할 수 있습니다.
ActiveRecord 대신 Mongoid를 사용하도록 기존 Ruby on Rails 애플리케이션을 전환하려면 아래 설명된 대로 추가 구성 변경을 수행해야 합니다.
Dependencies
먼저, mongoid
gem을 Gemfile
에 추가해야 합니다.
gem 'mongoid'
Mongoid가 유일한 데이터베이스 어댑터인 경우 Gemfile
에 언급된 sqlite
또는 pg
와 같은 RDBMS 라이브러리를 제거하거나 주석 처리하세요.
gem 종속성을 설치합니다.
bundle install
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
)을 조정합니다.
로드된 프레임워크
config/application.rb
을 검사합니다. require 'rails/all'
을 통해 Rails의 모든 구성 요소가 요구한 경우 개별 프레임워크가 요구하도록 변경하세요. 사용 중인 버전에 대한 rails/all
의 내용을 확인하려면 Github 리포지토리를 참조하세요.
# Remove or comment out #require "rails/all" # Add the following instead of "rails/all": require "rails" # require "active_record/railtie" rescue LoadError # require "active_storage/engine" rescue LoadError require "action_controller/railtie" rescue LoadError require "action_view/railtie" rescue LoadError require "action_mailer/railtie" rescue LoadError require "active_job/railtie" rescue LoadError require "action_cable/engine" rescue LoadError # require "action_mailbox/engine" rescue LoadError # require "action_text/engine" rescue LoadError require "rails/test_unit/railtie" rescue LoadError
경고
ActionText, ActiveStorage 및 ActionMailbox는 ActiveRecord에 의존하기 때문에 Mongoid와 함께 사용할 수 없습니다.
ActiveRecord 구성
모든 구성 파일(config/application.rb
, config/environments/{development,production.test}.rb
)을 검토하고 config.active_record
및 config.active_storage
에 대한 참조를 제거하거나 주석 처리합니다.
모델 조정
애플리케이션에 이미 모델이 있는 경우, 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 간에 다르기 때문에 마이그레이션 도구는 마이그레이션되는 데이터에만 적용되는 경우가 많습니다. 이와 관련하여 MongoDB는 RDBMS에서 MongoDB로 마이그레이션하는 데 필요한 몇 가지 리소스(예: RDBMS에서 MongoDB로 마이그레이션 가이드 )를 제공합니다. 및 현대화 가이드 .
Rails API
Mongoid를 사용하여 Rails API 애플리케이션을 생성하는 프로세스는 일반 애플리케이션을 생성할 때와 동일하며 유일한 변경 사항은 rails new
에 --api
매개변수를 추가하는 것입니다. Rails API 애플리케이션을 Mongoid로 마이그레이션하는 과정 또한 위에서 설명한 일반 Rails 애플리케이션에 대한 과정과 동일합니다.
이 튜토리얼에서 설명하는 것과 유사한 완전한 Rails API 애플리케이션은 mongoid-demo GitHub 리포지토리에서 찾을 수 있습니다.