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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-10 20:05:28 +09:00
..
2026-01-10 15:20:39 +09:00

그누보드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에 저장

코어 수정 시 가능한 방법:

// 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.exampler2_config.php로 복사 후 R2 인증정보 입력
  3. Composer 의존성 설치:
    cd extend/r2-storage
    composer install
    

설정

r2_config.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