Rails 8.2 이전의 자격 증명 관리 문제점
Rails 8.2 이전에는 여러 소스에서 자격 증명을 관리하기 위해 ENV.fetch()와 Rails.application.credentials.dig()와 같은 상이한 API를 혼합하여 사용해야 했습니다. 이는 다음과 같은 문제점을 야기했습니다:
-
불일치하는 API:
ENV.fetch()와credentials.dig()간의 구문 불일치. -
분산된 수동 폴백 로직: 코드 전반에 수동으로 구현된 폴백 로직.
-
코드 변경 필요: 비밀 정보의 저장 방식이 변경될 때마다 애플리케이션 코드를 수정해야 했습니다.
-
nil검사 누락: 중첩된 자격 증명에 대한nil검사를 잊기 쉬웠습니다.
Rails 8.2의 Rails.app.creds
새로운 Rails.app.creds는 자격 증명 관리를 위한 일관된 인터페이스를 제공하여 위 문제점들을 해결합니다.
-
통합 인터페이스:
ENV변수를 먼저 확인하고, 다음으로 암호화된 자격 증명을 확인하는 방식으로 작동합니다. -
require메서드: 지정된 자격 증명 값이 반드시 존재해야 함을 강제하며,ENV와 암호화된 자격 증명 모두에서 찾을 수 없으면KeyError를 발생시킵니다. -
option메서드: 값이 없으면nil을 반환하거나, 지정된 기본값을 반환하여 유연성을 제공합니다. -
중첩 키 지원: 여러 키를 인수로 전달하여 중첩된 자격 증명에 접근할 수 있습니다.
ENV조회 시에는 이중 밑줄(__)이 구분자로 사용됩니다 (예:ENV["AWS__ACCESS_KEY_ID"]). -
동적 기본값:
option메서드는 필요할 때만 평가되는 호출 가능한 객체(예:Proc)를 기본값으로 허용합니다.
추가 기능
-
ENV전용 접근:Rails.app.envs를 통해 암호화된 자격 증명 폴백 없이 환경 변수에만 직접 접근할 수 있습니다. -
사용자 정의 자격 증명 소스:
ActiveSupport::CombinedConfiguration을 기반으로 하여,ENV, HashiCorp Vault, 1Password 등 외부 비밀 관리자를 포함하도록 자격 증명 소스 체인을 사용자 정의할 수 있습니다. 각 소스는require및option메서드를 구현해야 합니다. -
Rails.app별칭:Rails.application에 대한 새로운Rails.app별칭이 도입되어 코드 가독성과 작성 편의성을 향상시켰습니다.