애플리케이션 설정 개발

본 문서는 GitLab에 애플리케이션 설정을 추가하기 위한 개발 가이드를 제공합니다.

애플리케이션 설정은 application_settings 테이블에 저장됩니다. 각 설정은 고유의 열을 가지며 하나의 행만 있어야 합니다.

새로운 애플리케이션 설정 추가

우선, 애플리케이션 설정을 추가해야 할 필요성이 있는지 결정해야 합니다. 새로운 설정을 추가할 때는 구성 원칙을 고려하세요.

새로운 설정을 추가할 때 관련된 애플리케이션 설정을 application_settings 테이블을 더 넓게 만드는 것을 피하기 위해 단일한 JSONB 열에 저장하는 것을 선호합니다. 또한, 기존 열에 새로운 설정을 추가하는 경우 데이터베이스 검토가 필요하지 않으므로 시간을 절약할 수 있습니다.

새로운 설정을 추가하려면 다음 단계를 거쳐야 합니다:

  • 새로운 설정을 저장할 수 있는 기존 JSONB 열이 있는지 확인합니다.
  • 기존 JSON 열이 있는 경우:
  • 사용할 수 있는 기존 JSON 열이 없는 경우:
    • 저장할 새 JSON 열을 application_settings 테이블에 추가하려면 이 참조를 참고합니다.
    • 열이 항상 해시를 저장하도록 제약 조건을 추가합니다. 참조: 이 참조.
    • 기존 관련 열을 이 새롭게 생성된 JSONB 열로 이동하기 위해 후속 작업 문제를 만듭니다.
  • 가시적인 속성 디렉터리에 새로운 설정을 추가합니다.
  • ApplicationSettingImplementation#defaults에 새로운 설정을 추가합니다(설정에 기본값이 있는 경우).
  • 새로운 설정에 대한 기본값 테스트를 추가합니다(설정에 기본값이 있는 경우).
  • 새로운 필드에 대한 유효성 검사를 ApplicationSetting 모델에 추가합니다.
  • 유효성 및 기본값에 대한 모델 테스트를 찾습니다.
  • 적절한 뷰 파일을 찾거나 새로 생성하여 새 설정에 대한 양식 필드를 추가합니다.
  • API 문서를 업데이트합니다. 애플리케이션 설정은 REST API에서 자동으로 사용할 수 있게 됩니다.

데이터베이스 마이그레이션 예시

class AddNewSetting < Gitlab::Database::Migration[2.1]
  disable_ddl_transaction!
  
  def up
    with_lock_retries do
      add_column :application_settings, :new_setting, :text, if_not_exists: true
    end
    
    add_text_limit :application_settings, :new_setting, 255
  end
  
  def down
    with_lock_retries do
      remove_column :application_settings, :new_setting, if_exists: true
    end
  end
end

모델 유효성 검사 예시

validates :new_setting,
          length: { maximum: 255, message: N_('is too long (maximum is %{count} characters)') },
          allow_blank: true