Computer >> 컴퓨터 >  >> 프로그램 작성 >> Ruby

하위 도메인이 있는 다중 테넌트 Ruby on Rails 앱 빌드

다중 테넌트의 정의에 따르면 앱이 여러 테넌트에 서비스를 제공한다는 것은 소프트웨어 인스턴스에 대한 공통 액세스를 공유하는 소수의 사용자 그룹이 있음을 의미합니다. 멀티테넌시를 지원하는 앱의 훌륭한 예는 각 회사가 소프트웨어에 액세스할 수 있는 하위 도메인이 있는 Jira 플랫폼입니다(예:mycompany.atlassian.net). .

이 기사에서는 다중 테넌트의 이론적 측면과 실제 측면 모두에 익숙해질 것입니다. 애플리케이션에서 여러 테넌트에 대한 지원을 구현하기 위한 몇 가지 인기 있는 접근 방식에 대해 논의한 후 Rails 애플리케이션에서 그 중 두 가지를 구현하는 방법을 보여 드리겠습니다. 각 테넌트에 하위 도메인이 있는 여러 테넌트가 있는 간단한 앱을 함께 구축합니다.

이 기사를 읽고 나면 다음을 수행할 수 있습니다.

  • 다양한 유형의 다중 테넌트 앱에 대해 논의하고 주어진 접근 방식이 올바른 선택인지 알려줍니다.
  • 여러 테넌트를 지원하는 Ruby on Rails 애플리케이션을 만들고
  • Ruby on Rails 애플리케이션 내에서 고객을 위한 맞춤형 하위 도메인을 사용합니다.

Rails에 대한 기본 지식은 이 문서를 따르고 그 혜택을 최대한 활용하는 데 필요합니다.

이론상의 다중 테넌트

앞서 언급했듯이 앱 기능에 대한 공통 액세스를 공유하는 소수의 사용자 그룹에 서비스를 제공할 때 앱이 다중 테넌트를 지원한다고 말할 수 있습니다. 이러한 앱의 좋은 예는 모든 사용자가 기본 도메인에서 별도의 하위 도메인을 얻는 블로깅 플랫폼입니다. 각 블로그에는 하위 도메인이 있지만 댓글, 기사 및 관리 대시보드와 같은 다른 블로그와 동일한 기능을 공유합니다.

다중 테넌트 앱이 표면적으로 유사하게 작동하는 것처럼 보일 수 있지만 내부적으로 다양한 유형의 다중 테넌트 아키텍처를 구현할 수 있습니다. 가장 인기 있고 효율적인 유형을 살펴보겠습니다.

데이터베이스 행 수준

애플리케이션에서 여러 데이터베이스를 사용하지 않으려면 하나의 중앙 데이터베이스에서 작동하는 접근 방식을 선택할 수 있습니다. 데이터베이스의 각 테이블은 tenant_id로 구성됩니다. 지정된 테넌트에 속하는 데이터를 가져오기 위해 애플리케이션 내에서 수행되는 모든 쿼리에 사용되는 열입니다.

이러한 구조에서 테넌트의 설정 시간이 빠르고 추가 비용이 없으며 이 변형의 구현이 모든 곳에서 가능합니다. 그러나 쿼리에 테넌트의 ID를 포함하는 것을 잊어버리면 데이터 유출로 이어질 수 있으므로 주의해야 합니다. 데이터베이스 구조 수정은 주어진 사용자 그룹에 대해 유지 관리하기 어려울 수 있으므로 이러한 단점을 염두에 두어야 합니다.

스키마 수준

여전히 하나의 중앙 데이터베이스를 가질 수 있지만 각 테넌트에 대해 별도의 테이블과 스키마가 있습니다. 데이터베이스 행 수준 접근 방식과 달리 테넌트 간에 전환할 때 쿼리를 수정하는 대신 테이블에 대한 검색 경로를 변경해야 합니다. PostgreSQL에서는 search_path 세트를 사용할 수 있습니다. 문, MySQL에서는 사용 스키마 사이를 전환하는 문입니다.

