docs: R2 스토리지 모듈 README 추가

- 지원 기능 명시 (게시판/에디터 , 프로필 )
- 프로필 이미지 R2 미지원 사유 문서화
  - 코어 수정 없이는 extend 훅으로 불가능
  - 로컬 저장이 최선의 선택임을 명시
- 설치/설정 방법 및 테스트 결과 포함

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
kappa
2026-01-10 20:05:28 +09:00
parent 8a508a8f5f
commit 218c7cb334

View File

@@ -0,0 +1,91 @@
# 그누보드5 Cloudflare R2 Storage 모듈
그누보드5의 파일 업로드를 Cloudflare R2 스토리지로 연동하는 확장 모듈입니다.
## 특징
- **코어 수정 없음**: 그누보드 extend 훅 시스템만 사용
- **S3 호환 API**: AWS SDK for PHP 사용
- **Presigned URL**: 보안을 위한 임시 다운로드 URL 생성
- **유저별 경로**: `users/{user_id}/` 구조로 파일 분리
## 지원 기능
| 기능 | R2 저장 | 상태 |
|------|---------|------|
| 게시판 첨부파일 | ✅ | extend 훅으로 동작 |
| 에디터 이미지 (SmartEditor2 등) | ✅ | extend 훅으로 동작 |
| 프로필/회원 이미지 | ❌ | 로컬 저장 (아래 참고) |
## 제한사항
### 프로필 이미지 R2 미지원
프로필 이미지(회원 아이콘/이미지)는 **코어 수정 없이는 R2 업로드가 불가능**합니다.
**이유:**
- 그누보드 코어의 `bbs/member_image_check.php`에서 파일 업로드를 직접 처리
- 해당 파일에 extend 훅 이벤트가 존재하지 않음
- 관리자 회원수정(`adm/member_form_update.php`)도 동일
**현재 동작:**
- 프로필 이미지는 기존 방식대로 `data/member_image/` 디렉토리에 로컬 저장
- 게시판/에디터 파일만 R2에 저장
**코어 수정 시 가능한 방법:**
```php
// bbs/member_image_check.php 수정 시
// 파일 저장 후 R2 업로드 이벤트 추가 필요
run_event('member_image_upload_after', $mb_id, $file_path);
```
> ⚠️ 이 모듈은 코어 무수정 원칙을 따르므로, 프로필 이미지는 로컬 저장이 최선의 선택입니다.
## R2 저장 경로 구조
```
gnuboard-files/
├── users/{user_id}/
│ ├── board/{bo_table}/{filename} # 게시판 첨부파일
│ └── editor/{date}/{filename} # 에디터 이미지
└── public/ # 비회원 업로드 (미구현)
└── board/{bo_table}/{filename}
```
## 설치 방법
1. `extend/r2-storage/` 디렉토리를 그누보드 `extend/` 폴더에 복사
2. `r2_config.php.example``r2_config.php`로 복사 후 R2 인증정보 입력
3. Composer 의존성 설치:
```bash
cd extend/r2-storage
composer install
```
## 설정
`r2_config.php` 파일에서 설정:
```php
// R2 인증정보
define('R2_ACCOUNT_ID', 'your_account_id');
define('R2_ACCESS_KEY_ID', 'your_access_key');
define('R2_SECRET_ACCESS_KEY', 'your_secret_key');
define('R2_BUCKET_NAME', 'gnuboard-files');
// 옵션
define('R2_ENABLED', true);
define('R2_USE_PRESIGNED_URL', true);
define('R2_PRESIGNED_EXPIRY', 3600); // 1시간
```
## 테스트 결과 (2026-01-10)
- ✅ 게시판 첨부파일 업로드 → R2 저장 확인
- ✅ SmartEditor2 이미지 업로드 → R2 저장 확인
- ✅ 파일 다운로드 → Presigned URL 리다이렉트 확인
- ❌ 프로필 이미지 → 로컬 저장 (코어 수정 불가로 인한 제한)
## 라이선스
MIT License