본문 바로가기

Node.js

Semantic Versioning 알아보기

게이머들은 패치에 울고 웃는다

특히 롤이나, 히오스(ㅠㅠ)같은게임이 으레 그렇다.

이 패치 하나에 캐릭터들 인기가 좌우된다.

해당 게임인 롤 패치노트에선 보통 버그 수정이나 

캐릭터들의 능력치 향상 등이 이루어졌다

(간단한 것들은 13.16 -> 13.17 등으로 라벨링 하는듯 하다)

뭔가 새로운 게임모드가 추가되면 14로 넘어가거나,

'시즌'이라는걸 도입하기도 한다.

게임도 소프트웨어의 일종이고, 이러한 패치는 보통

위의 그림처럼 xx.xx등으로 나타내는 경우가 많다.

 

본인의 경우에는 근 20년전 포트리스, 바람의나라 등부터 계속 봐왔던 패치인데

 

정작 이 숫자들이 무엇을 의미하는지는 최근에 알게 되었다.

 

특히 Node에서도 이 버전 관리가 매~우 중요하다

라이브러리 안쓰는 사람 없을거고, 해당 라이브러리는 또한 다른 라이브러리를

참고하기 때문에, 이 관리를 잘못했다간

 

멀쩡하게 코드상으로 문제없는 기능들이 오작동하거나,

다른 컴퓨터에선 작동 안하게 되룻도 있기 때문이다.

(이걸로 시간뺏기는게 너무 아깝다. 특히 초보일수록)

 

그럼 이제 Semantic Version에 대해 알아보자

 

 

메이저 버전은 API호환성이 깨질만한, 

즉 갈아 엎었다는 소리이다

(이 버전은 거의 업그레이드를 하는게 좋다 잘못하면 Deprecated 즉 구시대 유물이라고

사용을 못할 수 있다. 이에 관련해선 LTS 등 여러가지 기법이 있는데 나중에 설명한다)


마이너 버전은 해당 메이저 버전 아래에 있지만, 어느 정도의 기능이 추가된것을 말한다

 

패치는 말 그대로 자잘한 오타나 버그를 바로잡은 사항이다

 

롤로 쉽게 얘기를 해보면

 

메이저 : 롤 세계관이 바뀔만한 업데이트가 이루어졌다

마이너 : 캐릭터나 맵이 추가되었다

패치 : Q스킬후 바로 W스킬을 쓸때 데미지가 안들어가는걸 고쳤다

 

정도로 얘기할 수 있다.

 

이 Semantic은 다음과 같은 사항을 준수해야 한다.

 

  • normal version은 X.Y.Z 형태이며 음수가 아닌 정수여야 하며 절대 앞되며 각 수는 증가하는 수여야 한다.
  • MAJOR Version이 올라가면 MINOR Version과 PATCH Version은 0이 되야합니다.
  • MINOR Version이 올라가면 PATCH Version이 0이 반드시 되어야 합니다.
  • 정식배포전에 pre-release하는 경우에는 -또는 . 을 사용합니다.
  • 정식배포전에 git commit후 난수가 붙는 경우 그대로 배포할 경우를 build metadata라고 합니다.
    ex) 16.9.0-alpha.0
  • 만약 MAJOR에 0으로 시작하는 경우(0.y.z)는 은 초기 개발을 위해서 사용합니다.

노드를 하다 보면 

이렇게 생긴 버전을 볼 수 있다

 

 

사실 저 희안하게 생긴 기호를 이모티콘 이외엔 잘 쓰지 않는데,

이 표기법은 '캐럿'이라고(Caret) 이라고 불리는 표기법이다

 

이거 이외에도 X표기나, ~ 표기법 등등이 있는데 해당 블로그에 깔끔하게 정리되어 있다.

암기는 아니더라도 한번 쭉 읽으면 감이 올 것이다.

 

https://velog.io/@seokkitdo/Semantic-Versioning

 

Semantic Versioning?

시맨틱 버저닝은 개발하는 소프트웨어의 규모가 커지고, 외부 라이브러리를 많이 사용할수록 생기는 의존성 지옥을 해결하고자 생긴 공통의 버전 명시 규칙과 요구사항을 뜻합니다. 일반적으

velog.io

 

그럼, 위에 있느 코드에 있는

 

express ^4.17.1 의 의미는

express 4버전 하의 마이너와 패치 부분 업데이트를 허용한다는 소리이다.

다만, 이 표기는 동일 메이저 버전을 하위 패치나 마이너 부분들이 신뢰한다는 가정 하에

사용하는 표기법이다

 

제일 많이 사용되기에 질리도록 볼 것이다.

이 표기법을 잘 모르면 훗날 협업할때 문제가 생길수 있으니 꼭 알아둬야 한다고 생각한다

 

'Node.js' 카테고리의 다른 글

res.json과 res.send 그리고 Etag  (0) 2023.08.28