Tinyauth

작업 스케줄러

Tinyauth의 데이터 정리 스케줄러 및 정리 정책 구성하기

tinyauth는 만료된 토큰, 사용된 인증 코드, 이메일 인증 토큰 같은 임시 데이터를 주기적으로 정리하는 내장 스케줄러를 제공해요. 이 설정은 schedulercleanup 최상위 섹션으로 구성돼요.


스케줄러 설정

# 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/running job은 이 정리 정책으로 삭제하지 않아요.
  • 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