IT/Go

[Go/Golang] Echo 프레임워크에서 CORS 관련 설정하기

wookiist 2021. 3. 4. 16:35

Go Echo 프레임워크에서 CORS 관련 설정하기

웹 개발을 하다보면 종종 CORS (Cross-Origin Resource Sharing) 을 마주치곤 합니다. CORS 정책을 위반하였다는 에러를 마주치면 당혹스럽긴 합니다. 단순한 작업일 뿐인데도 정상적으로 수행되지 않는 코드를 보면 야속하기까지도 합니다.

다만 오늘은 CORS에 관한 내용을 다루려는 것은 아닙니다. 오늘은 Echo 프레임워크를 이용할 때, CORS 관련 설정은 어떻게 수행하면 되는지 정리해보도록 하겠습니다.

모든 원격지, 모든 메서드 허용

Echo 프레임워크는 기본적으로 모든 원격지로부터 오는 모든 메서드를 허용합니다. 이 때는 다음과 같이 명시적으로 써줘도 괜찮습니다.

소스 코드 1

func main() {
    e := echo.New()
    e.Use(middleware.Logger())
    e.Use(middleware.Recover())

    // CORS default
    // 모든 원격지에서 오는 모든 메서드를 허용합니다.
    e.Use(middleware.CORS())
    //...
}

Echo 프레임워크에서 제공하는 CORS 설정 이용하기

Echo 프레임워크에서 제공하는 메서드를 이용해 CORS 설정을 제어할 수 있습니다. 다음처럼 수행합니다.

소스 코드 2

func main() {
    e := echo.New()
    e.Use(middleware.Logger())
    e.Use(middleware.Recover())

    // CORS restricted
    // `https://wookiist.tistory.com`과 `https://wookiist.dev`로부터 오는 요청 중
    // GET, PUT, POST or DELETE 메서드를 허용합니다.
    e.Use(middleware.CORSWithConfig(middleware.CORSConfig{
        AllowOrigins: []string{"https://wookiist.tistory.com", "https://wookiist.dev"},
        AllowMethods: []string{http.MethodGet, http.MethodPut, http.MethodPost, http.MethodDelete},
    }))
    // ...
}

Custom 함수를 이용해 CORS 설정 수행하기

이외에도 직접 구현한 함수를 이용해 CORS 설정을 수행할 수 있습니다.

소스 코드 3

func allowOrigin(origin string) (bool, error) {
    // 예제에서는 정규표현식만을 예로 들었지만, 
  // 외부 저장소에 허용할 원격지 주소의 리스트를 넣어두고 이를 활용할 수도 있습니다.
    return regexp.MatchString(`^https:\/\/wookiist\.(dev|com)$`, origin)
}

func main() {
    e := echo.New()
    e.Use(middleware.Logger())
    e.Use(middleware.Recover())

    // CORS는 이제 custom 힘수를 통해 원격지 주소를 검열합니다.
    // 소스 코드 2와 동일한 메서드가 허용되었습니다.
    e.Use(middleware.CORSWithConfig(middleware.CORSConfig{
        AllowOriginFunc: allowOrigin, // 여기에 구현한 custom 함수를 명시합니다.
        AllowMethods:    []string{http.MethodGet, http.MethodPut, http.MethodPost, http.MethodDelete},
    }))
    // ...
}

참고

반응형