From 218c7cb334c49024a3f2ab8c9080511bde130ba9 Mon Sep 17 00:00:00 2001 From: kappa Date: Sat, 10 Jan 2026 20:05:28 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20R2=20=EC=8A=A4=ED=86=A0=EB=A6=AC?= =?UTF-8?q?=EC=A7=80=20=EB=AA=A8=EB=93=88=20README=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 지원 기능 명시 (게시판/에디터 ✅, 프로필 ❌) - 프로필 이미지 R2 미지원 사유 문서화 - 코어 수정 없이는 extend 훅으로 불가능 - 로컬 저장이 최선의 선택임을 명시 - 설치/설정 방법 및 테스트 결과 포함 Co-Authored-By: Claude Opus 4.5 --- extend/r2-storage/README.md | 91 +++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 extend/r2-storage/README.md diff --git a/extend/r2-storage/README.md b/extend/r2-storage/README.md new file mode 100644 index 0000000..f6004e2 --- /dev/null +++ b/extend/r2-storage/README.md @@ -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