이 접근 방식을 선택하기 전에 DB 서버에서 언급된 명령문을 사용할 수 있는지 확인하십시오. 또한 새 테넌트를 추가하는 것은 데이터베이스에 새 스키마를 만들고 테이블을 만들어야 하므로 상대적으로 느립니다.

데이터베이스 수준

애플리케이션에 새 테넌트를 추가할 때마다 새 데이터베이스 비용을 감당할 수 있다면 이 접근 방식이 적합할 수 있습니다. 이 접근 방식은 새 테넌트를 추가할 때 논의된 모든 아키텍처 중에서 가장 느립니다.

다른 테넌트로 전환하려면 데이터베이스에 대한 새로운 연결을 설정해야 하기 때문에 데이터 유출로 이어질 가능성이 가장 높습니다. 원하는 경우 모든 사용자 그룹의 데이터베이스 구조를 쉽게 수정할 수도 있습니다.

애플리케이션 스켈레톤 생성

하나는 하나의 데이터베이스에서 지원하는 다중 테넌시와 다른 하나는 여러 데이터베이스에서 지원하는 다중 테넌시를 가진 두 개의 개별 응용 프로그램을 만듭니다. 여러 테넌트를 처리하는 다른 접근 방식을 나타내지만 구성 단계는 동일합니다.

Ruby의 최신 버전은 이 기사를 작성하는 현재 Ruby on Rails gem의 2.7.2 및 6.1 RC1입니다. 시스템에 올바른 버전의 Ruby가 설치되어 있는지 확인하고 올바른 버전의 프레임워크를 설치해 보십시오.

gem install rails -v 6.1.0.rc1

이제 다음 명령을 사용하여 프로젝트 파일을 생성할 수 있습니다.

rails _6.1.0.rc1_ new tenantapp -d=mysql

프로젝트 디렉토리를 입력하고 서버를 실행한 다음 계속할 수 있도록 시작 화면이 표시되는지 확인합니다.

cd tenantapp/
rails s

하나의 데이터베이스가 있는 다중 테넌트 Rails 애플리케이션

코딩할 시간입니다. 기사의 이 부분에서는 Rails 애플리케이션에서 다중 테넌트를 구현하는 방법을 보여줍니다. 하나의 데이터베이스와 하나의 스키마로 접근 방식을 사용할 것입니다.

계획은 다음과 같습니다:

  • 사용 가능한 최신 버전의 Ruby 및 Ruby on Rails 프레임워크를 사용하여 Rails 애플리케이션의 골격을 생성합니다.
  • 운영할 수 있는 데이터를 얻기 위해 일부 모델을 비계할 것입니다.
  • 이전 단계에서 생성한 기능에 애플리케이션의 데이터베이스 테이블 및 코드를 업데이트하여 다중 테넌트 지원을 추가합니다.
  • 마지막 단계는 사용자가 테넌트에 쉽게 액세스할 수 있도록 사용자 지정 하위 도메인에 대한 지원을 추가하는 것입니다.
  • 나중에 직접 구현할 수 있는 몇 가지 기능에 대한 아이디어를 탐색할 것입니다.

테스트 데이터 준비

사용자가 여러 작성자가 게시한 기사를 볼 수 있는 블로그 플랫폼을 구축하고 있다고 가정해 보겠습니다.

먼저 작성자 데이터를 저장할 작성자 모델을 생성하겠습니다.

rails g scaffold author slug:string name:string description:string
rake db:create
rake db:migrate

이제 https://localhost:3000/authors 주소를 방문하여 나중에 기사에 할당할 수 있도록 몇 명의 저자를 추가할 수 있습니다.

다음 단계는 기사를 만드는 것입니다.

rails g scaffold article title:string content:text
rake db:migrate

