Docs Menu

Docs Home몽고이드

시작하기(레일즈 6)

이 페이지의 내용

  • 새 애플리케이션
  • 설치 rails
  • 새 애플리케이션 만들기
  • Git 리포지토리 만들기
  • Mongoid 추가
  • 로컬에서 MongoDB 실행
  • MongoDB Atlas 사용
  • 기타 Rails 종속성
  • 애플리케이션 실행
  • 게시글 추가
  • 댓글 추가
  • 기존 애플리케이션
  • Dependencies
  • 로드된 프레임워크
  • ActiveRecord 구성
  • 스프링 중지
  • Mongoid 구성
  • 모델 조정
  • 데이터 마이그레이션
  • Rails API

참고

이 튜토리얼은 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 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 init .
git add .
git commit

이 튜토리얼을 따라하면서 변경 사항을 커밋합니다.

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

Gemfile
gem 'mongoid'

참고

Rails 6.0 을(를) 사용하려면 Mongoid 7.0.5 이상이 필요합니다.

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

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

bin/rails g mongoid:config

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

이전 단계에서 생성된 구성은 MongoDB Server가 로컬로 실행될 때 적합합니다. 아직 로컬 MongoDB Server가 없는 경우, 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

첫 번째 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 연관 관계를 추가합니다.

app/models/post.rb
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 로 변경합니다.

앱/models/comment.rb
class Comment
include Mongoid::Document
field :name, type: String
field :message, type: String
belongs_to :post
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>

댓글 양식 파일을 열고 :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/views/comments/_comment.html.erb 를 만듭니다.

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 애플리케이션 을 전환하려면 다음 단계를 따르세요.

Gemfile 에 언급된 sqlite, pg 등과 같은 RDBMS 라이브러리를 제거하거나 주석 처리하고 mongoid 을 추가합니다.

Gemfile
gem 'mongoid'

참고

Rails 6.0 을(를) 사용하려면 Mongoid 7.0.5 이상이 필요합니다.

gem 종속성을 설치합니다.

bundle install

config/application.rb 검사합니다. require 'rails/all' 을 통해 Rails의 모든 구성 요소가 필요한 경우 개별 프레임워크가 필요하도록 변경합니다.

config/application.rb
# 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와 함께 사용할 수 없습니다.

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

애플리케이션에서 Rails 6 의 기본값인 Spring을 사용하는 경우 종속성 또는 구성을 변경한 후 Spring을 중지해야 합니다.

./bin/spring stop

참고

때때로 ./bin/spring stop 클레임을 실행 하면 Spring이 중지되지만 그렇지는 않습니다. 계속 진행하기 전에 모든 Spring 프로세스가 종료되었는지 확인합니다.

참고

애플리케이션 에 ActiveRecord 참조가 없는 경우에도 Spring이 ActiveRecord를 로드하려고 시도하는 경우가 있습니다. 이 경우 sqlite3 와 같은 ActiveRecord 어댑터 종속성을 Gemfile 에 추가하여 ActiveRecord가 완전히 로드되도록 하거나 애플리케이션 에서 Spring을 제거 할 수 있습니다.

기본 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 모델은 다음과 같을 수 있습니다:

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 간에 다르기 때문에 마이그레이션 도구는 마이그레이션 중인 데이터에만 적용되는 경우가 많습니다. 이와 관련하여 RDBMS에서 MongoDB로 마이그레이션하는 데 필요한 몇 가지 리소스(예: RDBMS에서 MongoDB로의 마이그레이션 가이드현대화 가이드)를 제공합니다.

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

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

←  시작하기(레일즈 7)문서 →