# D-011: 설정 관리 전략 (2026-03-12)

> Ante 설계 결정 기록.
> 인덱스: [README.md](README.md)

**결정**: 설정 성격별 3계층 분리

**계층**:

1. **정적 설정 (TOML 파일)** — 변경 시 재시작 필요
   - `config/system.toml`: DB 경로, Parquet 저장 경로, 로그 레벨 등
   - 시스템 인프라 수준의 설정

2. **비밀값 (.env + 환경변수)** — gitignore 대상
   - `config/secrets.env`: API 키, 토큰, 계좌 정보 등
   - 환경변수가 존재하면 .env보다 우선 적용

3. **동적 설정 (SQLite)** — 런타임 변경, 즉시 반영
   - 전역 거래 룰 (일일 최대 거래 금액 등)
   - 봇별 자금 할당, 봇 활성화/비활성화
   - 알림 on/off
   - CLI/IPC에서 CRUD, 변경 시 EventBus로 해당 모듈에 알림

**접근 인터페이스** (Config 모듈이 통일 제공):
- `Config.get(key)` — 정적 설정 읽기
- `Config.secret(key)` — 비밀값 읽기
- 동적 설정은 각 모듈의 서비스 레이어에서 DB 직접 조회

**우선순위**: 환경변수 > .env > system.toml > 기본값

**디렉토리 구조**:
```
config/
├── system.toml        # 정적 설정
└── secrets.env        # 비밀값 (gitignore)
```

**근거**:
- 설정의 성격(변경 빈도, 보안 수준, 반영 시점)이 다르므로 단일 방식으로 관리 불가
- 통일된 접근 인터페이스로 모듈 간 설정 접근 패턴 일관성 확보
- 비밀값 분리로 git 커밋 시 키 노출 방지
- 동적 설정의 EventBus 알림으로 런타임 변경 즉시 반영
