애플리케이션 설정 개발

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

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

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

먼저, 애플리케이션 설정을 추가해야 하는지 여부를 결정해야 합니다. 새로운 설정을 추가할 때는 구성 원칙을 고려하세요.

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

새로운 설정을 추가하려면 다음을 수행해야 합니다:

  • 새로운 설정을 저장할 수 있는 기존의 JSONB 열이 있는지 확인합니다.
  • 기존의 JSON 열이 있다면:
    • rate_limits과 같은 JSONB 열에 새로운 설정을 추가합니다.
    • rate_limits validator과 같은 열의 JSON 스키마 유효성 검사기를 업데이트합니다.
  • 사용할 수 있는 기존의 JSON 열이 없다면:
    • 저장할 수 있는 새로운 JSON 열을 application_settings 테이블에 추가하여 참조용으로 이 merge request를 참조하세요.
    • 항상 해시를 저장하도록 열에 제약 조건을 추가하려면 참조용으로 이 merge request를 참조하세요.
    • 기존 관련 열을 만들어진 새로 생성된 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