다중 테넌트 지원 추가

우리가 만들고 있는 응용 프로그램에서 작성자는 테넌트입니다. 각 저자는 자신의 기사에만 액세스할 수 있어야 합니다. 앞에서 언급했듯이 하나의 데이터베이스와 하나의 스키마에서 다중 테넌트 지원을 구현하려는 경우 중요한 요구 사항은 tenant_id를 추가하는 것입니다. 테넌트가 관리할 모든 모델에 대한 필드입니다.

데이터베이스에서 적절한 마이그레이션 생성

rails g migration AddTenantIdToArticle tenant_id:integer
rake db:migrate

위의 마이그레이션은 문서에 새 열을 추가합니다. 모델. 이 열은 모든 쿼리에서 현재 테넌트에 할당된 액세스 권한만 가져오는 데 사용됩니다.

세입자에게 기사 할당

이 단계에서는 주어진 작성자를 기사에 할당하고 나중에 선택한 작성자에 대해서만 기사를 렌더링할 수 있도록 코드를 업데이트하겠습니다. app/controllers/articles_controller.rb를 엽니다. 다음 변경 사항을 추가하십시오.

class ArticlesController < ApplicationController
 before_action :set_article, only: [:show, :edit, :update, :destroy]
 before_action :set_authors, only: [:edit, :update, :new, :create]
 
 # ...
 
 private
   # Only allow a list of trusted parameters through.
   def article_params
     params.require(:article).permit(:title, :content, :tenant_id)
   end
 
   def set_authors
     @authors = Author.all
   end
end

이제 @authors를 사용할 수 있습니다. 앱에 추가된 작성자 컬렉션을 포함하는 변수입니다. 이제 작성자 이름을 포함하는 선택 필드를 추가하고 적절한 tenant_id를 할당할 수 있습니다. . app/views/articles/_form.html.erb를 엽니다. 다음 섹션을 추가하십시오.

<div className="field">
 <%= form.label :author %>
 <%= form.select :tenant_id, options_from_collection_for_select(@authors, 'id', 'name', article.tenant_id), include_blank: true %>
</div>

계속해서 몇 명의 작성자를 만든 다음 몇 개의 기사를 만들어 나중에 지정된 작성자에게만 할당된 기사를 렌더링합니다.

사용자 지정 하위 도메인에 대한 지원 추가

John Doe라는 이름으로 작성자를 만들고 슬러그 값을 johndoe로 설정했습니다. . 우리의 목표는 https://johndoe.localhost:3000/ 주소를 방문하여 이 경우 지정된 테넌트 John Doe와 관련된 데이터만 보는 것입니다.

하위 도메인 구성

임차인이 정해지면 기사를 관리하고 방문하고 싶습니다. config/routes.rb를 업데이트하여 이를 달성할 수 있습니다. 파일 및 기사 리소스 정의를 제약 조건 블록에 래핑:

Rails.application.routes.draw do
 constraints subdomain: /.*/ do
   resources :articles
 end
 
 resources :authors
end

기본적으로 Rails는 최상위 도메인 길이를 1로 설정하지만 localhost를 사용하여 이 설정을 0으로 설정하려고 합니다. config/environments/development.rb<파일에 다음 줄을 추가하면 됩니다. /코드> :

config.action_dispatch.tld_length = 0

다중 테넌시와 함께 작동하는 하위 도메인 만들기

이제 기사에 작성자를 지정할 수 있습니다. 하위 도메인을 사용하는 경우에는 불가능합니다. ArticlesController의 동작을 변경해야 합니다. , 모든 작성자를 설정하는 대신 하위 도메인이 요청된 작성자를 설정해야 합니다.

 
class ArticlesController < ApplicationController
 before_action :set_author
 before_action :set_article, only: [:show, :edit, :update, :destroy]
 
 # GET /articles
 # GET /articles.json
 def index
   @articles = Article.where(tenant_id: @author.id)
 end
 
 # ...
 
 private
   def set_article
     @article = Article.find_by!(id: params[:id], tenant_id: @author.id)
   end
 
   # ...
 
   def set_author
     @author = Author.find_by!(slug: request.subdomain)
   end
