Go언어로 서버 만들기

현준·2021년 1월 6일
0

GoServer

목록 보기
2/3
post-thumbnail

1. To Do

친구와 To Do List 앱을 만들기로 하고, 서버 프로그래밍을 담당했다.

처음부터 차근차근 살을 붙여가보도록 한다.

지난 포스팅에서 DDNS 설정과 포트포워딩을 완료했고,

이번 포스팅에서는 net/http 패키지로 서버를 띄우고

github.com/julienschmidt/httprouter 를 통해 HTTP request router를 구현한다.

package main

import (
	"net/http"
)

func main() {
	router := httprouter.New()

	err := http.ListenAndServe(":19124", router)
	if err != nil {
		todolib.MakeLog("ListenAndServe fail")
		panic(err)
	}
}

위의 코드만으로 서버가 열렸다. 포트포워딩 해둔 19124 포트로 통신하고, Request를 router 라는 handler에 연결한다.

2. Router

helloHandler := func(w http.ResponseWriter, req *http.Request) {
	io.WriteString(w, "Hello, world!\n") 
}  

http.HandleFunc("/hello", helloHandler)
log.Fatal(http.ListenAndServe(":8080", nil))

위와 같이 handler 없이도 구현은 가능하나, 가볍고 성능이 좋은 github.com/julienschmidt/httprouter를 사용 해본다.

router.GET("/get/db/version", todolib.GetVersion)
router.POST("/signup", todolib.SignUp)
router.PUT("/upload", todolib.UploadFile)
router.DELETE("/delete/db/version", todolib.DeleteVersion)

http의 대표적인 Method 4개로 CRUD를 구현했다.

전달인자로는 URL에서 도메인을 뺀 부분과 handler 이름을 넣는다.

3. Handler

func GetVersion(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
	a := DbQuery("version", "version")
	b := DbQuery("name", "version")
	c, _ := strconv.Atoi(DbQuery("updateTime", "version"))

	mem := version{a, b, c}

	fmt.Fprintln(w, JSONEnc(mem))
	MakeLog("GetVersion success")
}

router.GET("/get/db/version", todolib.GetVersion) 의 GetVersion 함수이다.

DB의 "version" table에서 version, name, updateTime을 읽고, 이를 JSON 형식으로 Encoding하여 응답하는 함수이다.

DB 와 JSON에 관련된 부분은 추후 포스팅에 작성한다.

profile
github.com/hjyoun0731

0개의 댓글