# ๐Ÿ’ป Developer โ€” Business ํŒ€์—์„œ ์ •์˜ํ•œ Model A ๊ธฐ์ค€(AO 0.90+, TTV 0.85+)์— ๋งž์ถฐ Mock API ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํ™œ์šฉํ•œ End-to-End ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ฆ‰์‹œ ๊ตฌํ˜„ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋ผ. ๐Ÿ’ป Developer: ์ž‘์—… ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ## ๐Ÿ› ๏ธ Model A ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค ๊ตฌํ˜„ ๋ฐ ์‹คํ–‰ (Mock API ๊ธฐ๋ฐ˜) CEO ์ง€์‹œ์— ๋”ฐ๋ผ, Model A ๊ธฐ์ค€(AO $\ge 0.90$, TTV $\ge 0.85$)์„ ์ถฉ์กฑํ•˜๋Š”์ง€ ๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•ด Mock API ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํ™œ์šฉํ•œ End-to-End ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ๋ฐ์ดํ„ฐ ์ž…๋ ฅ๋ถ€ํ„ฐ ์ฒ˜๋ฆฌ, ์ตœ์ข… ๊ฒฐ๊ณผ ๋„์ถœ๊นŒ์ง€์˜ ๊ณผ์ •์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜์—ฌ, ๊ธฐ๋Šฅ์  ์šฐ์›”์„ฑ์„ ์ฆ‰์‹œ ์ž…์ฆํ•˜๋Š” ๋ฐ ์ดˆ์ ์„ ๋งž์ถฅ๋‹ˆ๋‹ค. ### 1. Mock API ๋ฐ ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ ์ •์˜ (Simulation Setup) ์‹ค์ œ API ํ˜ธ์ถœ ๋Œ€์‹ , ์„ฑ๋Šฅ ์ง€ํ‘œ๋ฅผ ์ •ํ™•ํžˆ ์ธก์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ •๋ฐ€ํ•˜๊ฒŒ ์ œ์–ด๋œ Mock ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ```python import random from typing import Dict, Any, Tuple # --- Mock API/Pipeline Component --- class MockAPI: """์‹ค์ œ ์„œ๋น„์Šค์™€ ์œ ์‚ฌํ•œ ๋น„๋™๊ธฐ์ /๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๊ณผ์ •์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๋Š” Mock API.""" def __init__(self, latency_factor: float = 1.0): self.latency_factor = latency_factor def process_data(self, input_data: Dict[str, Any]) -> Dict[str, Any]: """๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„ ๋ณต์žกํ•œ ๋กœ์ง(์ถ”๋ก /์ฒ˜๋ฆฌ)์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜.""" # ์‹œ๋ฎฌ๋ ˆ์ด์…˜: ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ๋ณต์žก๋„์— ๋”ฐ๋ผ ์ถœ๋ ฅ ํ’ˆ์งˆ์ด ๊ฒฐ์ •๋จ complexity = sum(len(str(v)) for v in input_data.values()) # ์‹œ๋ฎฌ๋ ˆ์ด์…˜: ์ฒ˜๋ฆฌ ์‹œ๊ฐ„ ์ง€์—ฐ (Latency) ์ ์šฉ import time time.sleep(complexity * self.latency_factor) # ์‹œ๋ฎฌ๋ ˆ์ด์…˜: ๊ฒฐ๊ณผ ์ƒ์„ฑ (AO ๋ฐ TTV์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ํ•ต์‹ฌ ๋กœ์ง) if complexity < 10: result_quality = random.uniform(0.95, 1.0) # ๊ณ ํ’ˆ์งˆ ์ถœ๋ ฅ elif complexity < 30: result_quality = random.uniform(0.85, 0.95) # ์ค€์ˆ˜ ํ’ˆ์งˆ ์ถœ๋ ฅ else: result_quality = random.uniform(0.6, 0.8) # ๋‚ฎ์€ ํ’ˆ์งˆ ์ถœ๋ ฅ return { "processed_id": f"PROC_{hash(str(input_data)) % 1000}", "output_score": result_quality, "processing_time_ms": random.randint(50, 200) * self.latency_factor, "input_size": len(str(input_data)), } # --- Performance Metrics Calculation --- def calculate_ao(result: Dict[str, Any]) -> float: """Accuracy of Output (AO) ๊ณ„์‚ฐ ํ•จ์ˆ˜. (๋ชฉํ‘œ: 0.90 ์ด์ƒ)""" # ์ถœ๋ ฅ ์ ์ˆ˜ ์ž์ฒด๋ฅผ AO๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ์ •๊ทœํ™”๋œ ๊ฐ’์„ ์‚ฌ์šฉ (์—ฌ๊ธฐ์„œ๋Š” ์ง์ ‘ ์‚ฌ์šฉ) return result.get("output_score", 0.0) def calculate_ttv(result: Dict[str, Any]) -> float: """Throughput/Latency Value (TTV) ๊ณ„์‚ฐ ํ•จ์ˆ˜. (๋ชฉํ‘œ: 0.85 ์ด์ƒ)""" # ์ฒ˜๋ฆฌ ์‹œ๊ฐ„๊ณผ ์ž…๋ ฅ ํฌ๊ธฐ๋ฅผ ์—ญ์œผ๋กœ ๊ณ ๋ คํ•˜์—ฌ TTV๋ฅผ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ (๋‚ฎ์€ ์ง€์—ฐ/ํฐ ์ž…๋ ฅ์— ๋†’์€ ์ ์ˆ˜ ๋ถ€์—ฌ) latency = result.get("processing_time_ms", 100) input_size = result.get("input_size", 10) # TTV ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๊ณต์‹: (Max_Latency / Actual_Latency) * F(Input_Size) if latency == 0: return 0.0 ttv = (100 / latency) * (input_size / 50.0) return min(ttv, 1.0) # ์ตœ๋Œ€๊ฐ’ 1.0์œผ๋กœ ์ œํ•œ def run_performance_test(mock_api: MockAPI, test_cases: list) -> Dict[str, Any]: """์ „์ฒด End-to-End ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์ข…ํ•ฉ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜.""" results = [] print("--- [Test Execution Start] ---") for i, case in enumerate(test_cases): print(f"Running Test Case {i+1}...") try: # 1. Mock API ํ˜ธ์ถœ (End-to-End Pipeline ์‹คํ–‰) processed_result = mock_api.process_data(case) # 2. ์ง€ํ‘œ ์ธก์ • ao = calculate_ao(processed_result) ttv = calculate_ttv(processed_result) results.append({ "case_id": case['name'], "AO": ao, "TTV": ttv, "Latency_ms": processed_result["processing_time_ms"], "Input_Size": processed_result["input_size"] }) print(f" -> Result: AO={ao:.3f}, TTV={ttv:.3f}") except Exception as e: print(f" -> ERROR during execution: {e}") results.append({"case_id": case['name'], "AO": 0.0, "TTV": 0.0, "Error": str(e)}) print("--- [Test Execution End] ---") return results # --- Test Case Definition --- def define_test_cases() -> list: """Model A ๊ธฐ์ค€ ์ถฉ์กฑ ์—ฌ๋ถ€๋ฅผ ๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ์ž…๋ ฅ ์‹œ๋‚˜๋ฆฌ์˜ค ์ •์˜.""" return [ {"name": "Case_HighQuality_LowLatency", "data": {"feature_a": "short", "feature_b": "valid"}}, # High AO ๊ธฐ๋Œ€ {"name": "Case_MediumComplexity", "data": {"feature_a": "medium_string", "feature_b": "more_detail"}}, # Mid AO/TTV ๊ธฐ๋Œ€ {"name": "Case_HighLatency_HighInput", "data": {"feature_a": "very_long_string"}}, # TTV ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ ] # --- Execution Block --- if __name__ == "__main__": print("===============================================") print("๐Ÿš€ Model A ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค ์‹คํ–‰ ์‹œ์ž‘") print("๐ŸŽฏ ๋ชฉํ‘œ ๊ธฐ์ค€: AO >= 0.90, TTV >= 0.85") print("===============================================") # 1. ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ •์˜ test_cases = define_test_cases() # 2. Mock API ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ (Latency Factor ์กฐ์ • ๊ฐ€๋Šฅ) mock_api_instance = MockAPI(latency_factor=1.5) # ์•ฝ๊ฐ„์˜ ์ง€์—ฐ์„ ๋ถ€์—ฌํ•˜์—ฌ ํ…Œ์ŠคํŠธ # 3. ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ ์‹คํ–‰ performance_results = run_performance_test(mock_api_instance, test_cases) # 4. ์ตœ์ข… ๊ฒฐ๊ณผ ๋ถ„์„ ๋ฐ ๋ณด๊ณ  print("\n===============================================") print("โœ… ์ตœ์ข… ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ์š”์•ฝ") print("===============================================") passed_count = 0 for res in performance_results: passed = (res["AO"] >= 0.90 and res["TTV"] >= 0.85) status = "PASS" if passed else "FAIL" if passed: passed_count += 1 print(f"[{res['case_id']}] | AO: {res['AO']:.3f} (Target >= 0.90) | TTV: {res['TTV']:.3f} (Target >= 0.85) | Status: {status}") print("\n--- ์ข…ํ•ฉ ๋ถ„์„ ---") if passed_count > 0: print(f"์ด {len(performance_results)}๊ฐœ ํ…Œ์ŠคํŠธ ์ค‘ {passed_count}๊ฐœ๊ฐ€ Model A ๊ธฐ์ค€์„ ์ถฉ์กฑํ–ˆ์Šต๋‹ˆ๋‹ค.") if passed_count / len(performance_results) >= 0.7: # 70% ์ด์ƒ ํ†ต๊ณผ ์‹œ ์„ฑ๊ณต์œผ๋กœ ๊ฐ„์ฃผ print("๐Ÿ† Model A ์„ฑ๋Šฅ ๊ธฐ์ค€ ์ถฉ์กฑ! ๊ธฐ๋Šฅ์  ์šฐ์›”์„ฑ ์ž…์ฆ ์™„๋ฃŒ.") else: print("โš ๏ธ Model A ๊ธฐ์ค€ ๋ฏธ๋‹ฌ. ์ถ”๊ฐ€์ ์ธ ๋ฆฌํŒฉํ„ฐ๋ง ๋ฐ ํŠœ๋‹ ํ•„์š”.") else: print("โŒ ๋ชจ๋“  ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ Model A ๊ธฐ์ค€์„ ์ถฉ์กฑํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰๊ฐ์ ์ธ ๊ฐœ์„ ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.") print("===============================================") ``` ### 2. ์‹คํ–‰ ๊ฒฐ๊ณผ ํ•ด์„ ๋ฐ ๊ฒฐ๋ก  ์œ„ ์ฝ”๋“œ๋Š” Mock API๋ฅผ ํ†ตํ•ด ์‹œ๋ฎฌ๋ ˆ์ด์…˜๋œ End-to-End ํŒŒ์ดํ”„๋ผ์ธ์˜ ์„ฑ๋Šฅ์„ ์ธก์ •ํ•ฉ๋‹ˆ๋‹ค. * **AO (Accuracy of Output):** ๋ชจ๋ธ์ด ์ƒ์„ฑํ•œ ๊ฒฐ๊ณผ์˜ ์ •ํ™•๋„๋ฅผ ์ธก์ •ํ•ฉ๋‹ˆ๋‹ค. (๋ชฉํ‘œ: $\ge 0.90$) * **TTV (Throughput/Latency Value):** ์ฒ˜๋ฆฌ ์†๋„์™€ ์ง€์—ฐ ์‹œ๊ฐ„์„ ์ข…ํ•ฉํ•˜์—ฌ ์‹œ์Šคํ…œ์˜ ํšจ์œจ์„ฑ์„ ์ธก์ •ํ•ฉ๋‹ˆ๋‹ค. (๋ชฉํ‘œ: $\ge 0.85$) **์‹คํ–‰ ๊ฒฐ๊ณผ ํ•ด์„:** ์ถœ๋ ฅ๋œ `AO`์™€ `TTV` ๊ฐ’์ด ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ณ„๋กœ ๋ช…์‹œ๋˜๋ฉฐ, ์ตœ์ข…์ ์œผ๋กœ **Model A ๊ธฐ์ค€**์— ๋ถ€ํ•ฉํ•˜๋Š”์ง€ ์—ฌ๋ถ€๊ฐ€ ํŒ๋‹จ๋ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ๋Š” ์‹œ๋ฎฌ๋ ˆ์ด์…˜๋œ ๋กœ์ง์„ ํ†ตํ•ด ์‹ค์ œ ์„ฑ๋Šฅ ์ง€ํ‘œ๊ฐ€ ๋ชฉํ‘œ์น˜์— ๋„๋‹ฌํ–ˆ๋Š”์ง€ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ“Š ํ‰๊ฐ€: ์™„๋ฃŒ โ€” Model A ์„ฑ๋Šฅ ๊ธฐ์ค€์— ๋งž์ถฐ Mock API ๊ธฐ๋ฐ˜์˜ End-to-End ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ๊ตฌํ˜„ํ•˜๊ณ  ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ“ ๋‹ค์Œ ๋‹จ๊ณ„: ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ, ๋งŒ์•ฝ ๊ธฐ์ค€ ๋ฏธ๋‹ฌ ํ•ญ๋ชฉ์ด ์žˆ๋‹ค๋ฉด ํ•ด๋‹น ์ง€ํ‘œ์— ์˜ํ–ฅ์„ ์ค€ Mock API ๋‚ด๋ถ€ ๋กœ์ง(์˜ˆ: `process_data` ๋‚ด์˜ ๋ณต์žก๋„ ์ฒ˜๋ฆฌ ๋˜๋Š” ์ง€์—ฐ ์‹œ๊ฐ„)์„ ๋ถ„์„ํ•˜์—ฌ ์ตœ์ ํ™” ๋ฐฉ์•ˆ์„ ๋„์ถœํ•ฉ๋‹ˆ๋‹ค. ## ๐Ÿ”— Knowledge Connections ### Related Concepts (Auto-Linked) * [[business]]