728x90
📘 Chapter 2.6: Configuration 관리 – appsettings.json 구조와 환경별 분리 (feat. POCO 완전 이해 포함)
✅ 이번에 진짜 확실히 정리할 내용
- appsettings.json은 왜 필요한가?
- 설정을 꺼내 쓰는 3가지 방법
- POCO 클래스란?
- 환경별 설정 분리 정확한 구조
- user-secrets 비밀 정보 안전하게 숨기기
- 실무 구성 Best Practice
1️⃣ appsettings.json은 왜 필요하노?
✅ 설정을 코드에 직접 때려박으면 어떻게 되노?
var apiKey = "my-super-secret-api-key";
👎 이거 배포하면 끝났다.
- 운영용 키 노출
- 수정할 때마다 재컴파일
- 코드가 더러워짐
- 환경에 따라 분기 처리 지옥
✅ 그래서 나온 게 appsettings.json
{
"MySetting": {
"ApiKey": "12345",
"Timeout": 10
}
}
✔️ 이러면:
- 설정만 따로 분리 가능
- 환경별로 값 바꾸기 편함
- 보안, 유지보수 최고
2️⃣ 설정 값을 읽는 방법 (3가지)
✅ ① 문자열로 바로 읽기
var apiKey = config["MySetting:ApiKey"];
- 빠르고 간단
- "MySetting:ApiKey" 이렇게 콜론으로 경로 접근
✅ ② GetSection()으로 읽기
var section = config.GetSection("MySetting");
var timeout = section["Timeout"];
- 하위 노드에 접근할 때 유용
✅ ③ POCO 클래스에 바인딩 ← 실무 핵심
✋ 그런데! POCO 클래스란 뭐냐?
✅ POCO = "Plain Old CLR Object"
말 그대로 아무것도 안 붙은 순수한 C# 클래스
- 상속 X
- 어트리뷰트 X
- 인터페이스 X
👀 그냥 데이터 담는 깡통 같은 객체
🔧 예: POCO 클래스 예시
public class MySettingOptions
{
public string ApiKey { get; set; }
public int Timeout { get; set; }
}
- 이게 바로 POCO 클래스다!
- 설정 파일 구조랑 이름을 맞추면 자동으로 매핑된다!
3️⃣ POCO 바인딩 실전 흐름
✅ 1. appsettings.json
{
"MySetting": {
"ApiKey": "abc123",
"Timeout": 15
}
}
✅ 2. C# 클래스
public class MySettingOptions
{
public string ApiKey { get; set; }
public int Timeout { get; set; }
}
✅ 3. Program.cs에서 등록
builder.Services.Configure<MySettingOptions>(
builder.Configuration.GetSection("MySetting"));
✅ 4. DI로 받아서 사용
public class MyService
{
private readonly MySettingOptions _options;
public MyService(IOptions<MySettingOptions> options)
{
_options = options.Value;
}
public void Run()
{
Console.WriteLine($"API Key: {_options.ApiKey}");
Console.WriteLine($"Timeout: {_options.Timeout}");
}
}
📌 이렇게 하면 실무에서 설정 쓰는 게 너무 쉬워진다!!
4️⃣ 환경별 설정 분리 구조
📁 기본 구조:
appsettings.json
appsettings.Development.json
appsettings.Production.json
.NET은 실행할 때 환경에 맞는 설정 파일을 자동으로 병합해준다.
💡 병합 순서 (우선순위)
1. appsettings.json
2. appsettings.{ENVIRONMENT}.json
3. 환경 변수 (Environment Variable)
4. Secret Manager
📌 예시:
// appsettings.json
"MySetting": {
"ApiKey": "기본키",
"Timeout": 30
}
// appsettings.Development.json
"MySetting": {
"ApiKey": "개발자용-키"
}
✅ 실행환경이 Development면?
→ "ApiKey"는 "개발자용-키"가 우선 적용된다!
5️⃣ 실행 환경 바꾸는 방법
✅ 로컬 실행용 (launchSettings.json)
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
✅ 운영 서버에선?
ASPNETCORE_ENVIRONMENT=Production
6️⃣ 민감 정보는 어디 숨기는데?
절대 appsettings.json에 민감값 넣지 마라!
(소스코드에 커밋되면 진짜 끝장난다)
✅ 개발 환경은 dotnet user-secrets
쓰자!
dotnet user-secrets init
dotnet user-secrets set "MySetting:ApiKey" "비밀키"
✅ 코드는 그대로 config["MySetting:ApiKey"]
로 읽으면 된다.
✅ 소스에 안 들어간다. 깃허브 올려도 안전!
✅ 최종 실무 Best Practice
항목 | 실전 팁 |
---|---|
설정 읽기 | POCO + IOptions<T> 방식이 가장 깔끔 |
환경 분리 | .Development.json, .Production.json 나눠라 |
보안 | user-secrets (개발), 환경변수 or KeyVault (운영) |
구성파일 정리 | 설정이 많아지면 섹션별로 분리 ("JwtSetting", "Database" 등) |
🎯 결론 요약 문장
"appsettings.json은 환경별로 설정 나눠서, POCO 클래스에 바인딩해서 쓰면 실무가 깔끔하게 정리된다!"
📢 다음 챕터 예고 🎓
다음 챕터 | 주제 |
---|---|
Chapter 2.7 | 예외처리 전략 – Retry, Fallback, Polly 패턴 |
728x90
'C#' 카테고리의 다른 글
C# 기초부터 고급까지 Chapter 2.8. 테스트 코드 작성 기초 – xUnit 완전정복 편 (0) | 2025.05.02 |
---|---|
C# 기초부터 고급까지 Chapter 2.7. 예외처리 전략 – Retry, Fallback, Polly 패턴 (4) | 2025.05.01 |
C# 기초부터 고급까지 Chapter 2.5. 파일 입출력, 로그 남기기 – NLog, Serilog 예제 (0) | 2025.04.30 |
C# 기초부터 고급까지 Chapter 2.4. LINQ 실무 활용법 – 쿼리 문법 vs 메서드 문법 완전정복 (0) | 2025.04.30 |
C# 기초부터 고급까지 Chapter 2.3. async/await 완벽 이해 – Task, ValueTask, await 동작원리까지 (8) | 2025.04.29 |