contract

package
v1.2.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 18, 2026 License: MIT Imports: 6 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrMessageRequired 알림의 본문 내용이 비어있거나 공백 문자로만 구성되어 있어 유효하지 않을 때 반환하는 에러입니다.
	ErrMessageRequired = apperrors.New(apperrors.InvalidInput, "알림 메시지 본문은 비워둘 수 없습니다")
)
View Source
var ErrTaskResultNotFound = apperrors.New(apperrors.NotFound, "조회 실패: 저장된 작업 결과 없음")

ErrTaskResultNotFound 저장된 작업 결과를 찾을 수 없을 때 반환하는 에러입니다.

Functions

This section is empty.

Types

type IDGenerator

type IDGenerator interface {
	// New 새로운 고유한 TaskInstanceID를 생성하여 반환합니다.
	//
	// 반환되는 ID는 시스템 전체에서 고유성이 보장되어야 하며,
	// 동시에 여러 고루틴에서 호출되어도 안전해야 합니다.
	//
	// 반환값:
	//   - TaskInstanceID: 고유한 작업 인스턴스 ID
	New() TaskInstanceID
}

IDGenerator 작업 인스턴스의 고유 ID를 생성하는 인터페이스입니다.

type Notification

type Notification struct {
	// NotifierID 알림을 전송할 대상 알림 채널(Notifier)의 식별자입니다. (Optional)
	// 이 값이 비어있다면(""), 애플리케이션 또는 시스템의 기본 알림 채널(Notifier)로 전송됩니다.
	NotifierID NotifierID

	// TaskID 이 알림을 생성한 작업(Task)의 종류를 나타내는 식별자입니다. (Optional)
	// 예: "NaverShopping", "KurlyCheck" 등 비즈니스 로직의 큰 카테고리를 의미합니다.
	TaskID TaskID

	// CommandID 해당 작업 내에서 실행된 구체적인 명령어 식별자입니다. (Optional)
	// 예: "CheckPrice", "MonitorStock" 등 작업 내부의 세부 동작을 구분합니다.
	CommandID TaskCommandID

	// InstanceID 작업이 실제로 실행될 때 부여되는 고유한 인스턴스 ID입니다. (Optional)
	// 스케줄러에 의해 주기적으로 반복 실행되는 작업의 경우, 각 회차를 구분하고 로그를 추적(Trace)하는 데 사용됩니다.
	InstanceID TaskInstanceID

	// Title 알림의 제목입니다. (Optional)
	Title string

	// Message 전달하고자 하는 알림의 본문 내용입니다. (Required)
	Message string

	// Elapsed 작업 실행에 소요된 시간입니다. (Optional)
	Elapsed time.Duration

	// ErrorOccurred 이 알림이 에러 상황을 알리는 것인지의 여부입니다.
	ErrorOccurred bool

	// Cancelable 해당 작업이 취소 가능한지의 여부입니다.
	Cancelable bool
}

Notification 알림 전송을 위한 표준 데이터 구조(DTO)입니다.

단순한 메시지 전달을 넘어, 알림이 발생한 작업(Task)의 맥락(Context)과 상태 정보를 포함합니다. 이를 통해 수신 측에서는 "무엇을", "어디로", "왜" 보내는지 명확히 파악할 수 있으며, 시스템 전반에서 통일된 형식으로 알림을 처리할 수 있게 합니다.

func NewErrorNotification

func NewErrorNotification(message string) Notification

NewErrorNotification 기본 알림 채널(Notifier)로 에러 메시지 전송을 위한 상세 알림 객체를 생성하여 반환하는 팩토리 함수입니다.

func NewNotification

func NewNotification(message string) Notification

NewNotification 기본 알림 채널(Notifier)로 일반 메시지 전송을 위한 상세 알림 객체를 생성하여 반환하는 팩토리 함수입니다.

func (*Notification) String

func (n *Notification) String() string

String 로그 기록이나 디버깅 시 알림 객체를 식별하기 위한 문자열 표현을 반환합니다.

func (*Notification) Validate

func (n *Notification) Validate() error

Validate 알림 데이터의 유효성을 검증합니다.

type NotificationHealthChecker

