애플리케이션 설정 개발

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

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

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

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

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

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

  • 새로운 설정을 저장할 수 있는 기존 JSONB 열이 있는지 확인합니다.
  • 기존 JSON 열이 있다면:
    • ApplicationSetting 모델의 JSONB 열에 새로운 설정을 추가합니다. (rate_limits)
    • 열의 JSON 스키마 검증기를 업데이트합니다. (rate_limits validator).
  • 사용할 수 있는 기존 JSON 열이 없는 경우:
    • application_settings 테이블에 새로운 JSON 열을 추가하여 저장합니다. 참조용 병합 요청을 참조하세요.
    • 항상 해시를 저장하도록 열에 제약 조건을 추가합니다. 참조용 병합 요청을 참조하세요.
    • 기존 관련 열을 이 새로 생성된 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