소프트웨어를 개발하다 보면 매번 작성할 때마다 짜증 나는 코드가 있습니다. 지저분해 보이는 코드 조각, 혹은 도무지 작성 방법이 기억나지 않아 코드베이스 곳곳에서 예제를 찾아 복사·붙여넣기 해야 하는 그런 줄들 말입니다. 이런 것들이 바로 여러분의 개발 흐름(flow)을 깨뜨립니다. 그렇기 때문에 이런 부분들을 미리 인식하고, 더 편리하게 만들어 주는 것이 중요합니다.
Rails 설정 파일 로딩의 번거로움
예를 들어, Rails 앱에서 커스텀 설정이 필요할 때가 있습니다. 앱 고유의 추가 설정이 필요할 수도 있고, 사용하는 라이브러리가 자체 설정 파일을 config/ 디렉터리에서 찾지 않는 경우도 있죠. 보통은 다음과 같은 YAML-ERB-read-Rails.env 의식을 거쳐야 합니다:
YAML.load(ERB.new(File.read(Rails.root.join('config', 'google_analytics.yml'))).result)[Rails.env]
하지만 이건 좀 터무니없습니다. 게다가 가끔 ERB 처리를 깜빡하면, 예상치 못한 순간에 코드가 깨져 버립니다.
Settings 클래스로 깔끔하게 해결하기
저희 코드베이스에는 이런 과정을 간편하게 만들어 주는 간단한 Settings 클래스가 있습니다:
require 'settings'
GoogleAnalyticsSettings = Settings.new(:google_analytics)
GoogleAnalyticsSettings.google_analytics_id # => "UA-XXXXXXX-1"
Settings는 config/ 디렉터리에서 알맞은 설정 파일을 자동으로 찾아냅니다. 그다음 파일 내용을 YAML과 ERB를 통해 처리하고, Rails.env를 사용해 해당 Rails 환경에 맞는 설정값을 가져옵니다. 마지막으로 모든 내용을 OpenStruct로 감싸서 최상위 설정에 더 깔끔하고 직관적으로 접근할 수 있게 해줍니다. 기본적인 Settings 구현체는 gist로 공개되어 있으니 참고하세요.
작은 편의성이 쌓여 큰 차이를 만듭니다
정말 단순한 구현이지만, 그만큼 편리합니다. 복잡한 파일 로딩 코드 전부를 외우는 것보다 Settings.new 하나만 기억하는 편이 훨씬 쉽습니다. 이런 사소한 편의 기능들이 하나둘 쌓이다 보면, 코드베이스에서 작업하는 일이 훨씬 즐거워집니다.
여러분의 코드 중에서도 매번 짜증을 유발하거나, 작업 흐름을 끊거나, 할 때마다 예제를 찾아봐야 하는 부분이 있나요? 그런 부분을 더 쉽게 사용할 수 있도록 개선할 방법을 한번 찾아보세요.