type NotificationHealthChecker interface {
	// Health 시스템이 정상적으로 동작 중인지 검사합니다.
	Health() error
}

NotificationHealthChecker Notification 서비스의 상태를 확인하는 인터페이스입니다.

type NotificationSender

type NotificationSender interface {
	// Notify 알림 메시지 발송을 요청합니다.
	//
	// 이 메서드는 일반적으로 비동기적으로 동작할 수 있으며(구현체에 따라 다름),
	// 전송 요청이 성공적으로 큐에 적재되거나 시스템에 수락되었을 때 nil을 반환합니다.
	// 즉, nil 반환이 반드시 "최종 사용자 도달"을 보장하는 것은 아닙니다.
	//
	// 파라미터:
	//   - ctx: 요청의 컨텍스트 (Timeout, Cancellation 전파 용도)
	//   - notification: 전송할 알림의 상세 내용 (메시지, 수신처, 메타데이터 등)
	//
	// 반환값:
	//   - error: 요청 검증 실패, 큐 포화 상태, 또는 일시적 시스템 장애 시 에러를 반환합니다.
	Notify(ctx context.Context, notification Notification) error

	// SupportsHTML 지정된 Notifier가 HTML 형식의 메시지 본문을 지원하는지의 여부를 반환합니다.
	SupportsHTML(notifierID NotifierID) bool
}

NotificationSender 알림 발송을 위한 핵심 인터페이스입니다. 클라이언트는 이 인터페이스를 통해 알림 발송을 요청하며, 실제 전송은 구현체가 담당합니다.

type NotifierID

type NotifierID string

NotifierID 알림 채널의 고유 ID 타입입니다. NOTE: 이 타입은 여러 패키지(api, task, notification)에서 공통으로 참조되므로, 순환 참조를 피하기 위해 contract 패키지에 정의되었습니다.

type TaskCanceler

type TaskCanceler interface {
	// Cancel 특정 작업 인스턴스의 실행을 중단 요청합니다.
	Cancel(instanceID TaskInstanceID) error
}

TaskCanceler 실행 중이거나 대기 중인 작업을 취소하는 인터페이스입니다.

사용자 요청이나 시스템 종료 등의 사유로 작업 실행을 중단해야 할 때 사용됩니다.

type TaskCommandID

type TaskCommandID string

TaskCommandID 실행 가능한 명령어를 식별하는 고유 식별자입니다.

func (TaskCommandID) IsEmpty

func (id TaskCommandID) IsEmpty() bool

func (TaskCommandID) Match

func (id TaskCommandID) Match(target TaskCommandID) bool

Match 대상 명령 ID가 현재 명령 ID와 일치하는지, 또는 정의된 패턴에 부합하는지 검증합니다.

단순 일치(Exact Match)뿐만 아니라, 접미사 와일드카드('*')를 사용한 접두어 매칭(Prefix Match)을 지원합니다. 예: "CMD_*"는 "CMD_A", "CMD_B" 등과 일치한다고 판단합니다.

func (TaskCommandID) String

func (id TaskCommandID) String() string

func (TaskCommandID) Validate

func (id TaskCommandID) Validate() error

type TaskExecutor

type TaskExecutor interface {
	TaskSubmitter
	TaskCanceler
}

TaskExecutor 작업의 등록과 취소 기능을 통합한 인터페이스입니다.

type TaskID

type TaskID string

TaskID 실행 가능한 작업을 식별하는 고유 식별자입니다.

func (TaskID) IsEmpty

func (id TaskID) IsEmpty() bool

func (TaskID) String

func (id TaskID) String() string

func (TaskID) Validate

func (id TaskID) Validate() error

type TaskInstanceID

type TaskInstanceID string

TaskInstanceID 실행 중인 작업 인스턴스의 고유 식별자입니다.

func (TaskInstanceID) IsEmpty

func (id TaskInstanceID) IsEmpty() bool

func (TaskInstanceID) String

func (id TaskInstanceID) String() string

func (TaskInstanceID) Validate

func (id TaskInstanceID) Validate() error

type TaskResultStore

