From cb53f6c9126a567f2a1cd5018a6bec620944b818 Mon Sep 17 00:00:00 2001 From: Hermes Agent Date: Thu, 7 May 2026 02:53:43 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20Small-Medium=20=EC=8B=9C=EB=82=98?= =?UTF-8?q?=EB=A6=AC=EC=98=A4=20=EC=B6=94=EA=B0=80=20(1KB=20=C3=97=201000?= =?UTF-8?q?=ED=9A=8C,=20AI=20Agent=20RPC=20=EA=B2=BD=EB=9F=89)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - types.go: ScenarioSmallMedium 상수 추가, switch 문으로 모든 시나리오 함수 확장 - screen_config.go: 시나리오 2-way 토글 → 3-way 순환, 숫자키 1/2/3 지원 - screen_about.go: About 화면에 Small-Medium 시나리오 설명 추가 - README.md: 파라미터 표 업데이트 --- src/README.md | 2 +- src/internal/ui/screen_about.go | 4 +++- src/internal/ui/screen_config.go | 13 +++++++++---- src/internal/ui/types.go | 30 ++++++++++++++++++++++-------- 4 files changed, 35 insertions(+), 14 deletions(-) diff --git a/src/README.md b/src/README.md index 4b5e080..8475b71 100644 --- a/src/README.md +++ b/src/README.md @@ -118,7 +118,7 @@ src/ | 파라미터 | 범위 | 단위/단계 | |---------|-----|----------| -| 시나리오 | Small-Many / Large-Few | 토글 | +| 시나리오 | Small-Many / Small-Medium / Large-Few | 3-way 순환 (←/→, 1/2/3) | | 링크 지연 (편도) | 0 – 500 | ms (10ms 단위) | | 패킷 손실율 | 0.0 – 5.0 | % (0.5% 단위) | | 대역폭 | 1, 5, 10, 25, 50, 100, 250, 500, 1000 | Mbps (이산) | diff --git a/src/internal/ui/screen_about.go b/src/internal/ui/screen_about.go index 9428b45..36bab16 100644 --- a/src/internal/ui/screen_about.go +++ b/src/internal/ui/screen_about.go @@ -42,7 +42,9 @@ func (a App) viewAbout() string { rows = append(rows, sectionHeader("📦 워크로드 시나리오")) rows = append(rows, " ① "+selectedItemStyle.Render("Small-Many")+" — 1KB 메시지 × 10,000회 / 디바이스") rows = append(rows, " "+helpStyle.Render("AI Agent RPC 패턴: 격리된 에이전트 간 빈번한 단발성 호출")) - rows = append(rows, " ② "+selectedItemStyle.Render("Large-Few")+" — 1MB 메시지 × 50회 / 디바이스") + rows = append(rows, " ② "+selectedItemStyle.Render("Small-Medium")+" — 1KB 메시지 × 1,000회 / 디바이스") + rows = append(rows, " "+helpStyle.Render("AI Agent RPC 경량: 연결 수립 비용과 RTT가 더 지배적인 환경")) + rows = append(rows, " ③ "+selectedItemStyle.Render("Large-Few")+" — 1MB 메시지 × 50회 / 디바이스") rows = append(rows, " "+helpStyle.Render("IoT 이미지 전송: 해충 탐지 ROI, 센서 클립 등")) rows = append(rows, "") diff --git a/src/internal/ui/screen_config.go b/src/internal/ui/screen_config.go index 4fb56f3..eb10129 100644 --- a/src/internal/ui/screen_config.go +++ b/src/internal/ui/screen_config.go @@ -51,6 +51,8 @@ func (a App) updateConfig(m tea.KeyMsg) (App, tea.Cmd) { case "1": a.config.Scenario = ScenarioSmallMany case "2": + a.config.Scenario = ScenarioSmallMedium + case "3": a.config.Scenario = ScenarioLargeFew } return a, nil @@ -59,10 +61,13 @@ func (a App) updateConfig(m tea.KeyMsg) (App, tea.Cmd) { func (a *App) adjustParam(delta int) { switch a.configIdx { case pIdxScenario: - // 토글 - if a.config.Scenario == ScenarioSmallMany { + // 3-way 순환: small-many → small-medium → large-few → small-many + switch a.config.Scenario { + case ScenarioSmallMany: + a.config.Scenario = ScenarioSmallMedium + case ScenarioSmallMedium: a.config.Scenario = ScenarioLargeFew - } else { + case ScenarioLargeFew: a.config.Scenario = ScenarioSmallMany } case pIdxDelay: @@ -141,7 +146,7 @@ func (a App) viewConfig() string { rows = append(rows, a.paramRow(pIdxScenario, "시나리오", a.config.ScenarioLabel(), - fmt.Sprintf("디바이스당 %dKB × %d 메시지 (총 목표 %d개/시스템)", + fmt.Sprintf("[1/2/3] 디바이스당 %dKB × %d 메시지 (총 목표 %d개/시스템)", a.config.MessageSizeKB(), a.config.MessageCount(), a.config.MessageCount()*a.config.DeviceCount, diff --git a/src/internal/ui/types.go b/src/internal/ui/types.go index b783855..f04719f 100644 --- a/src/internal/ui/types.go +++ b/src/internal/ui/types.go @@ -6,8 +6,9 @@ import "time" type Scenario string const ( - ScenarioSmallMany Scenario = "small-many" // 1KB × 10000회 (AI Agent RPC) - ScenarioLargeFew Scenario = "large-few" // 1MB × 50회 (IoT 이미지 전송) + ScenarioSmallMany Scenario = "small-many" // 1KB × 10000회 (AI Agent RPC) + ScenarioSmallMedium Scenario = "small-medium" // 1KB × 1000회 (AI Agent RPC 경량) + ScenarioLargeFew Scenario = "large-few" // 1MB × 50회 (IoT 이미지 전송) ) // System 비교 대상 시스템 @@ -45,26 +46,39 @@ func DefaultConfig() Config { // MessageSizeKB 시나리오별 메시지 크기 func (c Config) MessageSizeKB() int { - if c.Scenario == ScenarioSmallMany { + switch c.Scenario { + case ScenarioSmallMany, ScenarioSmallMedium: return 1 + case ScenarioLargeFew: + return 1024 } - return 1024 + return 1 } // MessageCount 시나리오별 디바이스당 메시지 개수 func (c Config) MessageCount() int { - if c.Scenario == ScenarioSmallMany { + switch c.Scenario { + case ScenarioSmallMany: return 10000 + case ScenarioSmallMedium: + return 1000 + case ScenarioLargeFew: + return 50 } - return 50 + return 1000 } // ScenarioLabel 표시용 시나리오 이름 func (c Config) ScenarioLabel() string { - if c.Scenario == ScenarioSmallMany { + switch c.Scenario { + case ScenarioSmallMany: return "Small-Many · 1KB × 10000회 (AI Agent RPC)" + case ScenarioSmallMedium: + return "Small-Medium · 1KB × 1000회 (AI Agent RPC 경량)" + case ScenarioLargeFew: + return "Large-Few · 1MB × 50회 (IoT 이미지 전송)" } - return "Large-Few · 1MB × 50회 (IoT 이미지 전송)" + return string(c.Scenario) } // HasSelectedSystem 최소 한 개 시스템 선택 여부