애플리케이션 설정 개발
이 문서는 GitLab에 애플리케이션 설정을 추가하는 기여자들을 위한 개발 가이드를 제공합니다.
애플리케이션 설정은 application_settings
테이블에 저장됩니다. 각 설정에는 고유한 열이 있으며 한 행만 있어야 합니다.
새로운 애플리케이션 설정 추가
우선, 애플리케이션 설정을 추가해야 하는지 여부를 결정해야 합니다. 새로운 설정을 추가할 때는 구성 원칙을 고려해야 합니다.
테이블을 넓히지 않기 위해 관련 애플리케이션 설정을 단일 JSONB 열에 저장하는 것이 좋습니다. 또한 기존 열에 새 설정을 추가하는 것은 데이터베이스 검토를 요구하지 않아 시간을 절약할 수 있습니다.
새로운 설정을 추가하려면 다음을 수행해야 합니다:
- 새로운 설정을 저장할 수 있는 기존 JSONB 열이 있는지 확인합니다.
- 기존 JSON 열이 있는 경우:
-
ApplicationSetting
모델의 JSONB 열에 rate_limits과 같은 새 설정을 추가합니다. - 열의 JSON 스키마 유효성 검사기를 업데이트합니다. rate_limits validator를 참조하세요.
-
- 사용할 수 있는 기존 JSON 열이 없는 경우:
- 새로운 설정을 가시적인 속성 목록에 추가합니다.
- 설정에 기본값이 있는 경우,
ApplicationSettingImplementation#defaults
에 새 설정을 추가합니다. - 설정에 기본값이 있는 경우, 기본값에 대한 테스트를 추가합니다.
- 새 필드에 대한 유효성 검사를
ApplicationSetting
모델에 추가합니다. - 유효성 및 기본값에 대한 모델 테스트를 찾아 추가합니다.
- 새 설정에 대한 적절한 뷰 파일을 찾거나 새로 생성하여 새로운 설정에 대한 양식 필드를 추가합니다.
- API 문서를 업데이트합니다. 애플리케이션 설정은 REST API에서 자동으로 사용할 수 있습니다.
-
scripts/cells/application-settings-analysis.rb
스크립트를 실행하여config/application_setting_columns/*.yml
에 정의 YAML 파일을 생성하고db/structure.sql
및 API 문서를 기반으로cells/application_settings_analysis
을 업데이트합니다. 정의 파일을 생성한 후,clusterwide
키를 반드시 설정하여 리더 셀에서 다른 셀로 속성 값을 복사하는지 여부를 확인하세요.clusterwide: true
로 설정하면 속성 값이 셀 아키텍처의 문맥에서 리더 셀에서 다른 셀로 복사됩니다. 대부분의 경우clusterwide: false
가 좋습니다.
데이터베이스 마이그레이션 예제
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