0Pricing
Go Academy · 강의

시간 기반 예약

주기적인 작업 실행하기

시간 기반 예약은(는) CoddyKit의 무료 Go Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Go Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Go Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

일정에 따라 작업 실행하기

많은 시스템에는 주기적인 작업이 필요합니다. 예를 들어 매일 밤 임시 파일을 정리하거나, 매일 아침 요약 이메일을 보내거나, 매분 API를 조회하는 작업입니다. 이 수업에서는 표준 라이브러리를 사용한 Go의 시간 기반 일정 실행을 소개합니다.

time 패키지

Go의 time 패키지가 기반이 됩니다. 주요 도구는 다음과 같습니다.

  • time.Sleep은 고루틴을 일시 중지합니다
  • time.After는 한 번 발생하는 채널을 반환합니다
  • time.Ticker는 반복해서 발생합니다
  • time.Timer는 지연 시간 후 한 번 발생합니다

단순한 반복

가장 단순한 일정 실행기는 작업을 수행하고, 대기하고, 반복합니다.

package main

import (
    "fmt"
    "time"
)

func main() {
    for i := 0; i < 3; i++ {
        fmt.Println("tick", i)
        time.Sleep(10 * time.Millisecond)
    }
}

Sleep이 어긋나는 이유

Sleep 반복은 시간이 지날수록 어긋납니다. 작업에 200ms가 걸리고 1초 동안 대기하면 실제 간격은 1.2초가 되며, 이 차이가 누적됩니다. 정확한 간격이 필요하다면 다음 수업에서 다룰 Ticker를 사용하십시오.

일회성 지연에 time.After 사용하기

time.After(d)는 지속 시간 d 후 한 번 값을 받는 채널을 반환합니다. 시간 초과를 구현하는 select에서 유용합니다.

select {
case <-time.After(2 * time.Second):
    fmt.Println("2s elapsed")
}

time.Timer

Timer는 한 번 발생하며 중지하거나 재설정할 수 있습니다. 취소할 수 없는 time.After와는 다릅니다.

t := time.NewTimer(5 * time.Second)
defer t.Stop()
<-t.C
fmt.Println("fired")

특정 시각에 일정 실행하기

예를 들어 오전 3 AM에 실행하려면 해당 시각까지의 지속 시간을 계산하고 그만큼 대기하거나 타이머를 설정한 다음, 다음 날을 위해 일정을 다시 설정합니다.

now := time.Now()
next := time.Date(now.Year(), now.Month(), now.Day(), 3, 0, 0, 0, now.Location())
if next.Before(now) {
    next = next.Add(24 * time.Hour)
}
fmt.Println("sleep for", time.Until(next))

지속 시간에는 유형이 있습니다

time.Duration은 나노초 단위의 int64이며, time.Second, time.Minute, time.Hour 같은 편리한 상수를 제공합니다. 이들을 곱하면 간격을 읽기 쉽게 표현할 수 있습니다.

every := 30 * time.Minute
fmt.Println(every)

단조 시계와 벽시계

Go의 time.Now에는 경과 시간 측정에 사용되는 단조 시계 값이 포함되어 있어 시계 조정의 영향을 받지 않습니다. 경과 시간에는 벽시각을 빼지 말고 time.Since를 사용하십시오.

start := time.Now()
// ... work ...
fmt.Println("took", time.Since(start))

라이브러리를 사용할 시점

복잡한 일정(예: "매주 평일 9시 15분")에서는 시간 계산을 직접 작성하면 오류가 발생하기 쉽습니다. 다음 수업에서 다룰 robfig/cron 라이브러리는 cron 표현식을 대신 해석해 줍니다.

실행 가능: 다음 실행 시각 계산하기

이 독립 실행형 프로그램은 time 패키지만 사용하여 다음 분 경계까지 얼마나 남았는지 계산합니다.

package main

import (
    "fmt"
    "time"
)

func main() {
    now := time.Date(2026, 1, 1, 10, 30, 45, 0, time.UTC)
    nextMinute := now.Truncate(time.Minute).Add(time.Minute)
    fmt.Println("now:", now.Format("15:04:05"))
    fmt.Println("next run:", nextMinute.Format("15:04:05"))
    fmt.Println("wait:", nextMinute.Sub(now))
}

빠른 확인

시간 기반 일정 실행에 대한 이해도를 확인해 보십시오.

복습

시간 기반 일정 실행의 기초를 배웠습니다.

  • time 패키지는 Sleep, After, Timer, Ticker를 제공합니다
  • Sleep 반복은 어긋나지만 틱커는 일정을 유지합니다
  • time.Until을 사용하여 목표 시각까지의 지속 시간을 계산합니다
  • 경과 시간을 측정할 때 time.Since와 단조 시계를 사용합니다

자주 묻는 질문

“시간 기반 예약” 강의는 무료인가요?

네 — “시간 기반 예약” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Go Academy 강의 전체를 잠금 해제할 수 있습니다. Go Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“시간 기반 예약”에서 뭘 배우나요?

주기적인 작업 실행하기 브라우저에서 직접 실행하는 실습 코드로 Go Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Go Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Go Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“시간 기반 예약” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Go Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Go Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 시간 기반 예약
  2. robfig/cron 라이브러리
  3. 간격을 위한 티커
  4. 작업의 정상적인 종료
← Go Academy(으)로 돌아가기