공부/Go

Go API server template + Dockerfile & yaml

토고미 2022. 7. 9. 21:17

예전에 만들어둔 Golang API 서버 템플릿을 공유한다.

https://github.com/aldlfkahs/go-api-server-template

 

GitHub - aldlfkahs/go-api-server-template

Contribute to aldlfkahs/go-api-server-template development by creating an account on GitHub.

github.com

 

간략한 코드 설명은 아래와 같다.

 

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 서버를 짜야할때 요긴하게 쓰고있다.