본문 바로가기
프로그래밍/C#

C# 웹앱에서 appsettings.json 설정값 사용하기

by bantomak 2025. 1. 7.
반응형

appsettings.json

프로젝트 세팅을 읽는 가장 보편적인 방식은 JSONConfigurationProvider를 사용하는 것이다.

이 제공자는 appsettings.json 파일에 정의된 설정값들을 앱에 제공한다. 이 파일은 프로젝트가 빌드된 후에, 출력 폴더에 함께 복사된다.

 

빌드 출력 폴더의 다른 파일들과 함께 실행할 시스템에 옮겨지고, dotnet run의 입력을 통해 웹앱이 실행될 때, 코드 내의 설정값들이 appsettings.json 파일에 의해 결정되는 것이다. 만약 설정값의 변경이 있다면, 그와 관련된 appsettings.json 파일의 내용을 변경한 후에 앱을 중지하고 다시 실행시키면 된다.

 

appsettings.json 파일뿐만 아니라, 웹앱의 실행에 필요한 파일들은 모두 웹서버 컴퓨터에 저장이 되는데, 보통 특정 사용자만 해당 머신에 로그인할 수 있다. 즉, 파일의 내용이 외부로 공개되지 않게 된다. 하지만 때로는 운영체제의 로그인이 관리되지 않는 경우가 있기 때문에 appsettings.json에 저장된 비밀번호가 완전히 안전하다고 말하기 어렵다. 따라서 appsettings.json 파일에 비밀정보를 저장한다면, 반드시 웹앱이 실행되는 시스템의 로그인 관리를 철저히 해야 한다.

appsettings.json의 구조

json문서의 일반적인 구조를 따른다. key:value 구조를 가진다.

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",

  "AppSettings": {
    "AppName": "MyAppName",
    "AppVersion": 1.0
  } 
}

설정값 사용하기

코드 내부에서 appsettings.json의 값을 사용하기 위해서는 섹션과 값이름을 지정하면 되는데, 값의 자료형에 따라 아래와 같은 방법을 사용한다.

// Program.cs
services.Configure<AppSettings>(configuration.GetSection("AppSettings"));

// MyService.cs
public MyService(IOptions<AppSettings> appSettings)
{
    _appSettings = appSettings.Value;
}

public void DisplaySettings()
{
    Console.WriteLine($"Application Name: {_appSettings.AppName}");
    Console.WriteLine($"Version: {_appSettings.AppVersion}");
}

설정값 클래스 AppSettings 생성

public class AppSettings
{
    public string AppName { get; set; }
    public string AppVersion { get; set; }
}

Program 클래스

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureServices((context, services) =>
        {
            // 1. Access IConfiguration from HostContext
            IConfiguration configuration = context.Configuration;

            // 2. Bind "AppSettings" section to AppSettings class
            services.Configure<AppSettings>(configuration.GetSection("AppSettings"));

            // 3. Add additional services (example)
            services.AddTransient<IMyService, MyService>();

            // 4. Add a hosted service for demonstration
            services.AddHostedService<MyHostedService>();
        });
}

MyHostedService 클래스

public class MyHostedService : IHostedService
{
    private readonly IMyService _myService;

    public MyHostedService(IMyService myService)
    {
        _myService = myService;
    }

    public Task StartAsync(CancellationToken cancellationToken)
    {
        // Display AppSettings on application start
        _myService.DisplaySettings();
        return Task.CompletedTask;
    }

    public Task StopAsync(CancellationToken cancellationToken)
    {
        Console.WriteLine("Application is stopping...");
        return Task.CompletedTask;
    }
}

MyService 클래스

public interface IMyService
{
    void DisplaySettings();
}

public class MyService : IMyService
{
    private readonly AppSettings _appSettings;

    public MyService(IOptions<AppSettings> appSettings)
    {
        _appSettings = appSettings.Value;
    }

    public void DisplaySettings()
    {
        Console.WriteLine($"Application Name: {_appSettings.AppName}");
        Console.WriteLine($"Version: {_appSettings.AppVersion}");
    }
}

코드 설명

ConfigureServices를 사용하여 서비스 등록

  • IConfiguration은 Host.CreateDefaultBuilder를 통해 자동으로 로드됩니다.
  • services.Configure<AppSettings>를 사용해 appsettings.json 파일의 AppSettings 섹션을 AppSettings 클래스에 바인딩.

IMyService와 MyService 등록

  • IMyService는 MyService 구현체를 사용합니다.
  • MyService클래스에서 IOptions<AppSettings>로 설정값 객체를 의존성 주입으로 가져온다.

HostedService를 사용하여 설정 값 출력:

  • IHostedService 구현체는 애플리케이션이 시작될 때 설정 값을 출력.

설정값 가져오기

이제 appsettings.json 파일에 있는 설정값을 사용할 수 있다.

참고 사이트

 

Configuration - appsettings.json

Configuration 클래스는 Asp.net core 앱이 빌드되고 실행될 때, 앱에 관한 설정값을 제공하는 서비스 역...

blog.naver.com

댓글