Azure Functions에서 앱 설정 액세스
빠르게 진화하는 오늘날의 클라우드 환경에서 앱 설정을 안전하고 유연하게 관리하는 것은 매우 중요합니다. 특히 Azure Functions를 사용하여 개발하는 개발자에게는 더욱 그렇습니다. Azure 포털을 통해 함수 앱을 배포하든, Azure Functions Core Tools를 사용하여 구성 설정을 관리하든, Key Vault를 통해 비밀을 연결하든, 처음부터 앱 구성을 체계적으로 구성하는 것이 중요합니다.
" Secrets.json을 포함한 콘솔 앱의 AppSettings 액세스 "라는 제목의 실습 세션에서 Tim Corey는 .NET 생태계를 활용한 모범 사례를 안내합니다. 이 글은 콘솔 애플리케이션에 초점을 맞추고 있지만, 그의 개념은 Azure Functions 앱에서 함수 앱 설정을 개발하고 관리하는 데 직접적으로 적용됩니다. 특히 로컬에서 작업하거나 프로젝트 파일을 설정하거나 App Service에 배포할 때 유용합니다.
이 글에서는 Tim의 구조를 사용하여 모든 것을 자세히 살펴보고, 그의 교훈을 최신 Azure Functions 개발에 적용해 보겠습니다.
Azure Functions에서 앱 설정이 중요한 이유
Tim은 가장 기본적인 .NET 앱을 넘어서는 모든 앱을 구축할 때 애플리케이션 설정이 얼마나 중요한지 강조하며 이야기를 시작합니다. Azure Functions 환경에서는 앱 설정에 액세스해야 하는 필요성이 더욱 두드러지는데, Azure Functions 런타임은 환경 변수, JSON 기반 local.settings.json 또는 Azure 앱 구성과 같은 관리형 저장소에서 구성 값을 가져올 것으로 예상하기 때문입니다.
"개발자들이 공통적으로 원하는 기능 중 하나는 설정 파일에 접근할 수 있는 기능입니다."라고 Tim은 0:17에서 설명합니다.
API 키, 연결 문자열 또는 기능 플래그 등 무엇이든 간에 구성 유연성과 보안은 무엇보다 중요합니다. 특히 Microsoft Azure와 같은 클라우드 플랫폼에 배포할 때는 더욱 그렇습니다.
Visual Studio로 기초를 다지세요
1분 24초에 Tim은 Visual Studio를 사용하여 SettingsDemoApp이라는 이름으로 콘솔 프로젝트를 설정합니다. Azure 개발자는 일반적으로 Azure Functions Core Tools를 사용하여 Functions 프로젝트를 초기화하지만, Tim의 코드 구성 및 구조화 방식은 이러한 방식에도 완벽하게 적용됩니다. 콘솔 환경에서 작업하든, 격리된 작업자 모델을 사용하여 독립적인 Azure Functions 앱을 구축하든, 프로젝트 파일 설정과 코드 구조는 핵심적인 기반입니다.
필요한 NuGet 패키지를 설치하세요
2분 33초부터 Tim은 네 가지 필수 NuGet 패키지를 설치하는 과정을 안내합니다.
Microsoft.Extensions.Configuration
Microsoft.Extensions.Configuration.Json
Microsoft.Extensions.Configuration.Binder
- Microsoft.Extensions.Configuration.UserSecrets
이는 Azure Functions에서 사용하는 앱 구성 시스템과 유사하며, Azure Functions 역시 내부적으로 동일한 패키지를 사용합니다. 팀은 모듈화의 가치를 강조합니다.
"이것은 사실상 과하게 부풀려진 것과는 정반대입니다."라고 그는 지적하며, .NET Core 개발자가 NuGet 통해 선택적으로 사용할 수 있도록 함으로써 불필요한 페이로드를 방지한다고 설명합니다.
일반적인 함수형 앱의 경우 이러한 패키지는 미리 참조되거나 구성 설정, 종속성 주입 또는 Key Vault 및 Azure 앱 구성 지원과 같은 고급 사용 사례에 대한 사용자 지정 로직을 지원하기 위해 쉽게 추가할 수 있습니다.
JSON 설정 파일 추가 및 구성
6시 12분에 Tim은 Azure Functions 개발에서 local.settings.json과 같은 구조를 가진 appsettings.json이라는 새 파일을 생성합니다. 그는 다음과 같은 키-값 쌍으로 해당 영역을 채웁니다.
{
"사용자": {
"FirstName": "Tim",
"성": "코리"
},
"StarterCountValue": 5
}로컬 함수 내에서 개발자는 주입된 IConfiguration을 통해 애플리케이션 로직으로 값을 읽어들이기 위해 거의 동일한 형식의 local.settings.json을 사용합니다. Tim은 또한 중요한 단계 하나를 강조합니다. 바로 파일의 "출력 디렉터리로 복사" 설정을 "최신 파일인 경우 복사"로 지정하는 것입니다. 이는 런타임 시 구성 정보를 사용할 수 있도록 보장하는 데 매우 중요합니다.
구성 파이프라인을 수동으로 구축합니다.
Tim은 다음과 같은 명령어를 사용하여 수동으로 구성 파이프라인을 설정하는 코드를 작성합니다.
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", 선택 사항: true, 변경 시 재로드: true);Azure Functions 런타임이 이 파이프라인을 자동으로 처리하지만, Tim의 분석을 통해 함수 프로젝트가 다양한 소스에서 값을 가져오는 방식이 명확해졌습니다. 그가 .AddJsonFile()을 사용하는 방식은 개발자들이 Azure 앱에서 local.settings.json을 구성하는 방식과 유사하며, reloadOnChange는 개발 중에 구성 설정을 동적으로 새로 고치는 개념을 도입합니다.
타입 안전성을 사용하여 값을 읽습니다.
팀이 11:00에 GetValue() 메서드를 사용하여 설정을 읽는 방법을 보여줍니다:
int count = config.GetValue<int> ("StarterCountValue");중첩 설정의 경우 그는 다음을 사용합니다.
문자열 firstName = config.GetValue<string> ("사용자:FirstName");Azure Functions를 사용할 때도 이와 동일한 구문 패턴이 적용됩니다. Tim이 사용하는 콜론으로 구분된 키("User:FirstName")는 이중 밑줄(__) 구문을 사용하는 환경 변수에 직접 매핑됩니다.
사용자 이름=팀이 기능은 특히 Azure App Service에 배포하거나 Azure 포털을 통해 구성할 때 유용하며, 애플리케이션 설정 또는 환경 기반 재정의를 사용하여 런타임에 설정을 재정의할 수 있습니다.
UserSecrets를 사용하여 비밀 정보를 안전하게 관리하세요.
오후 3시에 Tim은 API 키나 연결 문자열과 같은 민감한 데이터를 소스 제어 시스템에 노출하지 않고 저장하는 데 사용되는 사용자 비밀 정보를 통해 secrets.json 패턴을 소개합니다. 그는 다음 줄을 사용하여 사용자 비밀 저장소를 프로젝트에 연결하는 방법을 보여줍니다.
빌더.AddUserSecrets<Program> ();그는 순서가 중요하다는 점을 강조합니다. 사용자 비밀 키는 이전 구성 소스를 덮어쓰므로 마지막에 설정된 값이 우선한다는 원칙을 강화합니다. Azure Functions는 secrets.json을 직접 사용하지는 않지만, 프로덕션 클라우드 환경에서는 Azure Key Vault를 사용하고 선택적으로 관리형 ID 인증을 통해 동일한 보안 재정의를 구현할 수 있습니다.
팀은 로컬 개발 환경에서 사용하는 비밀 키는 실제 운영 환경에서 사용하는 보안 시스템을 대신하는 역할을 한다고 설명합니다.
"이 secrets.json 파일은 Key Vault 또는 환경 설정과 같이 실제 값을 저장하는 데 사용하는 보안 시스템을 대신하는 것입니다."
구성 실행 및 유효성 검사
Tim은 appsettings.json과 secrets.json 파일을 모두 설정한 후 예제를 실행하고 비밀 값이 기본값을 재정의하는지 확인합니다. 이는 Azure Functions가 local.settings.json, Azure 앱 구성, 환경 변수 또는 Key Vault와 같은 여러 소스의 재정의를 처리하는 방식을 직접적으로 반영합니다.
명령줄을 통해 Azure Functions Core Tools를 사용하든 Visual Studio를 통해 배포하든 앱 구성의 로드 순서와 계층 구조는 Tim이 설명한 대로 정확하게 작동합니다.
구성 관리 모범 사례
Tim은 마지막으로 기능 플래그, 빈도 설정 또는 CORS 구성과 같이 자주 변경되지 않는 구성 값은 JSON 파일에 보관하고 연결 문자열 및 비밀 키와 같은 민감한 데이터는 안전한 저장소에 보관할 것을 권장합니다.
이는 다음과 같은 Azure Functions의 최신 모범 사례와 일치합니다.
개발자는 로컬에서 함수를 실행하기 위해 local.settings.json 파일을 사용합니다.
팀은 애플리케이션 설정을 위해 Azure 포털을 사용합니다.
비밀은 키 볼트로 이동합니다
- Azure 앱 구성 저장소의 값은 설정을 코드와 구분하는 데 도움이 됩니다.
이러한 소스는 애플리케이션 바이너리를 건드리지 않고 종속성 주입을 사용하여 런타임과 통합됩니다.
마지막으로
Tim의 비디오는 콘솔 앱에 관한 것이지만, 그가 가르치는 모든 기술은 구성 파일 생성, 키 읽기, 관리 ID 사용, 종속성 주입을 통한 구성 로드 등 Azure Functions 앱에도 완벽하게 적용됩니다. Visual Studio를 사용한 배포, Azure 계정 관리 또는 완벽한 코드 예제 찾기 등 어떤 경우든 그의 통찰력은 실제 클라우드 환경에 직접적으로 적용됩니다.

