사실 게시글 첨부파일은 따로 컬럼으로 관리하고 있는 upfile만 챙기면 될 것이라고 생각하고 작업했는데,
실 데이터를 확인해보니 이전 업체에서는 게시글 본문에 통째로 html을 박아서 사용하고 있었고
그 안에 무수히 많은 img src가 있었다.
즉, 게시글 본문에 해당하는 contents 컬럼의 값 중에서 src에 해당하는 값들을 파싱하여
이미지도 웹서버로 다운로드 해주고, 데이터 update도 해주어야 했다.
1) contents를 전체 가져온다
2) contents 내 img src 값을 파싱한다
3) URL request 결과값이 200일 경우, 경로를 웹서버로 변경해준다
4) 아래 bash 파일의 List에 값을 추가한다.
#!/bin/bash
list=(
(다운로드 받을 경로) (다운로드 할 URL)
)
5) 웹서버 경로로 변경된 contents로 UPDATE 해주는 쿼리를 작성한다.
까지 완료되면 다운로드 받을 목록을 조회하여 실제로 웹서버로 이미지를 다운로드 받는다.
#!/bin/bash
# 실행 명령어: sh img_download.sh >> img_download.log
# img_download_list.sh 파일을 가져옴
source ./img_download_list.sh
# 배열 순회
log_file = "./download.log"
echo "[START]"
for pair in "${list[@]}"; do
read -r local_path image_url <<< "$pair"
# 이미지 URL 형식 검증
if [[ $image_url != http* ]]; then
echo "[RESULT][FAIL][INVALID_URL][$image_url]"
continue
fi
# 이미지 파일명 추출
image_filename=$(basename "$local_path")
# 이미지 다운로드
curl -o "$local_path" "$image_url"
# 다운로드 성공 여부 확인
if [ $? -eq 0 ]; then
echo "[RESULT][SUCCESS][$local_path]"
else
echo "[RESULT][FAIL][DOWNLOAD][$image_url]"
fi
done
✅SQL 파일 실행
for sql_file in ./(경로)/*.sql; do
/usr/bin/mysql --binary-mode -h(Host) -u (DB ID) -p(패스워드) -P(Port) (DB NAME) -f < "$sql_file"
done
🐶 후기
최종 데이터 이전 날, 고객사 페이지의 셧다운과 동시에 DB Dump 파일을 받아 이전을 시작했다. 20~21시부터 시작하여 기존에 계획해둔 이전 시나리오에 맞춰 작업을 진행했고, 새벽 1시에 퇴근은 했지만 집에 가서도 이슈를 대응하며 새벽 4시쯤 잠에 들었던 걸로 기억한다. 그래도 사전 작업을 꼼꼼하게 하며 여러 이슈 케이스를 검토 및 개선한 덕분에 실제로 오픈 후에는 게시판 관련 데이터 이슈가 발생하지는 않았다. (VVVIP 고객이었기에,, 나에게는 이슈가 없었다는 것만으로도 굉장히 감사한 성과였달까) 갑작스레 투입되면서 약 2-3달 간 파이썬과 함께한 새로우면서도 재밌는 경험이었다 :)