end

컨트롤러를 몇 가지 변경했습니다.

  • set_authors 대신 메소드에서 set_author를 정의했습니다. 하위 도메인을 통해 요청한 작성자를 설정하는 메서드입니다. before_filter에서 이 메서드를 호출하는 것이 중요합니다. set_article 앞에 라고 합니다. 기사를 설정하기 전에 작성자를 지정해야 합니다.
  • set_article을 업데이트했습니다. 주어진 id와 지정된 저자로 기사를 찾는 메소드. 현재 테넌트가 John인 동안 Tom이 만든 기사를 렌더링하고 싶지 않습니다.
  • 현재 테넌트에 할당된 기사만 선택하도록 색인 작업을 업데이트했습니다.

다중 테넌트 앱에서 작업하고 하나의 스키마로 하나의 데이터베이스를 사용할 때 항상 tenant_id로 쿼리 범위를 지정해야 한다는 것을 기억해야 합니다. 열; 그렇지 않으면 요청한 테넌트에 할당되지 않은 데이터를 제공하게 됩니다.

컨트롤러가 업데이트되었으므로 다음 단계는 양식 보기를 업데이트하는 것입니다. app/views/articles/_form.html.erb를 엽니다. 파일을 만들고 이전 섹션을 간단한 숨겨진 필드로 바꿉니다.

<%= form.hidden_field :tenant_id, value: @author.id %>

이러한 변경 이전에는 사용자가 양식을 사용하여 기사 작성자를 선택할 수 있었습니다. 사용자는 웹사이트 주소에서 주어진 하위 도메인을 사용하여 모든 작업에 대한 작성자를 선택할 수 있습니다.

이제 우리가 만든 코드를 테스트할 수 있습니다. 예를 들어 이름이 John Doe이고 슬러그가 johndoe인 새 작성자를 만듭니다. . https://johndoe.localhost:3000/articles/new address를 방문하여 새 기사를 추가하십시오. 새 기사를 추가한 후 https://johndoe.localhost:3000/articles에서 사용할 수 있는 목록에서 볼 수 있습니다.

축하합니다! 각 작성자에 하위 도메인이 있는 다중 테넌트 앱을 만들었습니다.

추가 개선 사항

이제 새로운 기능을 추가하여 애플리케이션의 코드를 확장할 수 있습니다. 우리 블로그 플랫폼은 간단합니다. 댓글 섹션을 추가해야 할 때인가요? 어떤 기능을 추가하든지 tenant_id를 추가해야 합니다. 열을 새 모델에 추가하고 리소스를 쿼리할 때 사용합니다.

특별한 범위를 만들어 우려 사항에 래핑할 수 있습니다.

module Tenantable
 extend ActiveSupport::Concern
 
 included do
   scope :for_author, -> (author) { where(tenant_id: author.id) }
 end
end

테넌트에 대한 데이터가 포함된 모든 모델에서 사용:

class Article < ApplicationRecord
 include Tenantable
end
 
author = Author.find(1)
Article.for_author(author)

위의 접근 방식을 사용하면 tenant_id의 이름을 변경하는 경우 한 곳만 업데이트하면 됩니다. 열 또는 테넌트 관련 데이터 쿼리와 관련하여 더 많은 조건을 도입합니다.

여러 데이터베이스가 있는 다중 테넌트 Rails 애플리케이션

이전 단락에서 우리는 하나의 데이터베이스와 하나의 스키마로 여러 테넌트를 지원하는 Rails 애플리케이션을 구축했습니다. 이러한 접근 방식의 가장 큰 단점은 데이터 유출 가능성이 높다는 것입니다.

