pg-boss는 Node.js와 PostgreSQL을 사용하여 구축된 작업 큐 시스템입니다. 이를 통해 Node.js 애플리케이션에서 백그라운드 작업을 처리하고 비동기 작업을 안전하게 관리할 수 있습니다. pg-boss는 특히 PostgreSQL 9.5에서 추가된 중요한 기능들(예: SKIP LOCKED와 upserts)을 활용하여 분산 메시지 큐로서의 신뢰성을 높인 것이 특징입니다.
pg-boss를 선택할 이유는 여러 가지가 있지만, 가장 큰 이유는 Redis와 같은 추가적인 시스템 의존성을 제거하고, PostgreSQL 하나로 통합된 환경을 구축할 수 있다는 점입니다. Redis는 퍼시스턴스(데이터 지속성) 문제로 인해 모든 메시지 처리의 신뢰성을 보장하지 않을 수 있습니다. 반면, PostgreSQL은 데이터를 안전하게 관리하는 데 강점을 가지고 있습니다.
이 시스템은 특히 관계형 데이터베이스의 간단한 개념과 작업에 익숙한 팀에게 유용합니다. SQL 쿼리, 백업 등의 작업을 쉽게 이해하고 처리할 수 있는 환경에서 매우 적합합니다.
추가 기능 설명:
프로미스 API: 작업이 보장된 방식으로 전달되고 완료될 수 있도록 관리합니다.
지연된 작업: 특정 시간 이후에 작업을 실행할 수 있습니다.
작업 재시도: 작업이 실패할 경우 지수적 백오프(재시도 간격이 점차 증가하는 방식)로 재시도할 수 있습니다.
작업 제한: 고유 작업(중복 실행 방지), 비율 제한(단위 시간당 실행 횟수 제한), 디바운싱(짧은 시간 내 반복 작업 제한) 기능을 제공합니다.
작업 배치: 대용량의 작업을 한꺼번에 처리할 수 있습니다.
작업 동시성 관리: 여러 작업을 동시에 처리할 수 있는 구성 가능한 동시성 설정을 지원합니다.
분산 및 클러스터링 작업자: 여러 서버에서 작업을 분산 처리하거나 클러스터링하여 확장할 수 있습니다.
작업 완료 구독: 작업이 완료되었을 때 이를 트리거로 사용할 수 있습니다.
만료된 작업 모니터링: 정해진 시간 내에 완료되지 않은 작업을 자동으로 모니터링하여 처리합니다.
완료된 작업 아카이빙: 작업이 완료된 후 이를 자동으로 아카이빙(백업)할 수 있습니다.
pg-boss는 PostgreSQL 데이터베이스를 기반으로 하는 작업 큐(Job Queue) 관리 도구입니다. 주로 비동기 작업을 처리하거나 예약 작업을 관리하는 데 사용되며, PostgreSQL 데이터베이스 내에서 작업을 스케줄링하고 처리하는 것을 목표로 합니다. pg-boss는 개발자가 백엔드에서 작업을 큐에 넣고, 이를 비동기적으로 처리하거나 예약된 시간에 실행할 수 있도록 설계되었습니다.
pgboss를 사용하는 주요 이유는 다음과 같습니다:
비동기 작업 처리:
재시도 및 오류 관리:
예약 작업 기능:
PostgreSQL과의 완벽한 통합:
npm install pg-boss
pgboss를 사용하려면 먼저 PostgreSQL 데이터베이스 연결을 설정해야 합니다.
const PgBoss = require('pg-boss');
const boss = new PgBoss({
connectionString: 'postgres://username:password@localhost:5432/database_name'
});
boss.start()
.then(() => console.log("pg-boss가 시작되었습니다."))
.catch(err => console.error("pg-boss 시작 중 오류 발생:", err));
작업을 큐에 추가하려면 publish 메서드를 사용합니다.
boss.publish('email-job', { to: 'user@example.com', subject: 'Hello', body: 'This is a test email.' });
위 코드는 "email-job"이라는 이름의 작업을 큐에 추가합니다. 작업 데이터는 이메일 전송에 필요한 정보입니다.
큐에 추가된 작업을 처리하기 위해서는 work 메서드를 사용합니다.
boss.work('email-job', async job => {
console.log(`이메일을 전송 중: ${job.data.to}`);
// 이메일 전송 로직 구현
});
이 코드는 "email-job"이라는 이름의 작업이 큐에 추가될 때마다 이를 처리하는 핸들러를 등록합니다.
특정 시간에 작업을 실행하려면 schedule 메서드를 사용할 수 있습니다.
boss.schedule('nightly-backup', '0 3 * * *', { backup: true });
위 코드는 매일 오전 3시에 "nightly-backup" 작업을 실행하도록 스케줄링합니다.
작업이 실패했을 때 자동으로 재시도하도록 설정할 수 있습니다.
boss.publish('retry-job', { someData: 'value' }, { retryLimit: 5, retryDelay: 30000 });
이 설정은 "retry-job" 작업이 실패할 경우 5번까지 30초 간격으로 재시도하도록 합니다.
이 문서를 통해 pgboss의 개념, 사용 이유, 그리고 기본적인 사용법에 대해 이해할 수 있습니다. pgboss는 백엔드에서 작업을 비동기적으로 처리하거나 예약 작업을 관리하는 데 매우 유용한 도구입니다.