# STEP 9 — DI 등록 (`Program.cs`) + 설정 (`appsettings.json`)

## 사전 확인 (작업 전 반드시 수행)

1. `src/Web/Program.cs` 파일을 열어 전체 내용을 읽는다.
2. `src/Web/appsettings.json` 파일을 열어 전체 내용을 읽는다.
3. 아래 항목을 확인하고 기록한다:
   - [x] STEP 7이 완료되어 `ExperionFastService` 클래스가 존재하는가?
   - [x] STEP 8이 완료되어 `ExperionFastController`가 존재하는가?
   - [x] `Program.cs`에 `ExperionFastService` DI 등록이 이미 있는가? → 있으면 작업 1 건너뜀
   - [x] `Program.cs`에 `ExperionFastCleanupService` 등록이 이미 있는가? → 있으면 작업 1 건너뜀
   - [x] `appsettings.json`에 `"Fast"` 섹션이 이미 있는가? → 있으면 작업 2 건너뜀
   - [x] 기존 서비스 등록 위치(줄 번호)를 확인한다 (`builder.Services.Add...` 블록)

---

## 작업 1 — Program.cs 서비스 등록

**위치**: 기존 `builder.Services` 등록 블록 마지막 줄 아래

```csharp
// ── FastTable Service ─────────────────────────────────────────────────────────
// 중요: Singleton으로 하나만 생성 후 IExperionFastService와 IHostedService 양쪽에 같은 인스턴스 공유
builder.Services.AddSingleton<ExperionFastService>();
builder.Services.AddSingleton<IExperionFastService>(sp => sp.GetRequiredService<ExperionFastService>());
builder.Services.AddHostedService(sp => sp.GetRequiredService<ExperionFastService>());

// ── FastTable Cleanup Service ─────────────────────────────────────────────────
builder.Services.AddHostedService<ExperionFastCleanupService>();
```

---

## 작업 2 — appsettings.json 설정 추가

**위치**: `appsettings.json` 최상위 JSON 객체 안, 마지막 속성 뒤

```json
"Fast": {
  "MaxConcurrentSessions": 3,
  "MaxRowsPerSession": 5000000,
  "FlushIntervalMs": 2000
}
```

---

## 사후 확인 (작업 후 반드시 수행)

1. `Program.cs` 파일을 다시 열어 변경 내용을 읽는다.
2. `appsettings.json` 파일을 다시 열어 변경 내용을 읽는다.
3. 아래 항목을 하나씩 확인한다:
   - [x] `AddSingleton<ExperionFastService>()` 등록이 있는가?
   - [x] `AddSingleton<IExperionFastService>(sp => ...)` 등록이 있는가?
   - [x] `AddHostedService(sp => sp.GetRequiredService<ExperionFastService>())` 등록이 있는가?
   - [x] 위 3줄이 올바른 순서인가? (Singleton 먼저, HostedService 마지막)
   - [x] `AddHostedService<ExperionFastCleanupService>()` 등록이 있는가?
   - [x] `appsettings.json`에 `"Fast"` 섹션이 있고 JSON 형식이 올바른가?
4. `dotnet build src/Web` 실행 → 에러/경고 0개 확인
5. 문제가 있으면 수정 후 다시 빌드 확인

> ⚠️ 주의: `AddHostedService<ExperionFastService>()` 단독 사용 금지.  
> 이렇게 하면 Singleton과 별개의 인스턴스가 생성되어 세션 상태가 공유되지 않음.

---

## 완료 조건
- `dotnet build src/Web` 결과: 에러 0, 경고 0
- DI 등록 3줄 + Cleanup 등록 1줄 모두 존재
- `appsettings.json`에 `"Fast"` 섹션 존재

## 완료 일시: 2026-04-29

- [x] `AddSingleton<ExperionFastService>()` 등록 완료
- [x] `AddSingleton<IExperionFastService>(sp => ...)` 등록 완료
- [x] `AddHostedService(sp => sp.GetRequiredService<ExperionFastService>())` 등록 완료
- [x] `AddHostedService<ExperionFastCleanupService>()` 등록 완료
- [x] `appsettings.json`에 `"Fast"` 섹션 추가 완료
- [x] 빌드 검증 완료 (0 Error, 0 New Warning)