좋은 소식은 최신 버전의 Ruby on Rails 프레임워크에 여러 데이터베이스 관리를 지원하는 기능이 내장되어 있다는 것입니다. 이를 탐색하고 이를 사용하여 수많은 데이터베이스와 사용자 지정 하위 도메인이 있는 다중 테넌트 Rails 애플리케이션을 구축하는 방법을 보여 드리겠습니다.

계획은 다음과 같습니다:

  • 사용 가능한 최신 버전의 Ruby 및 Ruby on Rails 프레임워크를 사용하여 Rails 애플리케이션의 골격을 생성합니다.
  • 운영할 수 있는 데이터를 얻기 위해 일부 모델을 비계할 것입니다.
  • 맞춤 하위 도메인에 대한 지원을 추가할 예정입니다.
  • 새 데이터베이스를 만들고 구성하여 새 테넌트를 추가하는 방법을 배웁니다.
  • 마지막 단계는 지정된 하위 도메인이 요청될 때 데이터베이스를 전환하도록 애플리케이션을 업데이트하는 것입니다.

테스트 데이터 준비

사용자가 여러 작성자가 게시한 기사를 볼 수 있는 블로그 플랫폼을 구축하고 있다고 가정해 보겠습니다. 각 저자는 전용 데이터베이스를 갖게 됩니다.

작성자 생성부터 시작 새로운 저자를 보고 생성하는 데 도움이 되는 스캐폴딩 기능과 함께 모델:

rails g scaffold author slug:string name:string description:string
rake db:create
rake db:migrate

이제 https://localhost:3000/authors를 방문하여 Rails가 우리를 위해 생성한 것을 볼 수 있습니다.

새 저자 추가

John Doe라는 이름과 슬러그 johndoe로 새 작성자를 만들었습니다. . 슬러그 값은 나중에 하위 도메인을 사용하여 정보를 표시해야 하는 작성자를 감지하는 데 사용됩니다.

각 작성자는 별도의 데이터베이스를 가지므로 John에 대한 새 데이터베이스를 수동으로 추가해야 합니다. config/database.yml 열기 다음 변경 사항을 추가하십시오.

development:
 primary:
   <<: *default
   database: tenantapp_development
 primary_johndoe:
   <<: *default
   database: tenantapp_johndoe_development
   migrations_paths: db/tenants_migrations

테넌트가 사용하는 마이그레이션에는 별도의 디렉터리를 사용할 것입니다. 중앙 데이터베이스에는 필요하지 않습니다. 이제 기본 명령을 사용하여 John에 대한 데이터베이스를 만들 수 있습니다.

rake db:create

기사 추가

이제 Article을 스캐폴딩할 수 있습니다. 컨트롤러 및 뷰와 함께 모델:

rails g scaffold article title:string content:text --database primary_johndoe

--database를 전달했습니다. 마이그레이션이 기본 db/migrations에 배치되어서는 안 된다는 것을 Rails에 알리는 param 기본 데이터베이스에서 사용하는 디렉토리. 이제 마이그레이션 명령을 실행할 수 있습니다.

rake db:migrate

현재 두 개의 스키마가 있습니다. db/schema.rbdb/primary_johndoe_schema.rb . 테넌트에 대해 다른 테이블을 생성하려는 경우 고유한 migrations_path를 설정하여 이를 수행할 수 있습니다. config/database.yml의 값 지정된 테넌트에 대한 파일입니다. 이 문서에서는 모든 테넌트에 대해 동일한 테이블을 사용하므로 마이그레이션 경로가 동일합니다.

멀티 테넌시 지원 추가

하나의 데이터베이스에서 멀티 테넌시를 지원하는 애플리케이션에서 주어진 테넌트에 대한 데이터를 얻으려면 적절한 tenant_id로 데이터베이스에 대한 쿼리를 업데이트하기만 하면 됩니다. 값. 우리의 경우 테넌트마다 데이터베이스가 있으므로 데이터베이스 간에 전환해야 합니다.

