[go] go 언어에서의 HTML 템플릿과 html/escape 패키지

HTML은 웹 페이지의 구조와 디자인을 정의하는 데 사용되는 중요한 언어입니다. Go 언어에서는 HTML을 동적으로 생성할 수 있는 템플릿과 HTML escaping을 도와주는 패키지를 제공합니다. 이번에는 Go의 HTML 템플릿과 html/escape 패키지를 살펴보겠습니다.

HTML 템플릿 사용하기

Go 언어에서 HTML 템플릿은 html/template 패키지를 통해 사용할 수 있습니다. 이 패키지를 사용하면 동적으로 HTML을 생성하고 템플릿을 렌더링할 수 있습니다.

다음은 간단한 HTML 템플릿의 예시입니다:

package main

import (
	"html/template"
	"os"
)

func main() {
	tmpl, err := template.New("hello").Parse("<h1>Hello, {{.Name}}</h1>")
	if err != nil {
		panic(err)
	}
	data := struct{ Name string }{"World"}
	err = tmpl.Execute(os.Stdout, data)
	if err != nil {
		panic(err)
	}
}

위 예시에서는 html/template 패키지를 사용하여 “{{.Name}}” 부분에 대체될 값을 가진 간단한 HTML 템플릿을 정의하고 렌더링하는 방법을 보여줍니다.

HTML escaping 처리

Go에서는 HTML escaping을 통해 웹 페이지의 보안성을 높일 수 있습니다. html/template 패키지는 자동으로 HTML escaping을 수행하여 악의적으로 주입된 스크립트 코드가 실행되지 않도록 보호합니다.

아래는 HTML escaping을 적용하는 예시입니다:

package main

import (
	"html/template"
	"os"
)

func main() {
	tmpl, err := template.New("hello").Parse("<h1>Hello, {{.Name | html}}</h1>")
	if err != nil {
		panic(err)
	}
	data := struct{ Name string }{"<script>alert('xss')</script>"}
	err = tmpl.Execute(os.Stdout, data)
	if err != nil {
		panic(err)
	}
}

위 예시에서는 html 함수를 사용하여 Name 필드의 값을 HTML escaping하여 출력합니다.

결론

Go 언어에서 HTML 템플릿과 html/escape 패키지는 웹 애플리케이션을 개발하고 웹 페이지를 안전하게 렌더링하는 데 매우 유용합니다. 이러한 기능을 적절히 활용하여 보안에 신경을 쓰며 동적인 웹 페이지를 개발하는 데 도움을 얻을 수 있습니다.

참고 자료