루비온레일즈에서의 DB명명규칙

GarionNachal·2025년 5월 12일
0

JAVA, Springboot

목록 보기
6/6
post-thumbnail

루비온레일즈와 액티브 레코드

루비온레일즈(Ruby on Rails)는 웹 애플리케이션 개발을 위한 강력한 프레임워크로, 생산성을 극대화하기 위해 다양한 관례를 따릅니다. 그중에서도 액티브 레코드(Active Record)는 루비온레일즈의 ORM(Object-Relational Mapping) 시스템으로, 데이터베이스의 테이블과 루비 객체 사이의 매핑을 관리합니다.

액티브 레코드는 마틴 파울러(Martin Fowler)가 정의한 디자인 패턴을 기반으로 하며, "데이터베이스 테이블의 행을 래핑하고, 데이터베이스 접근을 캡슐화하며, 해당 데이터에 도메인 로직을 추가하는 객체"로 설명됩니다. 이 패턴을 통해 개발자는 SQL 쿼리를 직접 작성하지 않고도 데이터베이스와 상호작용할 수 있습니다.

구성보다 관례 (Convention over Configuration)

루비온레일즈의 핵심 철학 중 하나는 "구성보다 관례"(Convention over Configuration)입니다. 이 원칙에 따라 개발자가 명시적으로 설정을 하지 않아도, 프레임워크가 기본적인 관례를 따라 많은 부분을 자동으로 처리해줍니다.

데이터베이스 명명규칙도 이러한 관례 중 하나입니다. 이 관례를 따르면 별도의 설정 없이도 루비 클래스와 데이터베이스 테이블을 자동으로 매핑할 수 있습니다. 그러나 필요한 경우 이러한 규칙을 재정의할 수도 있습니다.

데이터베이스 명명 규칙

테이블 이름 규칙

루비온레일즈에서 테이블 이름은 다음과 같은 규칙을 따릅니다:

  1. 복수형(Plural): 모델 클래스 이름의 복수형을 사용합니다.
  2. 스네이크 케이스(snake_case): 모든 문자는 소문자이며, 단어 사이는 밑줄(_)로 연결합니다.

예시:

  • Book 모델 → books 테이블
  • LineItem 모델 → line_items 테이블
  • Person 모델 → people 테이블 (불규칙 복수형)
  • Mouse 모델 → mice 테이블 (불규칙 복수형)

루비온레일즈는 강력한 복수화 메커니즘을 가지고 있어, 영어의 규칙적인 단어뿐만 아니라 불규칙한 단어도 올바르게 처리할 수 있습니다.

컬럼 이름 규칙

데이터베이스 컬럼 이름은 다음과 같은 규칙을 따릅니다:

  1. 단수형(Singular): 컬럼 이름은 단수형을 사용합니다.
  2. 스네이크 케이스(snake_case): 모든 문자는 소문자이며, 단어 사이는 밑줄(_)로 연결합니다.

예시:

  • first_name
  • last_name
  • email_address

외래 키 규칙

외래 키는 다음과 같은 규칙을 따릅니다:

  1. 패턴singularized_table_name_id 형식을 사용합니다.
  2. 참조: 액티브 레코드는 이 패턴을 사용하여 모델 간의 관계를 자동으로 식별합니다.

예시:

  • order_id (orders 테이블의 레코드를 참조)
  • user_id (users 테이블의 레코드를 참조)
  • line_item_id (line_items 테이블의 레코드를 참조)

특별한 컬럼 이름

루비온레일즈에서는 특별한 기능을 제공하는 몇 가지 예약된 컬럼 이름이 있습니다:

  1. 기본 키(Primary Key):
    • 기본적으로 id라는 이름의 정수형 컬럼을 사용합니다.
    • PostgreSQL과 MySQL에서는 bigint, SQLite에서는 integer 타입을 사용합니다.
    • 마이그레이션을 통해 테이블을 생성할 때 자동으로 만들어집니다.
  2. 타임스탬프(Timestamps):
    • created_at: 레코드가 처음 생성될 때 자동으로 현재 시간이 저장됩니다.
    • updated_at: 레코드가 생성되거나 업데이트될 때마다 현재 시간으로 갱신됩니다.
  3. 특수 목적 컬럼:
    • lock_version: 낙관적 잠금(Optimistic Locking)을 위해 사용됩니다.
    • type: 단일 테이블 상속(Single Table Inheritance)에 사용됩니다.
    • (association_name)_type: 다형성 관계(Polymorphic Associations)의 타입을 저장합니다.
    • (table_name)_count: 관계된 객체의 수를 캐시하는 데 사용됩니다 (예: comments_count).

