docs: UUID 문제의 근본 원인 분석 추가

- 2025년 8월 9일 테스트용 하드코딩 UUID가 문제의 시작
- gen_random_uuid() 사용하지 않고 가짜 UUID 사용한 것이 원인
- 테스트 데이터가 프로덕션에 남아 연쇄 문제 발생
- PostgreSQL UUID 올바른 사용법 교훈 추가
This commit is contained in:
happybell80 2025-08-18 13:54:03 +09:00
parent 1793249fa5
commit e291716847

View File

@ -142,10 +142,33 @@ def resolve_username(user_id: str) -> str:
- 프론트 검색 시: `user_id = "happybell80"` (username) - 프론트 검색 시: `user_id = "happybell80"` (username)
- where 조건 `{"user_id": user_id}` 일치하지 않음 - where 조건 `{"user_id": user_id}` 일치하지 않음
### 원인 ### 근본 원인 발견
- 250809, 250812에도 같은 문제 발생 **2025년 8월 9일의 잘못된 결정이 문제의 시작**:
- User ID 체계 3가지 혼재 (UUID, username, email)
- 각 시스템이 다른 ID 사용 ```sql
-- 잘못된 예: 테스트용 UUID 하드코딩 (250809_happybell80_robing-gateway구현.md)
INSERT INTO users (id, email, name) VALUES
('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa'::uuid, 'goeun2dc@gmail.com', '김종태'),
('bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb'::uuid, '0914eagle@gmail.com', '전희재'),
('cccccccc-cccc-cccc-cccc-cccccccccccc'::uuid, 'hhyong91@gmail.com', '황한용');
-- 올바른 방법: gen_random_uuid() 사용
INSERT INTO users (id, email, name, username) VALUES
(gen_random_uuid(), 'goeun2dc@gmail.com', '김종태', 'happybell80');
-- 실제 UUID 생성: 'e7a9f3c2-8b4d-4f2e-a1b3-9c8d7e6f5a4b'
```
### 문제의 연쇄 반응
1. **테스트 데이터가 프로덕션에**: 임시 UUID가 영구 사용
2. **프론트엔드 혼란**: user_id 불명확 → "default_user" 하드코딩
3. **ChromaDB 컬렉션명 혼란**: UUID? username? email?
4. **매핑 지옥**: 여러 식별자 연결하는 복잡한 시스템 필요
### 왜 이런 실수를 했나
- OAuth 로그인 시 UUID 자동 생성 대신
- 개발 편의를 위해 알아보기 쉬운 UUID 사용
- aaaa..., bbbb..., cccc... 패턴으로 테스트
- username 시스템은 나중에 급하게 추가 (8월 9일)
### 해결 ### 해결
```python ```python
@ -170,4 +193,22 @@ results = collection.query(
### 6. **ChromaDB 메타데이터 일관성** ### 6. **ChromaDB 메타데이터 일관성**
- 저장 시와 검색 시 키 일치 확인 - 저장 시와 검색 시 키 일치 확인
- username vs user_id 명확히 구분 - username vs user_id 명확히 구분
- where 조건 디버깅 로그 추가 권장 - where 조건 디버깅 로그 추가 권장
### 7. **테스트 데이터를 프로덕션에 사용 금지**
- 개발 편의를 위한 하드코딩 UUID 사용 금지
- 항상 `gen_random_uuid()` 같은 실제 함수 사용
- 테스트 데이터는 명확히 구분하고 제거
### 8. **PostgreSQL UUID 올바른 사용법**
```sql
-- ❌ 잘못된 방법: 하드코딩
INSERT INTO users (id) VALUES ('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa');
-- ✅ 올바른 방법: 함수 사용
INSERT INTO users (id) VALUES (gen_random_uuid());
-- 또는 테이블 정의 시 DEFAULT 설정
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid()
);
```