공부/Go
Go API server template + Dockerfile & yaml
토고미
2022. 7. 9. 21:17
예전에 만들어둔 Golang API 서버 템플릿을 공유한다.
https://github.com/aldlfkahs/go-api-server-template
간략한 코드 설명은 아래와 같다.
func main() {
mux := http.NewServeMux()
mux.HandleFunc("/test", serveTest)
mux.HandleFunc("/hello", serveHello)
klog.Info("Starting Go test api server...")
klog.Flush()
if err := http.ListenAndServe(":80", mux); err != nil {
klog.Errorf("Failed to listen and serve test-api-server: %s", err)
}
klog.Info("Terminate Go test api server")
}
메인 함수는 이게 전부이다.
/test 와 /hello 두 개의 요청에 대해 처리하도록 걸어두었다.
func serveHello(res http.ResponseWriter, req *http.Request) {
switch req.Method {
case http.MethodGet:
fmt.Println("You call GET /hello !!")
SetResponse(res, "You call GET /hello !!", nil, http.StatusOK)
case http.MethodPost:
fmt.Println("You call POST /hello !!")
SetResponse(res, "You call POST /hello !!", nil, http.StatusOK)
case http.MethodOptions:
default:
//error
}
}
/hello 요청을 처리하는 함수이다.
GET과 POST 콜이오면, 서버 내에 로그로 남기고 response도 똑같이 해주는 심플한 코드다.
이미지 빌드를 위한 Dockerfile과 deployment 배포에 필요한 yaml도 작성해두었다.
귀찮으면 내가 만든 yaml 하나만 적용하면 된다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: go-test-api-server
labels:
togomi: go-test-api-server
spec:
replicas: 1
selector:
matchLabels:
togomi: go-test-api-server
template:
metadata:
name: go-test-api-server
labels:
togomi: go-test-api-server
spec:
containers:
- name: go-test-api-server
image: docker.io/aldlfkahs/go-simple-api-server:latest
imagePullPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
name: go-test-api-server-service
spec:
ports:
- port: 80
targetPort: 80
name: http
selector:
togomi: go-test-api-server
type: NodePort
Go로 API 서버를 짜야할때 요긴하게 쓰고있다.