모델 명명 규칙

루비온레일즈의 모델 클래스는 다음과 같은 규칙을 따릅니다:

  1. 카멜 케이스(CamelCase): 각 단어의 첫 글자는 대문자입니다.
  2. 단수형(Singular): 모델 이름은 항상 단수형입니다.

예시:

  • Book (→ books 테이블)
  • LineItem (→ line_items 테이블)
  • Person (→ people 테이블)

모델 파일 이름은 스네이크 케이스의, 단수형을 사용합니다:

  • app/models/book.rb
  • app/models/line_item.rb
  • app/models/person.rb

관계 설정 시 명명 규칙

모델 간의 관계를 설정할 때도 명명 규칙이 적용됩니다:

  1. has_one/belongs_to: 단수형 모델 이름을 사용합니다.

    Copyclass Author < ApplicationRecord
      has_one :profile
    end
    
    class Profile < ApplicationRecord
      belongs_to :author
    end
    
  2. has_many: 복수형 모델 이름을 사용합니다.

    Copyclass Author < ApplicationRecord
      has_many :books
    end
    
    class Book < ApplicationRecord
      belongs_to :author
    end
    
  3. has_many :through: 복수형 모델 이름을 사용합니다.

    Copyclass Doctor < ApplicationRecord
      has_many :appointments
      has_many :patients, through: :appointments
    end
    

명명 규칙 재정의하기

특정 상황에서는 기본 명명 규칙을 따르기 어려울 수 있습니다. 예를 들어, 기존 데이터베이스와 통합해야 하거나 다른 명명 규칙을 선호하는 경우 등이 있습니다. 루비온레일즈에서는 이러한 기본 규칙을 쉽게 재정의할 수 있습니다.

테이블 이름 재정의

Copyclass Product < ApplicationRecord
  self.table_name = "my_products"
end

기본 키 재정의

Copyclass Product < ApplicationRecord
  self.primary_key = "product_id"
end

이러한 재정의를 할 때는 테스트에서도 이를 반영해야 합니다:

Copy# test/models/product_test.rb
class ProductTest < ActiveSupport::TestCase
  set_fixture_class my_products: Product
  fixtures :my_products
  # ...
end

다양한 단어 형태 처리

영어에서는 단수형과 복수형 변환이 항상 단순하지 않습니다. 루비온레일즈는 대부분의 일반적인 영어 단어의 변형을 처리할 수 있지만, 때로는 특별한 처리가 필요한 경우가 있습니다.

예를 들어, octopus의 복수형은 octopi이고, mouse의 복수형은 mice입니다. 루비온레일즈는 이러한 불규칙한 형태도 올바르게 처리합니다.

하지만 bonus와 같은 단어의 경우, 루비온레일즈가 bonuses를 bonuse로 단수화하는 등의 오류가 발생할 수 있습니다. 이런 경우 config/initializers/inflections.rb 파일에서 규칙을 정의할 수 있습니다:

CopyActiveSupport::Inflector.inflections do |inflect|
  inflect.irregular 'bonus', 'bonuses'
end

결론

루비온레일즈의 데이터베이스 명명 규칙은 개발자가 명시적인 설정 없이도 효율적으로 작업할 수 있게 해주는 강력한 규약입니다. 이러한 규칙을 따르면 코드의 가독성이 향상되고, 개발 속도가 빨라지며, 다른 개발자와의 협업이 용이해집니다.

요약하자면:

  1. 테이블 이름: 복수형, 스네이크 케이스 (예: booksline_items)
  2. 모델 이름: 단수형, 카멜 케이스 (예: BookLineItem)
  3. 컬럼 이름: 단수형, 스네이크 케이스 (예: first_nameemail_address)
  4. 외래 키: 단수화된 테이블 이름 + _id (예: user_idorder_id)

이런 규칙을 이해하고 적용하면 루비온레일즈의 "구성보다 관례" 철학을 최대한 활용할 수 있으며, 보다 효율적인 개발 경험을 얻을 수 있습니다.


참고 자료

profile
AI를 꿈꾸는 BackEnd개발자

0개의 댓글