type TaskResultStore interface {
	// Save 작업 결과를 저장합니다.
	//
	// 동일한 taskID와 commandID 조합으로 Save를 호출하면 기존 데이터를 덮어씁니다.
	Save(taskID TaskID, commandID TaskCommandID, v any) error

	// Load 저장된 작업 결과를 불러옵니다.
	//
	// 저장된 데이터가 없는 경우 ErrTaskResultNotFound 에러를 반환합니다.
	// 호출자는 이 에러를 확인하여 최초 실행 여부를 판단해야 합니다.
	Load(taskID TaskID, commandID TaskCommandID, v any) error
}

TaskResultStore 작업 결과(스냅샷)를 저장하고 불러오는 저장소 인터페이스입니다.

이 인터페이스는 작업이 실행될 때마다 생성되는 중간 결과 데이터를 저장하여, 다음 실행 시 이전 상태를 기반으로 변경 사항을 감지하거나 증분 처리를 수행할 수 있도록 합니다.

type TaskRunBy

type TaskRunBy int

TaskRunBy 작업의 실행 주체를 정의합니다.

const (
	// TaskRunByUnknown 초기화되지 않았거나 알 수 없는 상태입니다 (기본값).
	TaskRunByUnknown TaskRunBy = iota

	// TaskRunByUser 사용자의 요청에 의한 수동 실행입니다.
	TaskRunByUser

	// TaskRunByScheduler 스케줄러에 의한 자동 실행입니다.
	TaskRunByScheduler
)

func (TaskRunBy) IsValid

func (t TaskRunBy) IsValid() bool

func (TaskRunBy) String

func (t TaskRunBy) String() string

func (TaskRunBy) Validate

func (t TaskRunBy) Validate() error

type TaskSubmitRequest

type TaskSubmitRequest struct {
	// TaskID 실행하고자 하는 작업의 종류를 식별하는 고유 ID입니다. (Required)
	// 예: "NAVER", "KURLY"
	TaskID TaskID

	// CommandID 해당 작업 내에서 수행할 구체적인 명령어 ID입니다. (Required)
	// 예: "CheckPrice", "MonitorStock"
	CommandID TaskCommandID

	// NotifierID 알림을 전송할 대상 채널(Notifier)의 식별자입니다. (Optional)
	// 특정 메신저나 채널로 알림을 강제하고 싶을 때 사용합니다.
	// 이 값을 지정하지 않거나 빈 문자열("")일 경우, 해당 Task 설정에 정의된 기본 Notifier가 자동으로 사용됩니다.
	NotifierID NotifierID

	// NotifyOnStart 작업 실행 시작 시점에 즉시 알림을 발송할지 여부를 결정합니다. (Optional)
	// - true: 작업이 큐에서 꺼내져 실행되는 즉시 "작업 시작" 알림을 전송합니다. 장기 실행 작업의 경우 즉각적인 피드백을 제공하여 UX를 향상시킬 수 있습니다.
	// - false: 시작 알림을 보내지 않고, 작업 결과(성공/실패)에 대한 알림만 전송합니다. (기본값)
	NotifyOnStart bool

	// RunBy 이 작업을 요청한 실행 주체를 나타냅니다. (Required)
	// 로깅, 감사, 그리고 알림 메시지 포맷팅 시 "누가 실행했는지"를 구별하기 위해 사용됩니다.
	// 예: TaskRunByUser(사용자 수동 실행), TaskRunByScheduler(스케줄러 자동 실행)
	RunBy TaskRunBy
}

TaskSubmitRequest 작업 실행 요청을 캡슐화한 데이터 전송 객체(DTO)입니다.

API 서비스 또는 내부 스케줄러로부터 작업 실행 명령을 받을 때 사용되며, 실행할 작업의 종류, 세부 명령어, 알림 옵션, 실행 주체 등 작업 컨텍스트 설정에 필요한 모든 정보를 포함합니다.

func (*TaskSubmitRequest) Validate

func (r *TaskSubmitRequest) Validate() error

type TaskSubmitter

type TaskSubmitter interface {
	// Submit 작업을 실행 요청 대기열(Queue)에 등록합니다.
	Submit(ctx context.Context, req *TaskSubmitRequest) error
}

TaskSubmitter 새로운 작업을 시스템에 등록하는 인터페이스입니다.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL