| 자료 유형 | 모듈 |
|---|---|
| 간단한 소개 | 첨부파일을 로컬 마운트/S3 호환 스토리지/FTP로 자동 이동시켜 서버 용량을 절감 |
| 설치 경로 | ./modules/bsplus_external_storage |
| PHP 지원 범위 | PHP 7.4 ~ 8.3 |
| 자료 구분 | 공개 자료 GPL v2 |
| 판매 상태 | Rhymix 2.1 ~ 2.1.35 |
| 데모 URL | https://bsplus.net/xe/ |
| 원본 URL | https://bsplus.net/xe/R_XE_dataroom/17599 |
| AI 사용 여부 | 이 자료 전체를 AI가 생성했습니다. 사람이 검토한 부분은 매우 적습니다. |
다운로드
쉬운 설치 지원| 버전 | 날짜 | 용량 | 다운 |
|---|---|---|---|
| 2.0.0 | 2026.07.26 | 707.6KB | 3 |
| 1.9.9 | 2026.07.26 | 707.0KB | 1 |
| 1.9.8 | 2026.07.26 | 705.6KB | 1 |
| 1.9.7 | 2026.07.25 | 704.3KB | 4 |
| 1.9.6 | 2026.07.25 | 702.3KB | 3 |
| 1.9.4 | 2026.07.25 | 698.9KB | 1 |
| 1.9.3 | 2026.07.25 | 698.1KB | 3 |
| 1.9.2 | 2026.07.24 | 697.0KB | 1 |
| 1.9.1 | 2026.07.24 | 692.3KB | 2 |
| 1.9.0 | 2026.07.24 | 691.2KB | 1 |
| 1.8.0 | 2026.07.24 | 689.1KB | 2 |
| 1.7.5 | 2026.07.23 | 76.4KB | 12 |
모듈 명 : 첨부파일 외부 저장소 이동
소개 : 첨부파일을 S3 호환 오브젝트 스토리지 또는 FTP로 자동 이동시켜 서버 용량을 절감하는 모듈
설치경로 : ./modules/bsplus_external_storage
라이믹스 버전 : 2.1 ~ 2.1.35
PHP 버전 : 7.4 ~ 8.x
========== 개발환경 ==========
php : 7.4 라이믹스버전 : 2.1.35
=================== 패치 현황 =========================
v2.0.0 까지의 기능 미리보기
=====================================================
본 모듈은 무료로 배포되며, GPLv2 라이선스를 따릅니다.
소스코드가 그대로 공개되어 있으며, 사용/설치에 따른 문제(파일 손실, 서버 오류 등)에 대해 개발자는 법적 책임을 지지 않습니다. (LICENSE 파일 참고)
첨부파일을 실제로 다른 저장소로 옮기고 지우는 기능이 포함되어 있으니, 실 서비스 게시판에 바로 적용하기보다는 테스트 게시판에서 먼저 동작을 확인해보신 후 적용하시는 걸 권장드립니다. (원격 저장 성공이 확인된 파일만 로컬에서 지우도록 설계되어 있어, 설정 실수가 있어도 파일이 아예 사라지는 경우는 없도록 만들었습니다.)
버그 제보나 개선 의견은 언제든 환영합니다. 다만 개인적으로 관리하는 무료 모듈이다 보니 답변/수정이 늦어질 수 있는 점 양해 부탁드립니다.
불패의초인
Lv. 3
반갑습니다 비에스플러스 라는 사이트를 운영하는 사람입니다.
댓글 31
이야! 어려운 작업 이었을 것 같은데 잘 작동합니다.
파일 저장, 삭제 잘 작동하고,
목표저장소의 파일들을 그대로 복사해서 서버 디스크에 저장한후 목표저장소의 파일들 지워도 잘 작동되네요.
1. ssh, sftp접속은 안되나요.
2. 데이터 이전 및 통합은 대상게시판의 기존 모든 파일들을 목표 저장소로 이동시키는 기능이 맞는지(전 안됨)
감사합니다
저도 아직 데이터 이전 기능을 사용 안해봐서 테스트를 못해봤습니다 오늘 한번 검토해보겠습니다
Sftp 는 추가하려다가 없이 갔습니다
Ssh 는 아직 계획은 안해봤었습니다
둘다 넣어드릴까요?
보통 ssh와 sftp가 같은 취급을 받는 것 같더라구요.
넣어 주시면 고맙죠
팔공산님 패치 되었습니다. 저 그리고
이 부분이 조금 어려운거 같습니다. 어떤가요? 뭔가 딱 "아 이기능이구나?" 라고 보여지질 않더라구요..
ssh와 sftp도 잘 작동합니다.👍
데이터 이전 기능은 해당 게시판의 게시물이 많거나
전체 게시판의 경우 한번에 30개만 된다면 하루 종일 클릭해야 할 듯합니다.
1. 전체 게시판의 경우 호스팅의 files/attach 폴더를 전체 복사해서 목표 저장소로 이동후 저장 하는
수동 기능도 있으면 좋겠네요.
2. 통합 실행도 목표 저장소와 대상 게시판을 선택해서 지금 통합 실행 하고 30개 이동하고 나면 초기화 되어 버립니다.
계속 유지 되어야 또 지금 통합 실행 하기가 편할텐데
3. 저장소 지정에 게시판 > 지정된 저장소를 수정할 수 있는 버턴이 있으면 좋겠네요
4. 대상 게시판을 여러개 선택할 수 있으면 좋겠네요
SSH/SFTP 잘 된다니 다행이네요! 피드백 4개 중에선 2번(선택값 유지)이랑 3번(지정 저장소 수정 버튼)을 먼저 하는 걸 추천드려요 — 둘 다 리스크 낮고 바로 체감되는 UX 개선이라서요. 4번(게시판 다중선택)도 그 다음으로 어렵지 않게 붙일 수 있습니다.
1번(files/attach 폴더 통째로 복사)은 좀 조심스러워요. 지금 구조가 "한 파일씩 옮기고 → 매핑 기록 남기고 → 성공 확인 후 원본 삭제"라 안전한 건데, 폴더 통째로 복사해버리면 그 파일들에 대한 매핑(DB 기록)이 없어서 오히려 나중에 다운로드/서빙이 깨질 수 있어요. 그래서 "폴더 복사"보다는 "한 번에 30건이 아니라 더 많이(예: 100~200건) 처리하게 늘리기" 쪽으로 방향을 잡는 게 같은 문제(하루 종일 클릭)를 더 안전하게 해결할 것 같아요.
클로드가 이렇게 말을 해주네요 그래서 일단은 해보자고 했습니다.
[문제점 발견]
썸네일들이 첫페이지는 보이는데 2페이지 부터 보이질 않네요
고쳤습니다! v1.9.1 → v1.9.2
1) 근본 원인 수정 — 앞으로 새로 올리는 이미지는 원본을 원격으로 옮기고 지우기 직전에, 미리보기(썸네일)가 없으면 자동으로 로컬에 작은 미리보기를 하나 만들어서 남겨둡니다(이 미리보기는 절대 이동 안 시킴). 그래서 원본이 사라져도 게시판 목록에서 계속 썸네일이 뜹니다. 이 로직을 업로드/레거시 마이그레이션/데이터 통합 3곳 전부에 적용했어요.
2) 이미 망가진 기존 이미지 복구 도구 추가 — 이 수정 전에 이미 이동돼서 썸네일이 빠진 이미지들은 위 수정만으론 못 고치니까, [매핑 목록 / 레거시 정리] 탭에 "누락된 썸네일 생성" 버튼을 새로 추가했어요. 누르면 원격 원본을 잠깐 내려받아서 미리보기만 만들고 임시파일은 바로 지웁니다(원본은 계속 원격에 그대로 있음). 한 번에 최대 50건 처리되고, 남으면 다시 누르면 됩니다.
팔공산님 사이트에서도 이 버튼 한 번 눌러보시면 2페이지 썸네일들 다시 보일 거예요. 정적분석/문법검사 다시 통과했습니다.
바로 업로드 하겠습니다.
제가 옮긴 파일이 1800여개 정도 였습니다.
누락된 썸네일 생성 버턴을 누르니 페이지가 딜레이 되면서 몇개는 썸네일이 살아나는 것 같다가
그 다음 부터는 딜레이도 없이 아무리 눌러도 썸네일이 살아 나지를 않네요.
지금은 옮겨진 목표 저장소 files 폴더를 호스팅에 올리니 썸네일 살아 나네요.
이렇게 옮기고 나니 문제가 있는 것 같아서 목표 저장소 files 폴더를 지우고 다시 모듈 설정에 들어가도
현재 저장소별 파일 개수와 매핑 목록 / 레거시 정리에는 변화가 없네요.
그래서 DB에 들어가서 *_bsplus_external_storage_map 비우니 정리가 되네요.
ㅠㅠ 많이 고생하셨습니다 제가 잘 만들었어야 했는데요
1.9.3 으로 패치 하였습니다. 미리보기
슬슬 자야겠습니다 ㅎㅎ;
무슨 말씀을 저의 댓글에 즉시 화답과 버전업을 해주신 님이 고생하셨죠.
수고하십니다.
한가지 더 보태면 썸네일 생성에 약간의 문제가 생기네요
다 지우고 다시 게시판을 옯겨보니
정상적으로 썸네일이 잘 생성되는 사이트가 있는 반면
썸네일이 생성 되지 않는 게시판도 있습니다.
게시판에서 하나 하나 수정해서 저장하면 썸네일이 생성되고요.
데이터 잖아요 조심해야할 부분이고 소중하게 생각해야할 문제라서 빠르게 해드려야 하는게 맞다고 판단했습니다 ㅎㅎ
제가 화요일마다 쉬고 주말에도 일해서
낮에는 패치를 못해요 ㅠㅠ
1.9.4 버전으로 업데이트 하였습니다 곧 등록 하겠습니다.
1. 썸네일의 비율이 크롭으로 지정한 경우 가로 세로 비율에 맞게 만들어 지는데 그렇게 되지를 않네요
아래 썸네일이 원래 흰색 이미지에 꽉 차야 되는데 그렇게 되지를 않네요
2. 데이터 이전 및 통합에서 게시판중 옮겨진 게시판은 어떤 저장소로 이동 했는지 구별되면 좋겠네요
3. 대상 게시판의 형태를 전체 게시판이 보이게 하면 편할 것 같아요
패치 했습니다~ 한번 확인해봐 주세요~
완료되었습니다.
자꾸 귀찮게 해서 죄송합니다.
썸네일 문제는 해결이 안되네요.
files/thumbnails 다 삭제하고 다시 해 봐도 여전합니다.
아이고 ㅠㅠ 그렇군요 ㅠㅠ
혹시 제가 똑같이 재현을 해볼수 있을까요 ??? 어떤식으로 하면 돼는지요?
기존 게시판에서 웹진형으로 이미지를 가로 세로 비율 다른 이미지를 올리고 비율을 크롭으로 하고 썸네일을 생성하면 비율에 꽉찬 이미지가 만들어집니다.
이 후 게시판을 이동시키면 게시판의 썸네일이 올린 이미지 비율로 썸네일이 만들어 집니다.
1.9.7 버전에서는 어때요? 잘 뜨나요?
팔공산님 혹시 1.9.7 버전 한번 해봐주실수 있으실까요?
지금 바로 해결 도구 만들었어요
(v1.9.7): [매핑 목록 / 레거시 정리] 탭에 "기존 썸네일 재생성 (여백 문제 수정)" 버튼을 새로 추가했어요. 누르면 기존에 만들어둔(여백 낀) 미리보기를 지우고, 원격 원본을 다시 내려받아서 새 방식으로 재생성합니다. 한 번에 최대 30건이라 파일이 많으면 여러 번 누르셔야 할 수 있어요.
추가 되었어요~
수고하셨습니다.
근데 기존 썸네일 재생성 눌러도 별로 변화가 없네요.
여기가 기존 호스팅에 있는 썸네일 - 가로, 세로 크기에 꽉참 https://moonhouse.co.kr/utils
이곳이 목적지로 파일 옮긴 썸네일 - 가로, 세로 크기에 여백을 남김 https://moonhouse.co.kr/wtip
지금은 썸네일 잘 나오는거 같습니다.
https://moonhouse.co.kr/festival
상단 썸네일이 호스팅에서 새로 작성한 썸네일
하단 썸네일이 목적지로 옮긴 파일 썸네일
이제 파일들 호스팅으로 이동시키고 목적지 파일 다 지우고, thumbnails 폴더 삭제하고 캐시비우고 다 해봐도 원래 썸네일로 돌아가질 않네요.
원본 사이즈로 썸네일이 보이는 것이 미관상 좋을 수도 있는 것 같은데
예전 처럼 crop이나 fill로 잘라서 보여줄 필요도 있는데...
글 한번 확인해봐주세요
바로 파일 업로드 할께요 제가 외부라 늦을수 있습니다
이렇게 진행될뜻 합니다
제가 일단 이전으로 돌리는 방법을 claude에게 물어서 얻은 답변입니다.
원인
thumbnail_filename은 우리 모듈이 자체적으로 만든 커스텀 테이블이 아니라 라이믹스 코어의xe_files테이블 컬럼입니다. 모듈을 완전히 삭제하고 모듈 자체 DB(맵 테이블 등)를 지워도,xe_files.thumbnail_filename에 이미 박제된 값은 그대로 남아있습니다. 모듈 제거 과정이 이 컬럼까지 비워주지는 않으니까요.그리고
document.item.php::getThumbnail()은 이 컬럼에 값이 들어있으면 "이미 만들어진 미리보기가 있다"고 판단해서 그걸 원본 대신 소스로 그대로 사용합니다. 그 값이 가리키는 파일이 예전 버그 버전(v1.9.4 이전, 500x500 여백 방식)에서 만든 파일이라면 — 실제 원본을 아무리 복구해도, 캐시를 아무리 지워도 코어는 계속 그 잘못된 파일을 소스로 삼아 크롭하게 됩니다."한 번도 이동한 적 없는 파일은 정상, 한 번이라도 이동됐다 돌아온 파일만 이상함" — 이 패턴이 정확히 이걸 가리킵니다. 이동된 적 없는 파일은 애초에
thumbnail_filename이 비어있어서 원본을 그대로 쓰고, 이동된 적 있는 파일은 그 컬럼에 잘못된 경로가 박혀서 계속 그걸 쓰는 겁니다.해결 DB sql 에서 아래 코드 입력 실행후
UPDATE xe_files SET thumbnail_filename = '' WHERE thumbnail_filename != '' AND thumbnail_filename IS NOT NULL;files/thumbnails/캐시를 비우고 나니 썸네일이 정상적으로 돌아 왔습니다.https://moonhouse.co.kr/festival
확인했습니다. 팔공산님(정확히는 그분의 claude)이 찾은 원인 진단은 정확해요 — thumbnail_filename이 라이믹스 코어 xe_files 컬럼이고, 한 번 값이 박히면 코어가 원본은 쳐다보지도 않고 그 값을 그대로 재사용하는 것 맞습니다. 우리 v1.9.7 "기존 썸네일 재생성" 도구도 정확히 이 문제를 고치려고 만든 거고요.
근데 그분이 쓴 방법(UPDATE xe_files SET thumbnail_filename='')은 위험할 수 있어요. thumbnail_filename을 비우면 코어(document.item.php:1211~1218)는 로컬에 uploaded_filename(원본)이 실제로 남아있을 때만 그걸 대체 소스로 씁니다. 근데 진짜로 원격 이전된 파일은 로컬 원본이 이미 삭제된 상태라, 소스가 아예 없어져서 다음번 새 사이즈/모드 썸네일 요청 때 그 이미지가 아예 안 뜰 수 있어요. 그분 경우는 아마 지금 실제로 원격에 이전 안 된(로컬에 원본 남아있는) 상태에서 테스트하셔서 우연히 잘 된 걸로 보여요.
우리 도구가 안전한 이유는 지우기 전에 원격에서 원본을 다시 내려받아서 미리보기를 재생성하기 때문이에요. 근데 한 번에 200개(재생성 도구는 30개)로 제한돼있어서, 파일이 많으면 여러 번 눌러야 다 처리되는 게 불편했을 수 있어요. 이 부분을 개선(예: 끝날 때까지 자동으로 반복 처리)하는 게 진짜 해결책 같은데, 진행할까요?
라고 이야기 해주네요
v1.9.9 수정 내역
버그 수정: "기존 썸네일 재생성" 버튼이 항상 같은 30건만 반복 처리하던 문제 (팔공산 님 실사용 리포트)
- 원인: 재생성 후보 조회 쿼리가 "이전됨 + 썸네일 있음"만 조건으로 걸어서, 재생성 성공해도 그 조건을 계속 만족함 → 매번 map_srl 순 맨 앞 30건만 반복 처리하고 뒤쪽 파일은 버튼을 아무리 눌러도 처리 안 됨
- 수정: bsplus_external_storage_map 테이블에 thumb_fixed 컬럼 추가, 재생성 성공 시 표시 + 후보 조회에서 제외 → 반복해서 누르면 뒤에 있는 파일들로 순서대로 넘어감
다 지우고 1.9.8 버전 설치해서 다시 해보니 썸네일 잘 작동합니다.
감사합니다. 수고하셨습니다.
대상 게시판을 전체 보드가 보이게 해 보았는데 한번 참조 해주세요.
consolidate.zip
고생하셨습니다 그리고 감사합니다~!!^^