함수형 프로그래밍 100% 원칙 명시 - 하드코딩 0% 목표 강조
This commit is contained in:
parent
f46bdfe399
commit
a1c7b3b821
@ -8,7 +8,10 @@
|
|||||||
- **측정 가능한 성과**: 각 단계마다 명확한 KPI
|
- **측정 가능한 성과**: 각 단계마다 명확한 KPI
|
||||||
- **점진적 복잡도**: 단순 → 복잡으로 진화
|
- **점진적 복잡도**: 단순 → 복잡으로 진화
|
||||||
- **서비스 분리**: 단일 장애점 방지
|
- **서비스 분리**: 단일 장애점 방지
|
||||||
- **함수형 100%**: 하드코딩 0%, 순수 함수 체인
|
- **함수형 프로그래밍 100%**: 하드코딩 0% 목표. 근거없는 하드코딩 값 절대 사용 금지
|
||||||
|
- 모든 값은 설정 파일이나 환경변수에서 로드
|
||||||
|
- 순수 함수 체인으로 구성
|
||||||
|
- 상태 변경 최소화, 불변성 유지
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@ -4,6 +4,32 @@
|
|||||||
작성자: Claude (51123 서버)
|
작성자: Claude (51123 서버)
|
||||||
상태: 실행 준비 완료
|
상태: 실행 준비 완료
|
||||||
|
|
||||||
|
## 0. 개발 철학 (절대 준수)
|
||||||
|
|
||||||
|
### 함수형 프로그래밍 100% 원칙
|
||||||
|
- **하드코딩 0% 목표**: 근거없는 하드코딩 값 절대 사용 금지
|
||||||
|
- **모든 설정값은 외부화**:
|
||||||
|
- 환경변수 (.env)
|
||||||
|
- 설정 파일 (config.yaml)
|
||||||
|
- DB에서 동적 로드
|
||||||
|
- **순수 함수 체인**: 부작용 없는 함수 조합
|
||||||
|
- **불변성 유지**: 상태 변경 대신 새 객체 생성
|
||||||
|
|
||||||
|
### 예시
|
||||||
|
```python
|
||||||
|
# ❌ 잘못된 예 (하드코딩)
|
||||||
|
def analyze_emotion(text):
|
||||||
|
if len(text) > 100: # 하드코딩된 값
|
||||||
|
return "neutral"
|
||||||
|
threshold = 0.3 # 하드코딩된 임계값
|
||||||
|
|
||||||
|
# ✅ 올바른 예 (함수형)
|
||||||
|
def analyze_emotion(text: str, config: Dict) -> Dict:
|
||||||
|
max_length = config.get("max_text_length", 512)
|
||||||
|
threshold = config.get("confidence_threshold", 0.3)
|
||||||
|
# 순수 함수로 처리
|
||||||
|
```
|
||||||
|
|
||||||
## 1. 현황 분석 결과
|
## 1. 현황 분석 결과
|
||||||
|
|
||||||
### 1.1 기존 자산
|
### 1.1 기존 자산
|
||||||
@ -100,12 +126,13 @@ import torch
|
|||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
class EmotionAnalyzer:
|
class EmotionAnalyzer:
|
||||||
def __init__(self, model_path="/opt/models/emotion"):
|
def __init__(self, config: Dict):
|
||||||
self.model = AutoModelForSequenceClassification.from_pretrained(model_path)
|
# 하드코딩 없음 - 모든 값은 config에서
|
||||||
self.tokenizer = AutoTokenizer.from_pretrained(model_path)
|
self.model_path = config["model_path"]
|
||||||
self.temperature = 1.232 # from calibration
|
self.model = AutoModelForSequenceClassification.from_pretrained(self.model_path)
|
||||||
self.emotions = ['fear', 'surprise', 'anger', 'sadness',
|
self.tokenizer = AutoTokenizer.from_pretrained(self.model_path)
|
||||||
'neutral', 'happiness', 'disgust']
|
self.temperature = config["temperature_scaling"] # from calibration.json
|
||||||
|
self.emotions = config["emotion_labels"] # from config
|
||||||
|
|
||||||
async def analyze(self, text: str) -> dict:
|
async def analyze(self, text: str) -> dict:
|
||||||
inputs = self.tokenizer(text, return_tensors="pt",
|
inputs = self.tokenizer(text, return_tensors="pt",
|
||||||
@ -158,13 +185,18 @@ python convert_to_onnx.py \
|
|||||||
--optimize
|
--optimize
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 캐싱 구현
|
#### 캐싱 구현 (설정 기반)
|
||||||
```python
|
```python
|
||||||
from functools import lru_cache
|
from functools import lru_cache
|
||||||
import hashlib
|
import hashlib
|
||||||
|
|
||||||
class CachedEmotionAnalyzer(EmotionAnalyzer):
|
class CachedEmotionAnalyzer(EmotionAnalyzer):
|
||||||
@lru_cache(maxsize=1000)
|
def __init__(self, config: Dict):
|
||||||
|
super().__init__(config)
|
||||||
|
self.cache_size = config.get("cache_size", 1000)
|
||||||
|
self.cache_ttl = config.get("cache_ttl_seconds", 300)
|
||||||
|
|
||||||
|
@lru_cache(maxsize=None) # maxsize는 동적으로 관리
|
||||||
def _analyze_cached(self, text_hash: str):
|
def _analyze_cached(self, text_hash: str):
|
||||||
# 실제 분석 로직
|
# 실제 분석 로직
|
||||||
pass
|
pass
|
||||||
@ -229,9 +261,17 @@ locust -f tests/load_test.py --users 10 --spawn-rate 2
|
|||||||
| 낮은 정확도 (56.3%) | 낮 | confidence 임계값 설정 |
|
| 낮은 정확도 (56.3%) | 낮 | confidence 임계값 설정 |
|
||||||
| Cold start | 낮 | 서비스 시작 시 프리로드 |
|
| Cold start | 낮 | 서비스 시작 시 프리로드 |
|
||||||
|
|
||||||
### 6.2 폴백 전략
|
### 6.2 폴백 전략 (설정 기반)
|
||||||
- confidence < 0.3일 때 neutral로 분류
|
```yaml
|
||||||
- 엔트로피 > 2.8일 때 "복잡한 감정" 표시
|
# config.yaml
|
||||||
|
fallback:
|
||||||
|
confidence_threshold: 0.3 # DB나 실험으로 결정된 값
|
||||||
|
entropy_threshold: 2.8 # 데이터 분석으로 도출된 값
|
||||||
|
default_emotion: "neutral" # 기본값
|
||||||
|
skip_on_error: true # 오류 시 동작
|
||||||
|
```
|
||||||
|
- confidence < threshold일 때 neutral로 분류
|
||||||
|
- 엔트로피 > threshold일 때 "복잡한 감정" 표시
|
||||||
- 오류 시 감정 분석 스킵하고 진행
|
- 오류 시 감정 분석 스킵하고 진행
|
||||||
|
|
||||||
## 7. 작업 분담
|
## 7. 작업 분담
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user