기존 설정 관리 방식의 한계
-
하드코딩: 애플리케이션 전역 설정을 코드 내에 직접 작성하는 방식은 변경 시 여러 파일을 수동으로 수정해야 하며, 이는 유지보수 비용을 증가시키고 오류 발생 가능성을 높입니다.
-
I18n 로컬(YAML 파일):
en.yml과 같은 로컬 파일에 설정을 중앙 집중화하는 방식은 하드코딩보다는 개선되었으나, 여전히 설정 변경을 위해서는 개발자가 코드 파일을 수정하고 애플리케이션을 재배포해야 하는 단점이 있습니다. -
기타 Rails 설정 방식:
application.rb내config객체 활용, 다양한 Gem 사용, 또는 Rails의config_for기능 등 여러 논의가 있었지만, 이들 대부분은 개발자의 개입 없이 관리자가 직접 설정을 변경할 수 있도록 하는 근본적인 문제를 해결하지 못했습니다.
rails-settings-cached Gem을 이용한 개선
rails-settings-cached Gem은 애플리케이션 설정을 데이터베이스에 저장함으로써, 관리자가 직접 설정을 변경하고 즉시 적용할 수 있도록 지원합니다. 이는 재배포 과정 없이 동적인 설정 관리를 가능하게 합니다.
Gem 설치 및 기본 설정
-
Gem 추가:
bundle add rails-settings-cached명령어를 통해 Gem을 설치합니다. -
모델 및 마이그레이션 생성:
rails generate settings명령어를 실행하면Setting모델과key,value컬럼을 포함하는settings테이블 생성 마이그레이션이 생성됩니다. -
마이그레이션 실행:
rails db:migrate를 통해 데이터베이스 테이블을 생성합니다. -
기본값 정의:
config/initializers/settings.rb파일에서Setting.app_name = 'My Restaurant'과 같이 기본 설정을 정의할 수 있습니다. 애플리케이션은 데이터베이스에 해당 설정이 없을 경우 이 기본값을 사용합니다. -
설정 접근: 애플리케이션 코드 내에서
Setting.app_name과 같이 간편하게 설정 값에 접근할 수 있습니다.
관리자 인터페이스 구축
rails-settings-cached Gem은 관리자가 데이터베이스에 저장된 설정을 쉽게 편집할 수 있도록 관리자 인터페이스를 제공합니다. 최근 PR을 통해 rails generate settings:admin 명령어로 라우트, 컨트롤러, 뷰 파일을 자동으로 생성할 수 있게 되었습니다.
-
제너레이터 실행:
rails generate settings:admin명령어를 실행하여 관리자 인터페이스 관련 파일을 생성합니다. -
생성된 파일:
routes.rb에namespace :admin { resource :settings }라우트가 추가되고,SettingsController및views/settings/show.html.erb뷰 파일이 생성됩니다. -
설정 편집:
/admin/settings경로에 접속하면, 웹 인터페이스를 통해 애플리케이션 설정을 확인하고 변경할 수 있습니다. 변경된 설정은 즉시 데이터베이스에 반영되며, 애플리케이션은 업데이트된 설정을 사용합니다.
추가 기능
-
유효성 검사: 관리자가 편집 가능한 필드에 대한 유효성 검사를 정의할 수 있습니다.
-
읽기 전용 필드: 관리자에게 표시되지만 편집은 불가능한 읽기 전용 필드를 설정할 수 있습니다.
-
스타일링: 생성된 관리자 뷰는 기본적인 스타일만 제공하므로, 필요에 따라 커스텀 CSS를 적용하여 UI를 개선할 수 있습니다.