79 lines
3.7 KiB
Markdown
79 lines
3.7 KiB
Markdown
# 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) |