CodeGym /행동 /SQL SELF /Linux에서 pg_croncron으로 백업 자동...

Linux에서 pg_croncron으로 백업 자동화 설정하기

SQL SELF
레벨 44 , 레슨 0
사용 가능

백업 자동화는 마치 자동 칫솔질 같은 거야, 근데 네 데이터베이스를 위한 거지. 정기적인 백업 프로세스는 세상을(여기선 네 데이터를) 재앙에서 구해줘. 새벽 3시에 서버가 죽었다는 메시지를 받고, 마지막 백업이 2주 전이었다는 걸 깨닫는 건 아무도 원하지 않아. 자동화가 이 문제를 해결해줘: 이제 사람 실수 때문에 데이터 위험에 노출되는 일은 없어.

자동화를 위한 도구는 많지만, 오늘은 가장 인기 있는 두 가지를 얘기할 거야:

  1. cron — Linux에서 오래전부터 쓰이던 범용 작업 스케줄러야.
  2. pg_cron — PostgreSQL에서 직접 작업을 실행할 수 있게 해주는 확장이야.

pg_cron 확장은 내부적으로 cron 서비스를 호출해. 이 서비스는 Linux에서만 쓸 수 있어!

그럼 시작해보자!

pg_cron 설치하기

pg_cron은 PostgreSQL에서 자동 작업 스케줄을 바로 설정할 수 있게 해주는 확장이야. 이거 쓰면 PostgreSQL이 작은 운영센터처럼 업그레이드되는 느낌이야.

설치 단계:

  1. PostgreSQL 10+을 쓰고 있는지 확인해. pg_cron은 최신 버전에서만 지원돼.
  2. 네 시스템의 패키지 매니저로 확장을 설치해. Ubuntu라면 예를 들어:

    sudo apt install postgresql-<version>-cron
    

    <version>을 네가 설치한 PostgreSQL 버전으로 바꿔줘.

  3. PostgreSQL 설정에서 확장을 활성화해. postgresql.conf 파일을 열고 다음을 추가해:

    shared_preload_libraries = 'pg_cron'
    

    이게 왜 필요하냐면, pg_cron은 PostgreSQL이 시작할 때 라이브러리가 로드되어야 해 — 필수 조건이야.

  4. PostgreSQL 서버를 재시작해:

    sudo systemctl restart postgresql
    
  5. 네 데이터베이스에서 확장을 활성화해:

    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_dumpuniversity 데이터베이스 백업을 만드는 거야.

작업을 만들면 스케줄에 따라 자동으로 실행돼!

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: "로그가 어디 갔지?"

명령 출력을 로그 파일로 리다이렉션하는 걸 잊지 마. 이거 없으면 문제 생겨도 아무 정보도 못 얻어.

이제 네 데이터베이스 백업 자동화 준비 끝! 서버가 갑자기 휴가를 가도, 네 데이터는 안전할 거야!

코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION