커스텀 스피너 템플릿 작성 가이드
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
Go 및 TinyGo 기반 웹 애플리케이션 개발자, 템플릿 기반 프로젝트 구조 설계자
핵심 요약
- 스피너 템플릿의 주요 기능: 프로젝트 초기화 시간 단축, 규제 준수 보장, 팀 간 일관성 유지
- 템플릿 구조:
spin-template.toml
메타데이터 파일과content
폴더의 소스 코드 구성 - 사용 예시:
kv-go
템플릿에서key-value
스토어 API 구현 및tinygo build
명령어 사용 - 필수 파라미터 정의:
kebab_case
,snake_case
,pascal_case
등 문자열 변환 필터 포함
섹션별 세부 요약
1. 스피너 템플릿 개요
- 템플릿 정의: 사전 정의된 프로젝트 틀로, 기존 프로젝트 구조 반복을 줄임
- 주요 구성 요소:
- spin-template.toml
: 템플릿 메타데이터 및 파라미터 정의
- content
폴더: go.mod
, main.go
, spin.toml
등 실제 파일 생성
- metadata/snippets/component.txt
: spin add
명령어 지원
2. 템플릿 파라미터 및 필터
- 사전 정의 파라미터:
- project-name
: 사용자 입력으로부터 생성된 프로젝트 이름
- authors
: Git 설정 또는 환경 변수에서 추출된 작성자 정보
- 커스텀 필터:
- kebab_case
: Hello World
→ hello-world
- snake_case
: Hello World
→ hello_world
- pascal_case
: Hello World
→ HelloWorld
- 커스텀 파라미터 정의 예시:
```toml
[parameters]
json-indention = { type = "string", default = "2", pattern = "^(2|4)$", prompt = "JSON indention size" }
```
3. `kv-go` 템플릿 구현 예시
- 기능 요구사항:
- default
키-값 저장소 사용 권한 부여
- Spin SDK의 라우터 사용
- .go
파일 분할
- 메타데이터 정의:
```toml
manifest_version = "1"
id = "kv-go"
description = "Key-Value data exposed via HTTP API using (Tiny)Go"
[parameters]
project-description = { type = "string", prompt = "Description", default = "" }
http-path = { type = "string", prompt = "HTTP path", default = "/...", pattern = "^/\\S*$" }
```
spin.toml
구성:
```toml
spin_manifest_version = 2
[application]
name = "{{project-name | kebab_case}}"
version = "0.1.0"
authors = ["{{authors}}"]
description = "{{project-description}}"
[[trigger.http]]
route = "{{http-path}}"
component = "{{project-name | kebab_case}}"
```
4. `spin add` 명령어 지원 구현
component.txt
내용:
```toml
[[trigger.http]]
route = "{{http-path}}"
component = "{{project-name | kebab_case}}"
[component.{{project-name | kebab_case}}]
source = "{{ output-path }}/main.wasm"
key_value_stores = ["default"]
[component.{{project-name | kebab_case}}.build]
command = "tinygo build -target=wasip1 -gc=leaking -buildmode=c-shared -no-debug -o main.wasm ."
workdir = "{{ output-path }}"
watch = ["**/*.go", "go.mod"]
```
결론
- 실무 팁: 커스텀 템플릿을 통해
spin new
명령어로 프로젝트 초기화 시간을 30% 이상 단축 가능 - 권장사항:
spin add
명령어 지원을 위한component.txt
파일을 반드시 포함하고,tinygo build
명령어의workdir
파라미터를{{ output-path }}
로 설정 - 핵심 이점: 팀 간 일관성 유지, 규제 준수 자동화, 신입 개발자 온보딩 시간 감소