배경: 블로그의 사진을 살려야 한다
올 초에 Flickr(이하 플리커) 무료 계정의 무제한 사진 보관 기능이 없어졌다. 유료 계정으로 변환하지 않으면 1000장만 남겨놓고 업로드한 사진들을 다 지워버린다고 한다. 이 사진들을 백업하는 건 그리 큰 일이 아니다.
문제는 이 블로그. 이 블로그에 넣은 사진들은 모두 플리커에 이미지를 올려놓고 링크만 넣은 것이기 때문에 플리커에서 사진이 제거 되면 이 블로그의 사진이 모두 사라진다!

내 결정은 내 블로그에 들어있는 모든 사진을 플리커로부터 다운로드한 후 호스팅 업체에 옮겨놓는 동시에, 블로그 내부에 있는 플리커 사진 URL을 해당 호스팅 업체 URL로 변경하는 것.
내부 링크된 사진을 다운로드 해주는 워드프레스 플러그인
이 정도는 내가 프로그래밍을 할 수 있을 것 같았는데, 혹시 내가 하고 싶은 일을 해주는 워드프레스 플러그인이 있을까?
있다! 열심히 검색을 해서 찾은 몇 개의 플러그인들. 참고로 나는 현재 워드프레스 5.1 버전을 쓴다.
- Image Teleporter: 너무 오래돼서인지 제대로 동작안 함
- Auto-Upload Images: 워드프레스 5와의 호환성 문제인지 되다가 안되다가 하며, 될 때도 사진이 미디어 라이브러리에 자동으로 등록되지는 않음.
- Download External Images In Posts: 잘 작동하지 않음.
- External Media Upload : 내가 원하는 기능이 아님. 외부 이미지 URL을 잔뜩 주면 로컬에 저장하고 내부 미디어 라이브러리에 넣어주는 플러그인.
- External Image Replace: 내가 최종적으로 선택해서 성공적으로 사용한 플러그인
External Image Replace플러그인, 그리고 코드 수정
이 플러그인은 이름대로 외부 이미지를 내부 이미지로 교체해주는 플러그인이다. 플러그 인을 설치하면 워드프레스 알림판 좌측 메뉴의 ‘도구’아래 External Image Replace란 메뉴가 생긴다.

이 메뉴를 선택하면 블로그에서 외부이미지를 사용하는 글들이 주욱 나열되고, 상단의 Replace란 버튼을 누르면 된다. 아마 다음과 같은 일을 하는 것으로 추정된다.
- 1) 각 글안의 사진(img 태그)을 찾아 외부 호스팅된 사진이면,
- 2) 외부 호스팅된 사진을 현재 호스팅 서버로 다운로드 한 후
- 3) 글안의 외부 호스트 사진 URL을 새로운 URL로 교체
- 4) 새 사진을 워드프레스 미디어 라이브러리에 등록
처음 쓸 때는 잘 안됐다. 사진을 copy하지 못 한다는 에러가 떴다. (명확한 에러메시지를 출력하는 것도 이 플러그인의 우수한 점)
코드를 뜯어보니 사진을 다운로드하기 위해 PHP의 copy()를 썼는데, 이 함수는 allow_url_fopen 권한이 true로 설정돼 있어야 제대로 동작하기 때문. PHP를 잘 모르는 나는 이 권한을 내가 바꿀 수 있는지 잘 모른다. 그래서 스택오버플러우를 참고하여 플러그인 class.php 코드에서 copy() 함수 부분을 수정.
/* $flag = copy($parse_url, $uploaddir_img); 제거 */
$ch = curl_init($parse_url);
$fp = fopen($uploaddir_img, 'wb');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
$flag = curl_exec($ch);
curl_close($ch);
fclose($fp);
이렇게 하면 제대로 작동하더라. 다만 대량의 글을 한꺼번에 선택하여 작업하면 서버에 부하가 몰려서 호스팅 업체에서 웹데몬을 죽여버리는(?) 경우가 있는 것 같은데 이건 호스팅 업체마다 다를 것 같다. 한 번에 글 20개씩 정도를 선택하여 작업했더니 큰 문제가 없었다.
그래서 현재 이 블로그의 모든 사진은 이 호스트로 옮겨졌다. 미션 썩세스!
PS:
플리커는 훌륭한 사이트다. 사진들을 플리커에 올려놓고 서빙한 덕분에 수년간 1년에 만원 밖에 안 하는 500M짜리 계정으로 홈페이지를 운영할 수 있었다.
다만 한국에서는 사진 브라우징하기가 너무너무 느리다. 브라우징 속도만 빨랐어도 유료로 플리커를 계속 이용했을 것이다. 이미지 호스팅 (CDN) 용도로는 매우 훌륭하며 사진 로딩 속도도 빠른 편이다.