diff --git a/troubleshooting/250812_happybell80_함수형전환및포트변경.md b/troubleshooting/250812_happybell80_함수형전환및포트변경.md new file mode 100644 index 0000000..dba84b9 --- /dev/null +++ b/troubleshooting/250812_happybell80_함수형전환및포트변경.md @@ -0,0 +1,164 @@ +# 함수형 프로그래밍 전환 및 skill-embedding 포트 변경 + +**날짜**: 2025-08-12 +**작업자**: happybell80 & Claude (로컬 개발자) +**작업 범위**: rb10508_micro, skill-embedding + +## 오후 2시 30분 + +### rb10508_micro 함수형 프로그래밍 전환 + +#### 배경 +- os.getenv() 호출이 여러 파일에 산재 +- 환경변수 기본값 하드코딩 문제 +- 함수형 프로그래밍 원칙 위반 + +#### 작업 내용 + +**1. config.py 환경변수 중앙화** +- 모든 환경변수를 config.py로 통합 +- Skill URLs, 감정 시스템, 프라이버시, 스케일링, 모니터링 설정 추가 +- SKILL_EMBEDDING_URL 포트 8015 → 8515 변경 + +**2. 감정 모듈 수정** +```python +# 변경 전 +BASIC_EMOTIONS = os.getenv('BASIC_EMOTIONS', 'joy,sadness').split(',') + +# 변경 후 +BASIC_EMOTIONS = settings.BASIC_EMOTIONS.split(',') +``` + +**3. growth.py 완전 함수형 전환** +- NamedTuple 사용 (Stats) +- 순수 함수로 변경 (get_default_stats, gain_experience) +- 레거시 클래스는 래퍼로 유지 (호환성) + +**4. 위험한 부분 제외** +- SlackService: Slack SDK 요구사항으로 클래스 유지 +- HTTPEmbeddingFunction: ChromaDB 인터페이스 요구사항 + +#### 결과 +- ✅ 환경변수 중앙 관리 +- ✅ 함수형 원칙 준수 +- ✅ 테스트 용이성 향상 + +## 오후 2시 45분 + +### skill-embedding 서비스 포트 변경 (8015 → 8515) + +#### 변경 파일 +1. **config.py**: 기본 포트 8515 +2. **docker-compose.yml**: 포트 매핑, 환경변수, 헬스체크 +3. **.gitea/workflows/deploy.yml**: 헬스체크 URL +4. **test_api.py**: 모든 테스트 URL +5. **README.md**: 문서 업데이트 +6. **http_embedding_function.py**: 기본 URL + +#### 헬스체크 표준화 (/healthz) +- 단순 헬스체크: `/healthz` (서비스 생존 확인) +- 상세 헬스체크: `/health` (모델 정보 포함) +- k8s/nginx 표준 준수 + +## 오후 2시 50분 + +### 배포 시 문제 발생 + +#### 문제 1: docker-compose.yml version 속성 +```yaml +# 문제 +version: '3.8' # deprecated 경고 + +# 해결 +# version 라인 제거 +``` + +#### 문제 2: 컨테이너 이름 충돌 +- 기존 8015 포트 서비스가 실행 중 +- 같은 이름(skill-embedding)으로 새 컨테이너 생성 실패 +- 24서버팀이 `docker rm -f skill-embedding` 실행 후 해결 + +#### 교훈 +- **로컬 개발자는 서버 작업 안내만 제공** +- **서버 작업은 24서버팀에게 요청** +- **테스트 시 실제 런타임 환경 확인 필요** + +## 오후 3시 00분 + +### 테스트 부족 문제 + +#### 로컬 테스트의 한계 +- Python 문법 검사(AST)만 수행 +- Docker 실행 환경 테스트 안함 +- 포트 충돌 확인 안함 + +#### 필요했던 테스트 +```bash +# 포트 사용 확인 +ss -tulpn | grep 8515 + +# Docker compose 검증 +docker compose config + +# 실제 헬스체크 +curl http://localhost:8515/healthz +``` + +## 오후 3시 15분 + +### 최종 정리 + +#### 성공한 작업 +1. **rb10508_micro 함수형 전환** + - config.py 중앙화 완료 + - growth.py 순수 함수형 + - 위험 부분 제외 (SlackService, HTTPEmbeddingFunction) + +2. **skill-embedding 포트 변경** + - 8015 → 8515 완료 + - /healthz 표준화 + - docker-compose.yml 개선 + +#### 실수와 교훈 +1. **테스트 부족** + - 문법 검사만으로 부족 + - 런타임 테스트 필요 + +2. **역할 혼동** + - 로컬 개발자가 서버 작업 시도 (❌) + - 24서버팀에게 요청해야 함 (✅) + +3. **배포 준비 미흡** + - 기존 서비스 확인 필요 + - 컨테이너 충돌 예상 필요 + +#### 개선 사항 +- 배포 전 체크리스트 작성 +- 24서버팀과 사전 협의 +- 실제 환경 테스트 강화 + +--- + +## 교훈 + +1. **함수형 프로그래밍 원칙** + - 환경변수는 중앙에서 관리 + - 순수 함수 우선 + - 외부 라이브러리 요구사항은 예외 + +2. **포트 변경 시 주의사항** + - 기존 서비스 확인 + - 모든 관련 파일 동기화 + - Gitea Actions 파일 누락 주의 + +3. **로컬/서버 역할 분리** + - **로컬 개발자**: 코드 작성, 테스트, 푸시 + - **24서버팀**: 서버 작업, 컨테이너 관리, 배포 + +4. **테스트 중요성** + - 문법 검사 < 단위 테스트 < 통합 테스트 < 런타임 테스트 + - 실제 환경과 유사한 테스트 환경 필요 + +--- + +*작성: 2025-08-12 15:15* \ No newline at end of file