미들웨어는 HTTP 요청의 라이프사이클에서 주요 처리 코드 전후에 코드가 실행되도록 하는 메커니즘입니다. 이는 프레임워크에서 모든 요청과 응답을 가로채는 후크로 이해할 수 있습니다.

iris에서 미들웨어 사용하기

iris에서는 Use 메소드를 통해 경로에 미들웨어를 등록할 수 있습니다.

패키지 main

// 패키지 임포트
import "github.com/kataras/iris/v12"

func main() {
  // iris 인스턴스 정의
  app := iris.New()
  // gzip 압축 미들웨어 사용
  app.Use(iris.Compression)

  // 경로 설정
  app.Get("/", func(ctx iris.Context) {
    ctx.HTML("Hello <strong>%s</strong>!", "World")
  })

  // 포트로 리스닝
  app.Listen(":8080")
}

iris에서 사용자 지정 미들웨어

// 사용자 지정 미들웨어 함수 시그니처
func Logger() iris.Handler {
    // 클로저를 통해 핸들러 반환
    return func(ctx iris.Context) {
        t := time.Now()

        // 매개변수 설정
        ctx.Values().Set("framework", "iris")

        // 요청 전 로직

        ctx.Next()

        // 요청 후 로직
        latency := time.Since(t)
        log.Print(latency)

        // 전송된 상태 접근
        status := ctx.GetStatusCode()
        log.Println(status)
    }
}

func main() {
    app := iris.New()
    // 사용자 지정 미들웨어 등록
    app.Use(Logger())

    app.Get("/test", func(ctx iris.Context) {
        // 미들웨어에 의해 설정된 매개변수 읽기
        framework := ctx.Values().GetString("framework")

        // 출력: "iris"
        log.Println(framework)
    })

    app.Listen(":8080")
}