docs: R2 스토리지 모듈 README 추가
- 지원 기능 명시 (게시판/에디터 ✅, 프로필 ❌) - 프로필 이미지 R2 미지원 사유 문서화 - 코어 수정 없이는 extend 훅으로 불가능 - 로컬 저장이 최선의 선택임을 명시 - 설치/설정 방법 및 테스트 결과 포함 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
91
extend/r2-storage/README.md
Normal file
91
extend/r2-storage/README.md
Normal 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
|
||||||
Reference in New Issue
Block a user