Docs Menu
Docs Home
/ / /
몽고이드
/

시작하기(레일즈 7)

이 페이지의 내용

  • 새 애플리케이션
  • 설치 rails
  • 새 애플리케이션 만들기
  • Mongoid 설정
  • 애플리케이션 실행
  • 게시글 추가
  • 댓글 추가
  • 기존 애플리케이션
  • Dependencies
  • Mongoid 구성
  • 로드된 프레임워크
  • ActiveRecord 구성
  • 모델 조정
  • 데이터 마이그레이션
  • Rails API

참고

이 튜토리얼은 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 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

1. 를 수정하여 Gemfile mongoid 에 대한 참조를 추가합니다. gem:

Gemfile
gem 'mongoid'
  1. gem 종속성을 설치합니다.

bundle install
  1. 기본 Mongoid 구성을 생성합니다.

bin/rails g mongoid:config

이 생성기는 config/mongoid.yml 구성 파일(MongoDB 배포에 대한 연결을 구성하는 데 사용) 및 config/initializers/mongoid.rb 이니셜라이저 파일(다른 Mongoid 관련 구성에 사용될 수 있음)을 생성합니다. 여기서는 ActiveRecord를 사용하지 않으므로 database.yml 파일이 없습니다.

이전 단계에서 만든 구성은 MongoDB 서버가 로컬에서 실행 중일 때 적합합니다. 아직 로컬 MongoDB 서버가 없는 경우 MongoDB를 다운로드하여 설치 합니다.

생성된 mongoid.yml 파일은 수정 없이 작동하지만, 개발을 위해 서버 선택 타임아웃을 줄이는 것이 좋습니다. 이렇게 변경하면 mongoid.yml의 주석 처리되지 않은 줄은 다음과 같이 표시됩니다.

development:
clients:
default:
database: blog_development
hosts:
- localhost:27017
options:
server_selection_timeout: 1

로컬에서 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 연관 관계를 추가합니다.

app/models/post.rb
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를 열고 기존 댓글을 렌더링하고 새 댓글을 남기라는 메시지를 표시하는 섹션을 추가합니다.

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로 변경합니다. 결과는 다음과 같아야 합니다.

app/views/comments/_form.html.erb
<%= 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를 다음 내용으로 변경합니다.

app/views/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 애플리케이션을 전환하려면 아래 설명된 대로 추가 구성 변경을 수행해야 합니다.

먼저, mongoid gem을 Gemfile에 추가해야 합니다.

Gemfile
gem 'mongoid'

Mongoid가 유일한 데이터베이스 어댑터인 경우 Gemfile에 언급된 sqlite 또는 pg와 같은 RDBMS 라이브러리를 제거하거나 주석 처리하세요.

gem 종속성을 설치합니다.

bundle install

기본 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 리포지토리를 참조하세요.

config/application.rb
# 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, ActiveStorageActionMailbox는 ActiveRecord에 의존하기 때문에 Mongoid와 함께 사용할 수 없습니다.

모든 구성 파일(config/application.rb, config/environments/{development,production.test}.rb)을 검토하고 config.active_recordconfig.active_storage에 대한 참조를 제거하거나 주석 처리합니다.

애플리케이션에 이미 모델이 있는 경우, ActiveRecord에서 Mongoid로 마이그레이션할 때 모델을 변경해야 합니다.

ActiveRecord 모델은 ApplicationRecord에서 파생되며 컬럼 정의를 갖지 않습니다. Mongoid 모델에는 일반적으로 상위 클래스가 없지만 Mongoid::Document를 포함해야 하며 일반적으로 필드를 명시적으로 정의합니다(그러나 동적 필드를 사용할 수도 있습니다).

예를 들어, ActiveRecord에서의 기본적인 Post 모델은 다음과 같을 수 있습니다:

app/models/post.rb
class Post < ApplicationRecord
has_many :comments, dependent: :destroy
end

동일한 모델이 Mongoid에서는 다음과 같을 수 있습니다.

app/models/post.rb
class Post
include Mongoid::Document
field :title, type: String
field :body, type: String
has_many :comments, dependent: :destroy
end

또는 다음과 같이 동적 필드를 사용할 수 있습니다.

app/models/post.rb
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로 마이그레이션 가이드 )를 제공합니다. 및 현대화 가이드 .

Mongoid를 사용하여 Rails API 애플리케이션을 생성하는 프로세스는 일반 애플리케이션을 생성할 때와 동일하며 유일한 변경 사항은 rails new--api 매개변수를 추가하는 것입니다. Rails API 애플리케이션을 Mongoid로 마이그레이션하는 과정 또한 위에서 설명한 일반 Rails 애플리케이션에 대한 과정과 동일합니다.

이 튜토리얼에서 설명하는 것과 유사한 완전한 Rails API 애플리케이션은 mongoid-demo GitHub 리포지토리에서 찾을 수 있습니다.

돌아가기

시작하기(시나트라)