pkg.go.dev에 go 패키지 즉시 업데이트하기

golang으로 개발된 앱은 pkg.go.dev에 저장되며 해당 사이트를 통해 패키지 정보를 볼 수 있고 실제 go get 으로 패키지를 가져올 때 이곳의 latest 버전을 가져오게 됩니다. 그래서 이 사실을 잘 몰랐던 과거의 저는 이런 실수도 했었던 기억이 나네요.

다만 github에 go 패키지를 배포 하더라도 pkg.go.dev에는 즉시 반영되지 않습니다. 이는 pkg.go.dev가 주기적으로 polling 하는 방식으로 동작하기 때문인데요. 약간의 방법을 사용하면 주기적인 polling 대신에 배포 이후 pkg.go.dev가 바로 새로운 패키지 정보를 읽어들이게 할 수 있습니다.

보통 pkg.go.dev는 https://pkg.go.dev/github.com/USER/REPO@TAG 형태의 URL을 사용하는데요, 이 때 없는 버전의 Tag를 요청하게 되면 아래와 같은 화면을 볼 수 있습니다.

https://pkg.go.dev/github.com/hahwul/dalfox/v2@v2.5.5-testzzz

여기서 Request “주소” 버튼을 누르게 되면 pkg.go.dev가 해당 태그에 정보를 기반으로 새로 패키지를 가져오려고 시도하게 됩니다. 그래서 이 과정이 끝나고 실제 패키지가 있다면 최신 패키지 정보가 즉시 업데이트됩니다.

여기서 이 버튼의 요청을 잡아보면 이렇습니다.

POST https://pkg.go.dev/fetch/github.com/hahwul/dalfox/v2@v2.5.5-testzzz HTTP/1.1
Host: pkg.go.dev
Accept: */*
Accept-Language: ko-KR,ko;q=0.8,en-US;q=0.5,en;q=0.3

단순히 해당 URL로 POST 요청을 보내게 되는데요. 이를 이용하면 배포 플로우 마지막에 POST로 pkg.go.dev에 신규 버전정보를 요청하면 즉시 패키지 정보를 refresh할 수 있게 됩니다 😎