더북(TheBook)

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)
}

ServerServeHTTP 메서드에서는 Context를 생성하고 URL의 쿼리 매개변수를 Context에 담은 후 startHandler로 제어권을 넘겨준다. Run 함수에서 startHandler는 미들웨어 체인의 시작점으로 지정되어 있으므로 웹 요청이 들어오면 첫 번째 미들웨어부터 차례로 수행하여 라우터까지 전달된다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.