# 고언어 패키지 관리

구 블로그에 남겨둔 기록을 옮겨왔다.

TIP

2021년 현재는 공식 모듈 관리가 있는 것으로 알고 있다. 조만간 현행화를 해야겠다.

# 서두

지금 글을 쓰는 현재 고는 1.7 버젼까지 릴리즈된 상태다. 요즘 고의 화두중 하나인 벤더링... vendoring... 다른 언어에서 말하는 의존성 관리라고 보면 되겠다. 1.5부터 실험적으로 제공한 vendor 폴더 정책은 나름 합리적이고 좋다고 느낀다. 1.6부턴 정식 스펙으로 확정되었고.

패키지 매니징이나 의존성 관리의 원론적인 얘기를 여기서 논할 문제는 아닌것 같고, 고언어의 pm툴 들을 정리해보고자 한다. 자바에서도 ant, maven, gradle로 자꾸 변해가고... node.js도 npm에서 요즘은 yarn인가로 넘어간다던데... 난무하는 언어나 프레임워크 맛보기도 시간이 부족한데 pm툴까지 공부를 해야하다니... 뭐 시대가 변하고 요구하는 사항이 달라지니 툴이 발전하는건 이해하겠는데...

특히 고언어처럼 약간은 폐쇄적이고 정적인 정책을 가져가는 언어에서 pm툴을 공식화해서 제공하는것도 좋을것 같다. 해외포럼 보면 그런 얘기들도 들리긴 하던데... 2.x 정도부턴 꼭 지원되었으면 한다.

나도 godep을 쓰다가 사용법이 좀 난해했는데, 요즘은 glide, govendor, gvt등 또 후발주자들이 이미 godep을 앞서간것 같다. 헤로쿠에서도 9월부터 godep대신 govendor를 공식 pm툴로 변경하였고... 그래서 찾아본 바로 glide나 govendor가 좀 가능성이 보여서 한번 설치하고 테스트를 해보았다.

간단히 정리해보면

# glide

maven스럽다. semantic versioning이 가능해서 예를 들어 v1.1.x 이런식으로 범위처럼 지정이 가능하고 그 버젼에 한해서만 업데이트도 가능하다. help도 잘되어있어서 진입장벽은 높지 않다. glide.yaml 파일로 정리된다. 완전히 vendor 내에 있지 않으면 빌드가 되지 않는다 하니 의존성 관리를 강제할 수 있으므로 장점이 아닌가 생각됨. 내 코드에서 임포트 하는 패키지만 명시되므로 간단히 사용하기엔 제일 나은듯 하다. 원하면 vendor내에서 임포트되는 패키지의 버젼도 지정할 수 있는듯. 나쁘지 않다.

# govendor

godep과 비슷한 느낌이다. 다만 govendor list를 해보면 사용되는 모듈중 vendor와 root에 있는 것을 구분해서 보여주므로 관리가 확실히 될듯. 정리는 vendor/vendor.json으로 된다. 버젼은 범위 지정같은건 안되고, 특정 커밋이나 태그이름, 브랜치 이름 정도로 지정할 수 있다. 어차피 외부 패키지 관리도 명확히 해주는게 좋다고 생각하므로 괜찮은 접근이다.

# 총평

접근방법은 다르지만 둘 다 사용하기 쉬운편이고 한동안 고언어 pm툴로 자리잡을것 같다. 현재 인기는 glide가 3400여개의 별, govendor가 1300여개의 별이다. godep에 비하면 훨씬 품질이 좋아졌다고 느껴진다. 헤로쿠도 바꾼겸 해서 나도 당분간은 govendor를 쓰도록 결정.