GetSerction(), ConnectionStrings()…이 값을 찾지 못한다면, appsetting.json에서 {}위치가 맞는지 확인 할 것…(”ConnectionStrings”이 “Logging”안에 있다던가…)

1. 설정 값 및 환경변수의 용도

대부분의 설정파일(appSetting.json 등) 및 환경변수에는 서버의 정보, DB의 로그인 정보, 시크릿 키 등 중요한 정보를 담는다. 이러한 값들은 서버마다 설정 값이 다를 수 있고, 무엇보다 보안과 직결되므로 깃허브 등에 올리지 않고 로컬에서 저장하여 관리한다.

대표적인 예로는 db의 connection string이 있다.

[appSetting.json]

{
	... ,
  "ConnectionStrings": {
    "Mysql_Users": "Host=localhost;Port=3306;User=gyeon;Password=1q2w3e4r;Database=account_db;SslMode=Required"
  },
	...
}

[program.cs, 설정값 사용 부분]

builder.Services.AddTransient<QueryFactory>((e) =>
{
    var connection = new MySqlConnection(
        **builder.Configuration.GetConnectionString("Mysql_Users")**
    );
    var compiler = new MySqlCompiler();
    return new QueryFactory(connection, compiler);
});

2. 설정(configuration) 값

  1. 컨트롤러-서비스에서 설정 값 사용하는 방법 .Net core가 알아서 appsettings.json를 읽고 DI Container에 넣어준다. 서비스/컨트롤러에서 이를 DI하여 사용한다

    public RedisActiveUserService(IConfiguration configuration)
    {
        _connectionString = **configuration**.GetSection("ConnectionStrings")["ActiveDB"];
    		...
    }
    
  2. program.cs에서 설정 값 사용하는 방법

    builderapp의 configuration프로퍼티에 접근하여 전용 메서드로 값을 가져온다. 각각의 configuration프로퍼티의 타입은 ConfigurationManager, IConfiguration로 다르지만, 제공하는 메서드를 사용하는 방법은 비슷한 듯 하다.

    string connectionStriong = builder.**Configuration**.GetSection("ConnectionStrings")["ActiveDB"];
    //특정 객체에 담아서 가져오고 싶을 때 
    TestObj testObj = builder.Configuration.GetSection("test").Get<TestObj>();
    
  3. appsettings.json이외에 다른 파일의 설정을 가져오고 싶을 때

    var configuration = new ConfigurationBuilder()
        .AddJsonFile("file.json", optional: true, reloadOnChange: true)
        .Build();
    
    builder.Services.AddSingleton(configuration);
    
    1. ConfigurationBuilder()이 생성하는 ConfigurationBuilder객체에
    2. AddJsonFile()로 json파일을 가져오고
    3. Build()로 객체를 빌드하면 DI Container에 등록되어
    4. 컨트롤러나 서비스의 생성자에 IConfiguration로 DI하여 사용 할 수 있다.

3. 환경 변수(env)

환경변수를 program.cs에서 DI Container에 등록 후, program.cs나 컨트롤러/서비스에서 사용.

  1. 환경변수를 DI컨테이너에 등록한다

    var builder = WebApplication.CreateBuilder(args);
    var configuration = new ConfigurationBuilder()
        .**AddEnvironmentVariables()**
        .Build();
    builder.Services.AddSingleton(configuration);
    
  2. 서비스에서 환경변수 사용하는 방법

    public RedisActiveUserService(IConfiguration configuration)
    {
        _configs = configuration; //DI 그냥 Env값 바로 받아도 됨 당연히.
    		...
    }
    
    void testFucn()
    {
    	string? env = _configs["PATH"]; //이때, env는 nullable
    }
    
  3. program.cs에서 환경변수 사용하는 방법

    string? env = builder.Configuration["PATH"]; //이때, env는 nullable