작업 스케줄러
Tinyauth의 데이터 정리 스케줄러 및 정리 정책 구성하기
tinyauth는 만료된 토큰, 사용된 인증 코드, 이메일 인증 토큰 같은 임시 데이터를 주기적으로 정리하는 내장 스케줄러를 제공해요. 이 설정은 scheduler와 cleanup 최상위 섹션으로 구성돼요.
스케줄러 설정
# config.yaml
scheduler:
enabled: true
mode: croner
cleanup_cron: '0 2 * * *'
# mode: database 를 사용할 때만 적용돼요.
poll_interval_ms: 5000
lock_ttl_ms: 60000
background_retry_delay_ms: 1000
background_max_attempts: 3
background_retention_ms: 604800000
instance_id: ''
scheduler.enabled: 내장 스케줄러를 활성화할지 여부예요. 기본값은true예요.scheduler.mode: 스케줄러 백엔드예요.croner는 단일 프로세스용 인메모리 스케줄러이고,database는 DB lease를 사용해 여러 인스턴스 중 하나만 작업을 획득하도록 하는 분산 스케줄러예요. 기본값은croner예요.scheduler.cleanup_cron: 내장 정리 작업 실행 주기예요. 표준 5필드 cron 형식(분 시 일 월 요일)을 사용해요. 기본값은0 2 * * *(매일 오전 2시)예요.scheduler.poll_interval_ms:database모드에서 due job을 확인하는 주기예요. 기본값은5000이에요.scheduler.lock_ttl_ms:database모드에서 job lease가 유효한 시간이에요. 작업이 오래 걸리면 실행 중 lease가 자동 갱신돼요. 기본값은60000이에요.scheduler.background_retry_delay_ms:database모드에서 실패한 background job을 다시 실행하기 전 대기 시간이에요. 기본값은1000이에요.scheduler.background_max_attempts:database모드에서 background job을 최종 실패로 표시하기 전 최대 시도 횟수예요. 기본값은3이에요.scheduler.background_retention_ms:database모드에서 완료된 background job(succeeded/failed)을 보존하는 기간(ms)이에요. 기본값은604800000(7일)이에요.pending/runningjob은 이 정리 정책으로 삭제하지 않아요.scheduler.instance_id:database모드에서 lease 소유자를 식별하는 값이에요. 비워두면 프로세스마다 고유한 값이 자동 생성돼요. 직접 지정할 경우 replica/process마다 반드시 고유해야 해요.
Note
Kubernetes 환경에서는 단일 실행 보장이 필요하면 scheduler.mode: database를 사용하거나, 내장 스케줄러 대신 CronJob을 사용하는 것이 좋아요. CronJob을 사용할 경우 scheduler.enabled: false로 설정하고 외부에서 tinyauth cleanup CLI 명령을 실행하세요. 자세한 내용은 Kubernetes 배포 가이드를 참고해 주세요.
Caution
database 모드에서 모든 작업은 at-least-once 방식으로 실행돼요. lease가 만료되면 다른 인스턴스가 같은 작업을 다시 획득할 수 있으므로 scheduled/background job handler는 가능하면 멱등적으로 작성하세요.
정리 정책 (cleanup)
각 데이터 유형별로 정리 정책을 세밀하게 설정할 수 있어요.
기간 형식
정리 정책의 보존 기간(retention)은 다음과 같은 형식을 사용해요.
| 형식 | 의미 | 예시 |
|---|---|---|
"0" | 즉시 (보존 기간 없음) | 만료 즉시 삭제 |
"30s" | 초 | 30초 |
"30m" | 분 | 30분 |
"24h" | 시간 | 24시간 |
"7d" | 일 | 7일 |
"1y" | 년 (365일) | 1년 |
취소된 토큰 (revoked_tokens)
cleanup:
revoked_tokens:
enabled: true
retention: '0'
enabled: 취소된 토큰 정리 활성화 여부예요. 기본값은true예요.retention: 토큰 만료 후 보존 기간이에요. 기본값은"0"(만료 즉시 삭제)이에요.
OAuth 인증 코드 (oauth_codes)
cleanup:
oauth_codes:
enabled: true
consumed_retention: '24h'
enabled: 인증 코드 정리 활성화 여부예요. 기본값은true예요.consumed_retention: 사용된 인증 코드의 보존 기간이에요. 기본값은"24h"예요.
이메일 인증 (email_verifications)
cleanup:
email_verifications:
enabled: true
retention: '0'
enabled: 만료된 이메일 인증 토큰 정리 활성화 여부예요. 기본값은true예요.retention: 만료 후 보존 기간이에요. 기본값은"0"이에요.
비밀번호 재설정 (password_resets)
cleanup:
password_resets:
enabled: true
retention: '0'
enabled: 만료된 비밀번호 재설정 토큰 정리 활성화 여부예요. 기본값은true예요.retention: 만료 후 보존 기간이에요. 기본값은"0"이에요.
대기 중인 OAuth 가입 (pending_oauth_registrations)
cleanup:
pending_oauth_registrations:
enabled: true
retention: '0'
enabled: 중단된 OAuth 가입 흐름 정리 활성화 여부예요. 기본값은true예요.retention: 만료 후 보존 기간이에요. 기본값은"0"이에요.
관련 설정
account_deletion.enabled: 사용자가 스스로 계정 삭제를 요청할 수 있는지 결정해요.account_deletion.retention: 삭제 요청 후 실제 영구 삭제까지의 유예 기간이에요.tinyauth cleanup이 실행될 때 이 정책이 적용돼요.tokens.key_rotation.*: JWT 키 순환 정책이에요. 정리 작업과 같은 유지보수 시점에 함께 반영돼요.
전체 예시
# config.yaml
tokens:
key_rotation:
enabled: true
interval_days: 30
overlap_days: 7
account_deletion:
enabled: true
retention: 30d
scheduler:
enabled: true
mode: croner
cleanup_cron: '0 2 * * *'
cleanup:
revoked_tokens:
enabled: true
retention: '0'
oauth_codes:
enabled: true
consumed_retention: '24h'
email_verifications:
enabled: true
retention: '0'
password_resets:
enabled: true
retention: '0'
pending_oauth_registrations:
enabled: true
retention: '0'
CLI 명령어
스케줄러와 별개로, CLI를 통해 수동으로 정리 작업을 실행할 수도 있어요.
# 정리 작업 실행
tinyauth cleanup
# 실제 삭제 없이 대상만 확인 (드라이 런)
tinyauth cleanup --dry-run
# 상세 진행 상황 출력
tinyauth cleanup --verbose
# 커스텀 설정 파일 사용
tinyauth cleanup -c /path/to/config.yaml