# 데이터베이스 Collation 통일 가이드

## 개요
모든 테이블과 컬럼의 collation을 `utf8mb4_unicode_ci`로 통일하여 이모지 및 다국어 지원을 완벽하게 합니다.

## 사전 준비

### 1. Python 설치 확인
```bash
python --version
```

### 2. pymysql 패키지 설치
```bash
pip install pymysql
```

## 사용 방법

### 1단계: DB 접속 정보 수정
`fix_collation.py` 파일의 13-18줄을 실제 DB 정보로 수정하세요:

```python
DB_CONFIG = {
    'host': 'localhost',          # DB 호스트
    'user': 'root',                # DB 사용자명
    'password': 'your_password',   # DB 비밀번호
    'database': 'app_master',      # DB 이름
    'charset': 'utf8mb4'
}
```

### 2단계: DRY RUN (분석만 수행)
실제 변경 없이 어떤 테이블/컬럼이 수정되어야 하는지 확인:

```bash
cd C:\Users\GIGA\Desktop\works\kscompany\app-master-back
python fix_collation.py
```

출력 예시:
```
================================================================================
데이터베이스 Collation 분석 시작
================================================================================

총 26개의 테이블을 찾았습니다.

================================================================================
분석 결과
================================================================================

✓ 테이블: babynote_diaries
   테이블 Collation: utf8mb4_unicode_ci
   문자열 컬럼:
      ✓ id (varchar(36)) - utf8mb4_unicode_ci
      ✓ content (text) - utf8mb4_unicode_ci

✗ 테이블: old_table
   테이블 Collation: utf8mb4_general_ci
   문자열 컬럼:
      ✗ name (varchar(255)) - utf8mb4_general_ci

================================================================================
수정 필요: 5개 테이블
대상 테이블: old_table, another_table, ...
================================================================================
```

### 3단계: 실제 실행
분석 결과를 확인한 후 실제로 collation을 수정:

```bash
python fix_collation.py --execute
```

확인 메시지가 나타나면 `yes` 입력:
```
⚠️  실제로 데이터베이스를 수정하시겠습니까? (yes/no): yes
```

## 실행 예시 (Windows)

### PowerShell 사용
```powershell
cd C:\Users\GIGA\Desktop\works\kscompany\app-master-back

# 1. 패키지 설치
pip install pymysql

# 2. DRY RUN
python fix_collation.py

# 3. 실제 실행
python fix_collation.py --execute
```

### CMD 사용
```cmd
cd C:\Users\GIGA\Desktop\works\kscompany\app-master-back

rem 1. 패키지 설치
pip install pymysql

rem 2. DRY RUN
python fix_collation.py

rem 3. 실제 실행
python fix_collation.py --execute
```

## 주의사항

### 백업 필수!
실행 전 반드시 데이터베이스를 백업하세요:
```bash
mysqldump -u root -p app_master > backup_$(date +%Y%m%d_%H%M%S).sql
```

### 서버 중지 권장
데이터베이스 수정 중에는 애플리케이션 서버를 중지하는 것을 권장합니다:
```bash
pm2 stop app-master-backend
```

수정 완료 후 재시작:
```bash
pm2 restart app-master-backend
```

## utf8mb4_unicode_ci vs utf8mb4_general_ci

### utf8mb4_unicode_ci (권장) ✓
- ✅ 이모지 완벽 지원 😀🎉❤️
- ✅ 한글, 일본어, 중국어 등 모든 유니코드 정확하게 지원
- ✅ 유니코드 정렬 규칙 완벽 준수
- ⚠️ 약간 느림 (체감 불가능한 수준)

### utf8mb4_general_ci
- ⚠️ 간단한 정렬만 지원
- ⚠️ 일부 유니코드 문자 부정확
- ✅ 약간 빠름 (체감 불가능한 수준)

## 트러블슈팅

### 에러: pymysql 모듈을 찾을 수 없음
```bash
pip install pymysql
# 또는
python -m pip install pymysql
```

### 에러: 데이터베이스 연결 실패
- DB 접속 정보 확인 (host, user, password, database)
- MySQL 서버 실행 상태 확인
- 방화벽 설정 확인

### 에러: 권한 부족
- DB 사용자에게 ALTER 권한이 있는지 확인
- root 계정 또는 관리자 권한으로 실행

## 실행 후 확인

### 1. 백엔드 서버 재시작
```bash
pm2 restart app-master-backend
pm2 logs app-master-backend
```

### 2. API 테스트
```bash
curl "https://app-master.officialsite.kr/api/babynote/diaries/all/popular?page=1&limit=5"
```

### 3. 앱에서 확인
- 투데이 섹션에 게시물 표시 확인
- 이야기 섹션에 게시물 표시 확인
- 이모지가 포함된 게시물 작성/조회 테스트

## 완료!
모든 테이블과 컬럼이 `utf8mb4_unicode_ci`로 통일되어 이모지와 다국어를 완벽하게 지원합니다! 🎉
