데이터베이스 레코드의 의미 있는 버전 관리

데이터베이스 레코드의 의미 있는 버전 관리는 필터링 및 정렬에 복잡성을 도입합니다. 데이터베이스는 의미 있는 버전을 기본적으로 이해하지 못하기 때문에 데이터베이스의 별도 열에 버전 구성 요소를 추출해야 합니다. 이 프로세스를 더 쉽게 만들기 위해 SemanticVersionable 모듈이 도입되었습니다.

설정 지침

의미 있는 버전 관리를 사용하려면 먼저 데이터베이스 마이그레이션을 만들어 테이블에 필요한 열을 추가해야 합니다. 필요한 열은 semver_major, semver_minor, semver_patch, semver_prerelease입니다. 예를 들면 다음과 같은 마이그레이션이 될 것입니다:

class AddVersionPartsToModelVersions < Gitlab::Database::Migration[2.2]
  enable_lock_retries!

  milestone '16.9'

  def up
    add_column :ml_model_versions, :semver_major, :integer
    add_column :ml_model_versions, :semver_minor, :integer
    add_column :ml_model_versions, :semver_patch, :integer
    add_column :ml_model_versions, :semver_prerelease, :text
  end

  def down
    remove_column :ml_model_versions, :semver_major, :integer
    remove_column :ml_model_versions, :semver_minor, :integer
    remove_column :ml_model_versions, :semver_patch, :integer
    remove_column :ml_model_versions, :semver_prerelease, :text
  end
end

열이 데이터베이스에 추가되면 모듈을 모델에 포함시키고 semver 접근자 메서드의 이름을 설정하여 모듈을 구성할 수 있습니다. 예를 들면:

module Ml
  class ModelVersion < ApplicationRecord
    include SemanticVersionable

    semver_method :semver

  ...
  end
end

이 모듈에는 두 가지 구성 옵션이 있습니다:

  • semver_method는 객체에 추가될 접근자 메서드의 이름을 지정합니다.
  • validate_semvertrue 또는 false (기본값은 false)입니다. true이면 제공된 semver 문자열이 유효한 semver 형식이 아니면 유효성 검사 오류가 발생합니다.

사례에 따라 롤아웃이나 백필 프로세스 중에 유효성 검사를 비활성화할 수도 있습니다.

참조용으로 이 MR를 확인해 주십시오.

정렬

이 관련은 의미 있는 버전으로 정렬하기 위해 두 가지 스코프를 제공합니다:

scope :order_by_semantic_version_desc, -> { order(semver_major: :desc, semver_minor: :desc, semver_patch: :desc)}
scope :order_by_semantic_version_asc, -> { order(semver_major: :asc, semver_minor: :asc, semver_patch: :asc)}

필터링 및 검색

미정