[go] html/template 패키지의 템플릿 동기화
golang의 html/template 패키지는 웹 애플리케이션에서 템플릿을 사용할 수 있도록 해주는 중요한 패키지입니다. 이 패키지를 사용하면 서버측에서 동적인 HTML을 생성할 수 있습니다. 그런데 템플릿이 변경될 때마다 서버를 재시작해야만 하는 문제가 있습니다. 이 문제를 해결하기 위해 템플릿을 동기화하는 방법에 대해 알아보겠습니다.
템플릿 동기화
html/template 패키지의 템플릿을 동적으로 변경하기 위해서는 Filesystem 인터페이스를 구현하는 파일 시스템을 사용할 수 있습니다. 이를 통해 템플릿 파일의 변경을 감지하여 동기화할 수 있습니다.
아래는 템플릿을 동기화하기 위한 예제 코드입니다.
package main
import (
"html/template"
"log"
"net/http"
"os"
"time"
)
func main() {
// 템플릿 파일을 읽어들이는 함수
readTemplate := func() (*template.Template, error) {
return template.ParseFS(os.DirFS("templates"), "index.html")
}
t, err := readTemplate()
if err != nil {
log.Fatal(err)
}
go func() {
for {
// 템플릿 파일의 변경을 주기적으로 감지
time.Sleep(5 * time.Second)
newT, err := readTemplate()
if err != nil {
log.Println("error reloading template:", err)
} else {
t = newT
log.Println("template reloaded")
}
}
}()
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
t.Execute(w, nil)
})
log.Fatal(http.ListenAndServe(":8080", nil))
}
위 예제 코드는 주기적으로 템플릿 파일을 다시 읽어들여 서버를 재시작할 필요 없이 동기화하는 방법을 보여줍니다.
이처럼 Filesystem을 통해 템플릿 파일을 동기화하는 방법으로 실시간으로 변화하는 템플릿을 적용할 수 있습니다.
이상으로 html/template 패키지를 활용하여 템플릿 동기화하는 방법에 대해 살펴보았습니다.