Server에 http.Handler 인터페이스의 ServeHTTP 메서드 정의
마지막으로 Server가 웹 요청을 받아 처리할 수 있도록 ServeHTTP 메서드를 정의해 보자.
▼ server.go
func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) { // Context 생성 c := &Context{ Params: make(map[string]interface{}), ResponseWriter: w, Request: r, } for k, v := range r.URL.Query() { c.Params[k] = v[0] } s.startHandler(c) }
Server의 ServeHTTP 메서드에서는 Context를 생성하고 URL의 쿼리 매개변수를 Context에 담은 후 startHandler로 제어권을 넘겨준다. Run 함수에서 startHandler는 미들웨어 체인의 시작점으로 지정되어 있으므로 웹 요청이 들어오면 첫 번째 미들웨어부터 차례로 수행하여 라우터까지 전달된다.