Rails 6.1은 수평 분할을 기본적으로 지원합니다. 샤드는 전체 데이터 세트의 하위 집합을 포함하는 수평 데이터 파티션입니다. 우리는 하나의 데이터베이스에 있는 하나의 테이블에 모든 저자의 기사를 저장할 수 있지만 샤딩 덕분에 데이터를 동일한 구조를 가진 여러 테이블로 분할할 수 있지만 별도의 데이터베이스에 배치할 수 있습니다.

모든 모델의 부모 클래스에서 샤드를 정의합시다. app/models/application_record.rb 아래에 저장됩니다. :

ActiveRecord::Base.connected_to(role: :reading, shard: :johndoe) do
  Article.all # get all articles created by John
end

호출을 connected_to로 래핑하지 않고 블록, 기본 샤드가 사용됩니다. 계속 진행하기 전에 변경 사항을 하나 더 도입해야 합니다. 모든 샤드가 동일한 데이터 구조를 공유하므로 app/models/primary_johndoe_record.rb를 삭제할 수 있습니다. 기사를 스캐폴딩할 때 자동으로 생성된 모델입니다.

app/models/article.rb도 수정해야 합니다. 모델을 만들고 PrimaryJohndoeRecord에서 상위 클래스를 변경합니다. ApplicationRecord로 :

class Article < ApplicationRecord
end

테넌트 추가

현재 우리 데이터베이스에는 저자가 한 명뿐입니다. 테넌트(데이터베이스) 간 전환 기능을 테스트하려면 작성자를 한 명 더 추가해야 합니다. https://localhost:3000/authors/new address를 열고 새로운 저자를 추가합니다. Tim Doe라는 이름과 슬러그 timdoe로 작성자를 추가했습니다. .

새 작성자에 대한 레코드가 있으므로 새 데이터베이스를 정의해야 합니다.

development:
 primary:
   <<: *default
   database: tenantapp_development
 primary_johndoe:
   <<: *default
   database: tenantapp_johndoe_development
   migrations_paths: db/tenants_migrations
 primary_timdoe:
   <<: *default
   database: tenantapp_timdoe_development
   migrations_paths: db/tenants_migrations

이제 새 데이터베이스를 만들고 마이그레이션을 실행합니다.

rake db:create
rake db:migrate

마지막 단계는 ApplicationRecord를 업데이트하는 것입니다. 새 샤드를 모델링하고 정의합니다.

class ApplicationRecord < ActiveRecord::Base
 self.abstract_class = true
 
 connects_to shards: {
   default: { writing: :primary, reading: :primary },
   johndoe: { writing: :primary_johndoe, reading: :primary_johndoe },
   timdoe: { writing: :primary_timdoe, reading: :primary_timdoe },
 }
end

이제 각 작성자에 대한 기사를 작성할 수 있습니다.

ActiveRecord::Base.connected_to(role: :writing, shard: :johndoe) do
  Article.create!(title: 'Article from John', content: 'content')
end
 
ActiveRecord::Base.connected_to(role: :writing, shard: :timdoe) do
  Article.create!(title: 'Article from Tim', content: 'content')
end

사용자 지정 하위 도메인에 대한 지원 추가

John과 Tim의 기사를 언제 표시해야 할지 모르기 때문에 아직 주어진 저자의 기사 목록을 방문할 수 없습니다. 사용자 지정 하위 도메인을 구현하여 이 문제를 해결할 것입니다. https://johndoe.localhost:3000/articles를 방문하면 John의 기사를 볼 수 있고 https://timedoe.localhost:3000/articles를 방문하면 Tim의 기사를 볼 수 있습니다.

하위 도메인 구성

임차인이 정해지면 기사를 관리하고 방문하고 싶습니다. config/routes.rb를 업데이트하여 이를 달성할 수 있습니다. 파일 및 기사 리소스 정의를 제약 조건 블록에 래핑:

