Documentation
¶
Index ¶
- Variables
- func DecodeMap(d interface{}, m map[string]interface{}) error
- func EachSourceElementIsInTargetElementOrNot(source, target interface{}, equalFn EqualFunc, onFoundFn OnFoundFunc, ...) error
- func FetchHTMLDocument(fetcher Fetcher, url string) (*goquery.Document, error)
- func FetchHTMLSelection(fetcher Fetcher, url string, selector string) (*goquery.Selection, error)
- func FetchJSON(fetcher Fetcher, method, url string, header map[string]string, body io.Reader, ...) error
- func Filter(s string, includedKeywords, excludedKeywords []string) bool
- func NewErrCommandNotSupported(commandID CommandID) error
- func NewErrHTMLStructureChanged(url, details string) error
- func NewErrTypeAssertionFailed(targetName string, expected, got interface{}) error
- func Register(taskID ID, config *Config)
- func ScrapeHTML(fetcher Fetcher, url string, selector string, ...) error
- func TakeSliceArg(x interface{}) ([]interface{}, bool)
- type Canceler
- type CommandConfig
- type CommandID
- type Config
- type ConfigLookup
- type EqualFunc
- type ExecuteFunc
- type Executor
- type Fetcher
- type FileTaskResultStorage
- type HTTPFetcher
- type Handler
- type ID
- type InstanceID
- type NewSnapshotFunc
- type NewTaskFunc
- type NotificationSender
- type OnFoundFunc
- type OnNotFoundFunc
- type Registry
- type RetryFetcher
- type RunBy
- type Service
- type SubmitRequest
- type Submitter
- type Task
- func (t *Task) Cancel()
- func (t *Task) ElapsedTimeAfterRun() int64
- func (t *Task) GetCommandID() CommandID
- func (t *Task) GetFetcher() Fetcher
- func (t *Task) GetID() ID
- func (t *Task) GetInstanceID() InstanceID
- func (t *Task) GetNotifierID() string
- func (t *Task) GetRunBy() RunBy
- func (t *Task) IsCanceled() bool
- func (t *Task) Run(taskCtx TaskContext, notificationSender NotificationSender, ...)
- func (t *Task) SetExecute(fn ExecuteFunc)
- func (t *Task) SetFetcher(f Fetcher)
- func (t *Task) SetRunBy(runBy RunBy)
- func (t *Task) SetStorage(storage TaskResultStorage)
- type TaskContext
- type TaskResultStorage
Constants ¶
This section is empty.
Variables ¶
var ( // ErrTaskNotSupported 지원하지 않는 작업(Task)에 접근하려 할 때 반환됩니다. ErrTaskNotSupported = apperrors.New(apperrors.InvalidInput, "지원하지 않는 작업입니다") // ErrCommandNotSupported 해당 작업(Task)은 존재하지만, 요청된 명령(Command)을 지원하지 않을 때 반환됩니다. ErrCommandNotSupported = apperrors.New(apperrors.InvalidInput, "지원하지 않는 명령입니다") // ErrTaskConfigNotFound 작업 실행에 필요한 설정(Config)을 찾을 수 없을 때 반환됩니다. ErrTaskConfigNotFound = apperrors.New(apperrors.NotFound, "해당 작업 생성에 필요한 구성 정보가 존재하지 않습니다") // ErrInvalidTaskData 작업 설정 데이터(JSON/Map) 디코딩 실패 시 반환됩니다. ErrInvalidTaskData = apperrors.New(apperrors.InvalidInput, "작업 데이터가 유효하지 않습니다") // ErrHTMLStructureChanged HTML 페이지 구조가 변경되어 파싱에 실패했을 때 반환됩니다. ErrHTMLStructureChanged = apperrors.New(apperrors.ExecutionFailed, "불러온 페이지의 문서구조가 변경되었습니다. CSS셀렉터를 확인하세요") )
Functions ¶
func DecodeMap ¶ added in v1.0.1
DecodeMap 맵 형태의 데이터를 구조체로 디코딩합니다. json 패키지를 사용하여 마샬링 후 다시 언마샬링하는 방식으로 동작합니다. d는 대상 구조체의 포인터여야 합니다.
func EachSourceElementIsInTargetElementOrNot ¶ added in v1.0.1
func EachSourceElementIsInTargetElementOrNot(source, target interface{}, equalFn EqualFunc, onFoundFn OnFoundFunc, onNotFoundFn OnNotFoundFunc) error
func FetchHTMLDocument ¶ added in v1.0.1
FetchHTMLDocument 지정된 URL로 HTTP 요청을 보내 HTML 문서를 가져오고, goquery.Document로 파싱합니다. 응답 헤더의 Content-Type을 분석하여, 비 UTF-8 인코딩(예: EUC-KR) 페이지도 자동으로 UTF-8로 변환하여 처리합니다.
func FetchHTMLSelection ¶ added in v1.0.1
FetchHTMLSelection 지정된 URL의 HTML 문서에서 CSS 선택자(selector)에 해당하는 요소를 찾습니다. 선택된 요소가 없으면 에러를 반환하여, 변경된 웹 페이지 구조를 조기에 감지할 수 있도록 돕습니다.
func FetchJSON ¶ added in v1.0.1
func FetchJSON(fetcher Fetcher, method, url string, header map[string]string, body io.Reader, v interface{}) error
FetchJSON HTTP 요청을 수행하고 응답 본문(JSON)을 지정된 구조체(v)로 디코딩합니다.
func NewErrCommandNotSupported ¶ added in v1.0.1
NewErrCommandNotSupported 지원하지 않는 명령(Command)일 때 상세 메시지와 함께 에러를 반환합니다.
func NewErrHTMLStructureChanged ¶ added in v1.0.1
NewErrHTMLStructureChanged HTML 페이지의 DOM 구조 변경으로 인한 파싱 실패 시, 디버깅에 필요한 컨텍스트(대상 URL, CSS 선택자 등 상세 정보)를 포함한 구조화된 에러를 생성합니다.
func NewErrTypeAssertionFailed ¶ added in v1.0.1
NewErrTypeAssertionFailed 타입 단언(Type Assertion) 실패 시 사용하는 에러를 생성합니다.
func Register ¶ added in v1.0.1
Register 전역 Registry에 새로운 Task를 등록하는 패키지 레벨 진입점(Entry Point)입니다. "Fail Fast" 원칙에 따라, 유효하지 않은 설정이나 중복 ID 감지 시 즉시 패닉(Panic)을 발생시켜 애플리케이션 시작 단계에서 잠재적 설정 오류를 확실하게 차단합니다.
func ScrapeHTML ¶ added in v1.0.1
func ScrapeHTML(fetcher Fetcher, url string, selector string, f func(int, *goquery.Selection) bool) error
ScrapeHTML 지정된 URL의 HTML 문서에서 CSS 선택자에 해당하는 모든 요소를 순회하며 콜백 함수를 실행합니다.
func TakeSliceArg ¶ added in v1.0.1
func TakeSliceArg(x interface{}) ([]interface{}, bool)
Types ¶
type Canceler ¶ added in v1.0.1
type Canceler interface {
// CancelTask 특정 작업 인스턴스를 취소합니다. 취소 성공 여부(error)를 반환합니다.
CancelTask(instanceID InstanceID) error
}
Canceler 실행 중인 작업을 취소하는 인터페이스입니다.
type CommandConfig ¶ added in v1.0.1
type CommandConfig struct {
ID CommandID
// AllowMultiple 동일 명령어의 중복 실행(Concurrency) 허용 여부입니다.
// - true: 여러 인스턴스가 동시에 병렬 실행될 수 있습니다.
// - false: 이미 실행 중인 인스턴스가 있다면 새로운 요청은 무시됩니다 (Throttling/Idempotency).
AllowMultiple bool
NewSnapshot NewSnapshotFunc
}
CommandConfig 개별 명령어(Command)에 대한 실행 정책과 결과 데이터 구조체를 생성하는 구조체입니다.
type CommandID ¶ added in v1.0.1
type CommandID string
CommandID 작업 내에서 실행할 구체적인 명령어의 식별자입니다.
type Config ¶ added in v1.0.1
type Config struct {
// Commands 이 Task가 수행할 수 있는 모든 하위 명령어(Command)의 정의 목록입니다.
// Task는 최소 하나 이상의 CommandConfig를 포함해야 하며, 이를 통해 지원 가능한 기능의 범위를 결정합니다.
Commands []*CommandConfig
NewTask NewTaskFunc
}
Config Task 생성 및 명령어(Command) 구성을 위한 메타데이터를 정의하는 불변(Immutable) 설정 객체입니다. 레지스트리에 등록된 이후에는 상태가 변경되지 않으며(Read-Only), Task 인스턴스를 생성하기 위한 청사진(Blueprint)으로 사용됩니다.
type ConfigLookup ¶ added in v1.0.1
type ConfigLookup struct {
Task *Config
Command *CommandConfig
}
ConfigLookup 요청된 ID(Task/Command)를 통해 Registry에서 조회된(Found) 설정 조합입니다.
func FindConfigForTest ¶ added in v1.0.1
func FindConfigForTest(taskID ID, commandID CommandID) (*ConfigLookup, error)
FindConfigForTest 테스트 목적으로 설정 정보를 조회합니다. (프로덕션 사용 금지).
type ExecuteFunc ¶ added in v1.0.1
ExecuteFunc 작업 실행 로직을 정의하는 함수 타입입니다.
이 함수는 순수 함수(Pure Function)에 가깝게 구현되어야 하며, 작업에 필요한 데이터(Snapshot)를 받아 처리한 후 결과 메시지와 변경된 데이터를 반환합니다.
매개변수:
- previousSnapshot: 이전 실행 시 저장된 데이터 (상태 복원용). 최초 실행 시에는 nil 또는 초기값이 전달됩니다.
- supportsHTML: 알림 채널(Notifier)이 HTML 포맷을 지원하는지 여부.
반환값:
- string: 사용자에게 알림으로 전송할 메시지 본문. 빈 문자열일 경우 알림을 보내지 않습니다.
- interface{}: 실행 완료 후 저장할 새로운 데이터. 다음 실행 시 data 인자로 전달됩니다.
- error: 실행 중 발생한 에러. nil이 아니면 작업 실패로 처리됩니다.
type Fetcher ¶ added in v1.0.0
type Fetcher interface {
Get(url string) (*http.Response, error)
Do(req *http.Request) (*http.Response, error)
}
Fetcher HTTP 요청을 수행하는 인터페이스
type FileTaskResultStorage ¶ added in v1.0.1
type FileTaskResultStorage struct {
// contains filtered or unexported fields
}
FileTaskResultStorage 파일 시스템 기반의 Task 결과 저장소 구현체
func NewFileTaskResultStorage ¶ added in v1.0.1
func NewFileTaskResultStorage(appName string) *FileTaskResultStorage
NewFileTaskResultStorage 새로운 파일 기반 저장소를 생성합니다. 기본 저장 디렉토리는 "data" 입니다.
func (*FileTaskResultStorage) Load ¶ added in v1.0.1
func (s *FileTaskResultStorage) Load(taskID ID, commandID CommandID, v interface{}) error
Load 저장된 Task 결과를 파일에서 읽어옵니다.
func (*FileTaskResultStorage) Save ¶ added in v1.0.1
func (s *FileTaskResultStorage) Save(taskID ID, commandID CommandID, v interface{}) error
Save Task 결과를 파일에 저장합니다. (Atomic Write 적용)
func (*FileTaskResultStorage) SetBaseDir ¶ added in v1.0.1
func (s *FileTaskResultStorage) SetBaseDir(dir string)
SetBaseDir 데이터 저장 디렉토리를 변경합니다.
type HTTPFetcher ¶ added in v1.0.0
type HTTPFetcher struct {
// contains filtered or unexported fields
}
HTTPFetcher 기본 타임아웃(30초) 및 User-Agent 자동 추가 기능이 내장된 HTTP 클라이언트 구현체입니다.
func NewHTTPFetcher ¶ added in v1.0.1
func NewHTTPFetcher() *HTTPFetcher
NewHTTPFetcher 기본 타임아웃(30초) 설정이 포함된 새로운 HTTPFetcher 인스턴스를 생성합니다.
type Handler ¶ added in v1.0.1
type Handler interface {
GetID() ID
GetCommandID() CommandID
GetInstanceID() InstanceID
// GetNotifierID 알림을 발송할 대상 Notifier의 ID를 반환합니다.
GetNotifierID() string
// Cancel 작업을 취소 요청합니다.
// 호출 즉시 IsCanceled()가 true를 반환해야 하며, 실행 중인 로직은 이를 감지하여 조기 종료해야 합니다.
Cancel()
// IsCanceled 작업이 취소되었는지 여부를 반환합니다.
// Run 루프 내에서 주기적으로 확인하여, 취소 시 작업을 중단하는 용도로 사용됩니다.
IsCanceled() bool
// ElapsedTimeAfterRun 작업이 시작된 후 경과된 시간(초)을 반환합니다.
// 작업 모니터링이나 타임아웃 감지에 활용될 수 있습니다.
ElapsedTimeAfterRun() int64
// SetStorage 작업 결과를 저장할 스토리지를 주입합니다.
// 테스트 시 Mock 스토리지를 주입하거나, 런타임에 동적으로 스토리지를 변경할 때 사용됩니다.
SetStorage(storage TaskResultStorage)
// Run 작업을 실행하는 메인 메서드입니다.
Run(taskCtx TaskContext, notificationSender NotificationSender, taskStopWG *sync.WaitGroup, taskDoneC chan<- InstanceID)
}
Handler 개별 Task 인스턴스를 제어하고 상태를 조회하기 위한 인터페이스입니다.
Handler는 Service 레이어와 개별 Task 구현체(Task 구조체) 사이의 계약(Contract)을 정의합니다. Service는 이 인터페이스를 통해 Task의 구체적인 구현을 알 필요 없이, 표준화된 방식으로 실행(Run), 취소(Cancel), 상태 확인 등을 수행할 수 있습니다.
type InstanceID ¶ added in v1.0.1
type InstanceID string
InstanceID 실행 중인 작업 인스턴스의 고유 식별자입니다.
func (InstanceID) IsEmpty ¶ added in v1.0.1
func (id InstanceID) IsEmpty() bool
func (InstanceID) String ¶ added in v1.0.1
func (id InstanceID) String() string
func (InstanceID) Validate ¶ added in v1.0.1
func (id InstanceID) Validate() error
type NewSnapshotFunc ¶ added in v1.0.1
type NewSnapshotFunc func() interface{}
NewSnapshotFunc Task 결과 데이터 구조체를 생성하는 팩토리 함수입니다.
type NewTaskFunc ¶ added in v1.0.1
type NewTaskFunc func(InstanceID, *SubmitRequest, *config.AppConfig) (Handler, error)
NewTaskFunc Task 인스턴스를 생성하는 팩토리 함수입니다.
type NotificationSender ¶ added in v1.0.1
type NotificationSender interface {
// Notify 지정된 NotifierID를 통해 알림 메시지를 전송합니다.
// Task의 실행 컨텍스트(TaskContext)를 함께 전달하여, 알림 수신자가 작업의 메타데이터(TaskID, Title, 실행 시간 등)를
// 확인할 수 있도록 지원합니다. 메시지 형식은 Notifier 구현체에 따라 달라질 수 있습니다.
//
// 파라미터:
// - taskCtx: 작업 실행 컨텍스트 정보 (필수)
// - notifierID: 메시지를 발송할 대상 Notifier의 고유 ID
// - message: 전송할 알림 메시지 본문
//
// 반환값:
// - bool: 발송 요청이 성공적으로 처리되었는지 여부
Notify(taskCtx TaskContext, notifierID string, message string) bool
// NotifyDefault 시스템 기본 알림 채널로 일반 메시지를 발송합니다.
// 특정 Notifier를 지정하지 않고, 시스템 설정에 정의된 기본 채널(예: 운영자 공통 채널)로
// 알림을 보내야 할 때 사용합니다.
//
// 파라미터:
// - message: 전송할 메시지 내용
//
// 반환값:
// - bool: 발송 요청이 성공적으로 처리되었는지 여부
NotifyDefault(message string) bool
// SupportsHTML 지정된 Notifier가 HTML 포맷의 메시지 본문을 지원하는지 확인합니다.
// 마크다운이나 텍스트 스타일링(굵게, 기울임, 링크 등)이 포함된 메시지를 전송하기 전에,
// 해당 Notifier가 이를 올바르게 렌더링할 수 있는지 검사하는 용도로 사용됩니다.
//
// 파라미터:
// - notifierID: 지원 여부를 확인할 Notifier의 ID
//
// 반환값:
// - bool: HTML 포맷 지원 여부 (true: 지원함, false: 텍스트로만 처리됨)
SupportsHTML(notifierID string) bool
}
NotificationSender Task 실행 중 발생하는 다양한 이벤트(시작, 성공, 실패 등)를 외부로 알리기 위한 인터페이스입니다. Task 로직은 이 인터페이스를 통해 구체적인 알림 수단(Telegram, Email, Slack 등)의 구현 상세에 의존하지 않고 추상화된 방식으로 메시지를 전달합니다. 이를 통해 알림 채널의 유연한 교체와 확장이 가능해집니다.
type OnFoundFunc ¶ added in v1.0.1
type OnFoundFunc func(selem, telem interface{})
type OnNotFoundFunc ¶ added in v1.0.1
type OnNotFoundFunc func(selem interface{})
type Registry ¶ added in v1.0.1
type Registry struct {
// contains filtered or unexported fields
}
Registry 등록된 모든 Task와 Command의 설정을 관리하는 중앙 저장소(Repository)입니다.
func (*Registry) RegisterForTest ¶ added in v1.0.1
RegisterForTest 유효성 검증 절차를 우회하여 설정을 강제 등록하는 테스트 전용 헬퍼 메서드입니다 (프로덕션 사용 금지).
type RetryFetcher ¶ added in v1.0.0
type RetryFetcher struct {
// contains filtered or unexported fields
}
RetryFetcher Fetcher 인터페이스를 구현하며, HTTP 요청 실패 시 자동으로 재시도를 수행합니다. 단순한 재시도가 아닌, Exponential Backoff(지수 백오프)와 Jitter(무작위 지연) 전략을 결합하여 서버 부하를 최소화하면서도 성공 확률을 높이는 안정적인 재시도 메커니즘을 제공합니다.
func NewRetryFetcher ¶ added in v1.0.0
func NewRetryFetcher(delegate Fetcher, maxRetries int, retryDelay time.Duration, maxDelay time.Duration) *RetryFetcher
NewRetryFetcher 새로운 RetryFetcher 인스턴스를 생성합니다. 안정적인 동작을 위해 maxRetries는 0~10 범위로 자동 보정되며, retryDelay는 최소 1초 이상으로 설정됩니다.
Parameters:
- delegate: 실제 HTTP 요청을 수행할 원본 Fetcher
- maxRetries: 최대 재시도 횟수 (0-10 권장)
- retryDelay: 재시도 대기 시간 (최소 1초)
- maxDelay: 최대 대기 시간 (지수 백오프 증가 시 이 값을 넘지 않음)
func NewRetryFetcherFromConfig ¶ added in v1.0.1
func NewRetryFetcherFromConfig(maxRetries int, retryDelayStr string) *RetryFetcher
NewRetryFetcherFromConfig 설정값(재시도 횟수, 지연 시간 문자열)을 기반으로 RetryFetcher 인스턴스를 생성합니다.
Parameters:
- maxRetries: 최대 재시도 횟수 (0-10 권장)
- retryDelayStr: 재시도 대기 시간 문자열 (최소 1초)
func (*RetryFetcher) Do ¶ added in v1.0.0
Do HTTP 요청을 수행하며, 실패 시 설정된 정책에 따라 재시도합니다.
[재시도 전략 상세] 1. Exponential Backoff: 재시도 횟수가 증가할수록 대기 시간이 2배씩 증가합니다 (1초, 2초, 4초, ...). 2. Max Delay Cap: 대기 시간은 설정된 최대 시간(maxDelay)을 초과하지 않습니다. 3. Full Jitter: 대기 시간 범위 내에서 무작위 값을 더하거나 빼서(+/- 10%), 여러 클라이언트가 동시에 재시도하는 'Thundering Herd' 문제를 방지합니다. 4. Retry Conditions: 네트워크 오류, 5xx 서버 에러, 429(Too Many Requests) 응답 시 재시도합니다.
type Service ¶ added in v1.0.1
type Service struct {
// contains filtered or unexported fields
}
Service 애플리케이션의 핵심 비즈니스 로직인 Task의 실행, 스케줄링, 상태 관리를 총괄하는 중앙 오케스트레이터(Central Orchestrator)입니다.
설계 철학 및 아키텍처: 이 서비스는 '단일 이벤트 루프(Single-threaded Event Loop)' 패턴을 차용하여 설계되었습니다. Task의 제출(Submit), 완료(Done), 취소(Cancel) 등 모든 상태 변경 이벤트는 채널을 통해 직렬화(Serialize)되며, 메인 루프에서 순차적으로 처리됩니다. 이를 통해 복잡한 뮤텍스(Mutex) 사용을 최소화하고, 교착 상태(Deadlock) 없는 안전한 동시성을 보장합니다.
주요 기능 및 책임:
- 요청 수신 및 검증 (Request Handling): 실행 요청의 유효성을 'Fail Fast' 원칙에 따라 즉시 검증합니다.
- 스케줄링 (Scheduling): Cron 표현식에 따라 정해진 시간에 Task를 자동으로 실행합니다.
- 동시성 제어 (Concurrency Control): Task별 설정(AllowMultiple)에 따라 중복 실행 방지 및 실행 흐름을 제어합니다.
- 안정적 종료 (Graceful Shutdown): 시스템 종료 시 실행 중인 Task들이 안전하게 작업을 마칠 수 있도록 대기하고 정리합니다.
func NewService ¶
NewService 새로운 Service 인스턴스를 생성합니다.
func (*Service) CancelTask ¶ added in v1.0.1
func (s *Service) CancelTask(instanceID InstanceID) (err error)
CancelTask 특정 Task 인스턴스의 실행 취소를 요청합니다.
func (*Service) SetNotificationSender ¶ added in v1.0.1
func (s *Service) SetNotificationSender(notificationSender NotificationSender)
func (*Service) SubmitTask ¶ added in v1.0.1
func (s *Service) SubmitTask(req *SubmitRequest) (err error)
SubmitTask 실행할 Task를 큐에 제출합니다.
type SubmitRequest ¶ added in v1.0.1
type SubmitRequest struct {
// TaskID 실행할 작업의 고유 식별자입니다. (예: "NAVER", "KURLY")
TaskID ID
// CommandID 작업 내에서 수행할 구체적인 명령어 식별자입니다. (예: "CheckPrice")
CommandID CommandID
// TaskContext 작업 실행 컨텍스트입니다.
// 실행 흐름 전반에 걸쳐 메타데이터(Title, ID 등)를 전달하고, 취소 신호(Cancellation)를 전파하는 데 사용됩니다.
TaskContext TaskContext
// NotifierID 알림을 전송할 대상 채널 또는 수단(Notifier)의 식별자입니다.
// 지정하지 않을 경우, Task 설정에 정의된 기본 Notifier가 사용됩니다.
NotifierID string
// NotifyOnStart 작업 시작 시점에 '시작 알림'을 발송할지 여부를 결정하는 플래그입니다.
NotifyOnStart bool
// RunBy 해당 작업을 누가/무엇이 실행 요청했는지를 나타냅니다.
// (예: RunByUser - 사용자 수동 실행, RunByScheduler - 스케줄러 자동 실행)
RunBy RunBy
}
SubmitRequest 작업 식별자, 커맨드, 컨텍스트 등 작업(Task) 실행에 필요한 모든 메타데이터와 요청 정보를 캡슐화한 구조체입니다. Scheduler 또는 API 요청 등을 통해 작업을 트리거할 때 사용됩니다.
func (*SubmitRequest) Validate ¶ added in v1.0.1
func (r *SubmitRequest) Validate() error
Validate 유효한 요청인지 검증합니다.
type Submitter ¶ added in v1.0.1
type Submitter interface {
// SubmitTask 작업을 제출합니다. 제출 성공 여부(error)를 반환합니다.
SubmitTask(req *SubmitRequest) error
}
Submitter 작업을 제출하는 인터페이스입니다.
type Task ¶ added in v1.0.1
type Task struct {
// contains filtered or unexported fields
}
Task 개별 작업의 실행 단위이자 상태를 관리하는 핵심 구조체입니다.
Task는 불변 상태(id, commandID 등)와 가변 상태(canceled, storage 상태 등)를 모두 포함하며, Service에 의해 생성되고 생명주기가 관리됩니다. 이 구조체는 '작업의 정의'와 '실행 상태'를 모두 캡슐화합니다.
주요 특징:
- 상태 보존 (Stateful): storage를 통해 실행 결과를 영속화하여, 스크래핑 작업 간의 데이터 연속성을 보장합니다.
- 실행 제어 (Control): Cancel() 메서드를 통해 실행 중인 작업을 안전하게 중단할 수 있습니다.
- 의존성 주입 (DI): storage, fetcher 등의 외부 의존성을 필드로 주입받아 테스트 용이성을 높입니다.
func NewBaseTask ¶ added in v1.0.1
func NewBaseTask(id ID, commandID CommandID, instanceID InstanceID, notifierID string, runBy RunBy) Task
NewBaseTask Task 구조체의 필수 불변 필드들을 초기화하여 반환하는 생성자입니다. 하위 Task 구현체는 이 함수를 사용하여 기본 Task 필드를 초기화해야 합니다.
func (*Task) ElapsedTimeAfterRun ¶ added in v1.0.1
func (*Task) GetCommandID ¶ added in v1.0.1
func (*Task) GetFetcher ¶ added in v1.0.1
func (*Task) GetInstanceID ¶ added in v1.0.1
func (t *Task) GetInstanceID() InstanceID
func (*Task) GetNotifierID ¶ added in v1.0.1
func (*Task) IsCanceled ¶ added in v1.0.1
func (*Task) Run ¶ added in v1.0.1
func (t *Task) Run(taskCtx TaskContext, notificationSender NotificationSender, taskStopWG *sync.WaitGroup, taskDoneC chan<- InstanceID)
Run Task의 실행 수명 주기를 관리하는 메인 진입점입니다.
func (*Task) SetExecute ¶ added in v1.0.1
func (t *Task) SetExecute(fn ExecuteFunc)
func (*Task) SetFetcher ¶ added in v1.0.1
func (*Task) SetStorage ¶ added in v1.0.1
func (t *Task) SetStorage(storage TaskResultStorage)
type TaskContext ¶
type TaskContext interface {
context.Context // 표준 Context 인터페이스 임베딩 (DeadLine, Done, Err, Value 등 지원)
With(key, val interface{}) TaskContext
WithTask(taskID ID, commandID CommandID) TaskContext
WithInstanceID(instanceID InstanceID, elapsedTimeAfterRun int64) TaskContext
WithTitle(title string) TaskContext
WithError() TaskContext
GetID() ID
GetCommandID() CommandID
GetInstanceID() InstanceID
GetTitle() string
GetElapsedTimeAfterRun() int64
IsErrorOccurred() bool
}
TaskContext 작업 실행 흐름 전반에서 메타데이터를 전달하는 컨텍스트 인터페이스입니다.
func NewTaskContext ¶ added in v1.0.1
func NewTaskContext() TaskContext
NewTaskContext 새로운 TaskContext를 생성합니다.