본문 바로가기
개발 관련됨/개발 관련 유용한 정보함

[나만의 라이브러리 제작기-3] versioning SNAPSHOT 에 대한 고찰

by simplify-len 2020. 9. 12.

배경

 Bintray에 배포를 위한 준비를 마칠 쯤, Snapshot 에 대한 의구심이 들었습니다.

왜냐하면, SNAPSHOT 이란? 아직 배포되기 전 임시로 만들어 놓는 버전으로서, SNAPSHOT 은 개발 중이라는 버전을 의미한다고 알고 있었습니다. 그렇다면, 버전 이름을 SNAPSHOT으로 한다면 같은 이름으로 override되서 배포되지 않을까? 라는 호기심으로 진행되었습니다.

Snapshot 이란?

"A snapshot version in Maven is one that has not been released."

stackoverflow.com/questions/5901378/what-exactly-is-a-maven-snapshot-and-why-do-we-need-it

stackoverflow 설명

즉, 개발중인 버전을 표현하고, 예를 들어 1.0-snapshot 이라는 말의 의미는 1.0 버전을 바탕으로 개발중인 버전이라는 것을 의미합니다. 그리고 이는, 곧 업데이트 될 버전이라는 것을 암시합니다.

 또한 snapshot 이라는 말은 maven name convention 에서 찾을 수 있습니다. 

maven.apache.org/guides/mini/guide-naming-conventions.html

 

Snapshot version 은 어떻게 만들어지는 걸까?

 앞선 포스팅에서 

BINTRAY_USER=username BINTRAY_KEY=api_key ./gradlew clean bintrayUpload -s

gradle task을 excute 할 경우, version 에 따라 아래와같이 표현됩니다.

https://bintray.com/beta/#/slipp-projects/libraries?tab=packages

 여기서, 저희의 예상을 snapshot 이 version 이름에 포함될 경우, 다시 override되어 재배포가 될 수 있을 것이라고 예상했었습니다. 그러나 그 저희의 예상과는 달리, 이미 존재하는 version이 있어 배포될 수 없다는 문구를 맞닥뜨리게 되었고, 어떻게 snapshot을 배포할 수 있을지 찾아보았습니다.

 우연히, 같이 진행했었던 햇님의 말씀으로는 "과거에 snapshot 버전은 따로 repository를 두었던것 같다." 라는 말을 듣고, 어떻게 처리했는지 여부를 추적했습니다.

reflectoring.io/publish-snapshots-with-gradle/

 

Publishing Open Source Snapshots with Gradle

One of the most fulfilling things in open source development is getting feedback from your users. This article shows how to publish snapshots of your Java projects to oss.jfrog.org to enable your users to give feedback early.

reflectoring.io

역시나, 위 예상되로 Snapshot 버전은 다른 repository에 저장하는 것이 맞았습니다. JCenter 에 배포가 이루어졌다면, oss-snapshot-local 라는 oss 에서 제공되는 snapshot repository가 존재했습니다.

 JCenter에 올리는 라이브러리의 경우 위 링크에서 소개하는 것과 같이 oss-snapshot-local 이라는 repo 에 저장하고 사용하게 됩니다. 이렇게 될 경우, 자신의 라이브러리에는 깔끔한 형태의 versioning names 이 존재하게 될 것입니다. 오... 이것만으로도 엄청나다고 개인적으로 생각됩니다. snapshot을 위한 repo는 따로 둡니다. 비록 Bintray에 국한된 snapshot 방법일지라도, 다른 repository에서도 유사한 방식으로 배포될 것이라고 추측됩니다.

마무리

 지금까지 snapshot 버전은 생각없이 사용했었습니다. 그러나, 직접 라이브러리를 개발하고- 이를 배포하는 과정까지 이어지면서 또다른 관점에서  어떻게 하면 우아하게 snapshot 과 stable 한 version을 올릴 수 있을까? 에 대해서 고민하게 되었고, 이러한 일련의 과정은 또다른 개발의 즐거움을 찾을 수 있었던 계기가 되었습니다.

 마지막으로 같이 행아웃으로 진행하면서 남겼던 동영상의 일부분을 캡쳐하면서 마무리하겠습니다.

댓글