백업 자동화는 마치 자동 칫솔질 같은 거야, 근데 네 데이터베이스를 위한 거지. 정기적인 백업 프로세스는 세상을(여기선 네 데이터를) 재앙에서 구해줘. 새벽 3시에 서버가 죽었다는 메시지를 받고, 마지막 백업이 2주 전이었다는 걸 깨닫는 건 아무도 원하지 않아. 자동화가 이 문제를 해결해줘: 이제 사람 실수 때문에 데이터 위험에 노출되는 일은 없어.
자동화를 위한 도구는 많지만, 오늘은 가장 인기 있는 두 가지를 얘기할 거야:
cron— Linux에서 오래전부터 쓰이던 범용 작업 스케줄러야.pg_cron— PostgreSQL에서 직접 작업을 실행할 수 있게 해주는 확장이야.
pg_cron 확장은 내부적으로 cron 서비스를 호출해. 이 서비스는 Linux에서만 쓸 수 있어!
그럼 시작해보자!
pg_cron 설치하기
pg_cron은 PostgreSQL에서 자동 작업 스케줄을 바로 설정할 수 있게 해주는 확장이야. 이거 쓰면 PostgreSQL이 작은 운영센터처럼 업그레이드되는 느낌이야.
설치 단계:
- PostgreSQL 10+을 쓰고 있는지 확인해.
pg_cron은 최신 버전에서만 지원돼. 네 시스템의 패키지 매니저로 확장을 설치해. Ubuntu라면 예를 들어:
sudo apt install postgresql-<version>-cron<version>을 네가 설치한 PostgreSQL 버전으로 바꿔줘.PostgreSQL 설정에서 확장을 활성화해.
postgresql.conf파일을 열고 다음을 추가해:shared_preload_libraries = 'pg_cron'이게 왜 필요하냐면,
pg_cron은 PostgreSQL이 시작할 때 라이브러리가 로드되어야 해 — 필수 조건이야.PostgreSQL 서버를 재시작해:
sudo systemctl restart postgresql네 데이터베이스에서 확장을 활성화해:
CREATE EXTENSION pg_cron;
이제 pg_cron 쓸 준비 끝!
자동 백업 작업 만들기
pg_cron의 핵심은 정해진 시간에 명령을 실행할 수 있다는 거야. pg_dump 명령을 자동으로 실행하는 작업을 만들어보자.
예시:
SELECT cron.schedule(
'nightly_backup', -- 작업 이름
'0 2 * * *', -- 스케줄 (매일 새벽 2시)
$$pg_dump -U username -F c -f /backups/university_backup.dump university$$ -- 명령어
);
이 마법을 해석해보면:
'nightly_backup'— 작업 이름이야, 나중에 쉽게 찾으려고.'0 2 * * *'— cron 포맷의 스케줄: 매일 2:00에 실행.$$ $$안의 명령:pg_dump로university데이터베이스 백업을 만드는 거야.
작업을 만들면 스케줄에 따라 자동으로 실행돼!
pg_cron 작업 확인 및 삭제
모든 작업을 보려면:
SELECT * FROM cron.job;
더 이상 필요 없는 작업은 이렇게 삭제할 수 있어:
SELECT cron.unschedule(job_id);
job_id는 위 쿼리에서 나온 작업 ID로 바꿔줘.
cron으로 자동화하기
만약 네가 전통적인 Linux 방식의 자동화를 선호하거나 pg_cron을 쓸 수 없는 상황이라면, 만능 cron이 도와줄 거야.
cron으로 작업 설정하기
먼저 cron이 설치되어 있고 실행 중인지 확인해:
sudo systemctl enable cron
sudo systemctl start cron
이제 백업 작업을 추가해보자. cron 작업을 설정하려면 에디터를 열어:
crontab -e
다음 줄을 추가해:
0 2 * * * pg_dump -U username -F c -f /backups/university_backup.dump university
이 마법 같은 한 줄이 하는 일:
- 매일 새벽 2시(
0 2 * * *)에university데이터베이스 백업을 만들어. - 모든 백업은
/backups/university_backup.dump파일에 저장돼.
crontab 파일을 저장하면 예약된 작업이 실행되기 시작해.
cron 실행 로그
가끔 뭐가 잘못됐는지 알아야 할 때가 있어. 명령의 출력을 로그 파일에 남기면 분석하기 좋아. 명령에 출력 리다이렉션을 추가해봐:
0 2 * * * pg_dump -U username -F c -f /backups/university_backup.dump university >> /var/log/backup.log 2>&1
이제 작업 실행 중 일어나는 모든 게 /var/log/backup.log에 저장돼.
pg_cron vs cron 비교
자, 강력한 도구 두 개가 있어. 뭘 골라야 할까?
pg_cron은 PostgreSQL에서 직접 스케줄을 관리하고 싶을 때 딱이야. 데이터베이스 안에서 모든 걸 할 수 있고, 작업 확장도 쉬워.cron은 더 범용적이야. PostgreSQL뿐 아니라 다른 자동화 작업에도 쓸 수 있어.
| 특징 | pg_cron | cron |
|---|---|---|
| 통합 쉬움 | PostgreSQL에 내장, 확장 필요 | 모든 프로세스에 사용 가능 |
| 설치 | 확장 설치 필요 | 대부분의 Linux 시스템에 기본 탑재 |
| 로그 | PostgreSQL에 저장됨 (테이블 cron.job_run_details) |
시스템 로그에 기록됨 (보통 /var/log/syslog) |
| 유연성 | PostgreSQL 안에서 SQL만 실행 | 모든 명령, 스크립트, 바이너리 실행 가능 |
작업 실행 확인하기
백업이 잘 되는지 확인하려면 cron 명령을 수동으로 실행해볼 수 있어:
pg_dump -U username -F c -f /backups/university_backup.dump university
또, 지정한 디렉토리에 백업 파일이 있는지, 파일 크기와 마지막 생성 시간을 확인하는 것도 좋아. 예를 들어:
ls -lh /backups/
정기적으로 로그를 확인하고 작업이 제대로 실행되는지 꼭 체크해.
흔한 실수 간단 방어법
실수 1: "권한 설정을 까먹었어!"
cron을 실행하는 사용자가 pg_dump를 실행할 권한이 없으면 작업이 안 돼. 사용자가 데이터베이스에 접근할 수 있는지 꼭 확인해.
실수 2: "파일이 엉뚱한 데 저장됐어!"
항상 파일과 명령의 전체 경로를 써. cron은 네 환경을 몰라 — 전체 경로 필수: pg_dump -> /usr/bin/pg_dump.
실수 3: "로그가 어디 갔지?"
명령 출력을 로그 파일로 리다이렉션하는 걸 잊지 마. 이거 없으면 문제 생겨도 아무 정보도 못 얻어.
이제 네 데이터베이스 백업 자동화 준비 끝! 서버가 갑자기 휴가를 가도, 네 데이터는 안전할 거야!
GO TO FULL VERSION