Rails.application.routes.draw do
 constraints subdomain: /.*/ do
   resources :articles
 end
 
 resources :authors
end

기본적으로 Rails는 최상위 도메인 길이를 1로 설정하지만 localhost를 사용하여 이 설정을 0으로 설정하려고 합니다. config/environments/development.rb<파일에 다음 줄을 추가하면 됩니다. /코드> :

config.action_dispatch.tld_length = 0

다중 테넌시와 함께 작동하는 하위 도메인 만들기

현재 테넌트에 대한 데이터베이스 읽기를 표준화하기 위해 Tenantable이라는 컨트롤러 문제를 생성하겠습니다. . read_with_tenant를 제공합니다. 블록을 수락하고 요청된 테넌트의 컨텍스트에서 실행하는 메서드:

module Tenantable
 extend ActiveSupport::Concern
 
 private
 
 def read_with_tenant(&block)
   author = Author.find_by!(slug: request.subdomain)
 
   ActiveRecord::Base.connected_to(role: :reading, shard: author.slug.to_sym) do
     block.call
   end
 end
end

이 파일을 app/controllers/concerns/tenantable.rb로 저장합니다. ArticlesController에 포함 :

class ArticlesController < ApplicationController
 include Tenantable
 
 before_action :set_article, only: [:show, :edit, :update, :destroy]
 
 def index
   read_with_tenant do
     @articles = Article.all
   end
 end
 # ...
end

이제 https://johndoe.localhost:3000/articles 또는 https://timdoe.localhost:3000/articles를 방문하면 목록에 다른 기사가 표시되는 것을 볼 수 있습니다.

양식을 사용하여 새 기사를 작성하려면 write_with_tenant라는 새 메소드를 정의해야 합니다. ArticlesController 내부의 Tenantable 문제 및 메서드 업데이트 따라서.

추가 개선 사항

위에 제시된 접근 방식은 데이터베이스에 대한 주어진 연결 내에서 블록으로 래핑된 코드를 실행하는 단순한 래퍼 메서드입니다. 더 보편적으로 만들기 위해 하위 도메인을 구문 분석하고 코드를 실행하기 전에 연결을 설정하는 미들웨어를 만들 수 있습니다.

ActiveRecord::Base.establish_connection(:primary_timdoe)

최종 솔루션은 귀하의 요구 사항과 특정 테넌트에 할당된 데이터를 사용하려는 장소의 수에 따라 다릅니다.

요약

축하합니다. 멀티 테넌트 Rails 애플리케이션의 두 가지 버전을 구축하고 최신 웹 애플리케이션에서 여러 테넌트를 처리하는 다양한 방법에 대한 지식을 얻었습니다.

이 기사에서 배운 내용을 간단히 요약해 보겠습니다.

  • 웹 애플리케이션에는 데이터베이스 행, 스키마 및 데이터베이스 수준의 세 가지 기본 다중 테넌시 수준이 있습니다.
  • 각 접근 방식에는 장단점이 있으며 하드웨어 가능성과 테넌트 정보의 격리 수준에 따라 선택이 달라집니다.
  • 외부 라이브러리 없이 Ruby on Rails 프레임워크 내에서 모든 다중 테넌시 수준을 구현할 수 있습니다.
  • Ruby on Rails는 기본적으로 사용자 지정 하위 도메인을 지원하므로 각 테넌트에 하위 도메인을 할당할 수 있는 멀티 테넌트 애플리케이션에 완벽한 추가 기능입니다.

이 기사를 읽고 다중 테넌트 Ruby on Rails 애플리케이션을 구축하는 데 도움이 되었기를 바랍니다.

추신 Ruby Magic 게시물이 언론에 공개되는 즉시 읽고 싶다면 Ruby Magic 뉴스레터를 구독하고 게시물을 놓치지 마세요!