^ 기호와 ~ 기호

오늘은 dependencies 버전 앞 ^기호와 ~기호에 대해 알아보겠습니다.
사실 여태까지 뭔 뜻인지도 모르고 쓰는 분들도 있을 거라 생각합니다.

  1. Screen Shot 2019-04-05 at 8.24.09 PM.png

    여기서는 ^기호가 쓰였네요

  2. Screen Shot 2019-04-05 at 8.24.29 PM.png

    여기서는 ~ 기호가 쓰였습니다.

차이는 뭘까요? 사실 차이는 아주 간단합니다. 저 기호들은 버전 앞에 붙이는 접두사(prefix)라고 볼 수 있는데요. 간단하게 말하자면 프로젝트 내부 dependency의 버전을 제한할 것인지 여부를 나타내는 기호입니다.

사실 ^~기호의 진짜 뜻을 이해하기 위해서 먼저 공부해야 하는 것이 하나 있습니다.
그건 바로 시멘틱 버전(semantic versioning) 인데요, 매우 중요한 것이기 때문에 모르신다면 꼭 알아두시는 것이 좋습니다.

시멘틱 버전(semantic versioning)

시멘틱 버전이란 우리가 디펜던시에서 볼 수 있는 버전의 표현 방식을 이야기합니다. 위에서 react 의존성의 시멘틱 버전은 16.8.6인데요. .으로 구분된 3가지 숫자는 그냥 존재하는 것이 아니라 각각의 숫자마다 의미를 갖고 있습니다.

간단하게 정리하자면 각각의 숫자가 갖는 의미는 다음과 같습니다.

  1. 첫번째 숫자는 이전 버전들과의 호환성을 나타낸다. 이전 버전과 호환되지 않는다면 major digit이라 불리는 가장 앞의 숫자를 올린다.
    • 이를테면 1.0.1 버전을 업데이트해서 더이상 이전 버전과 호환되지 않으면 2.0.1 버전이 되는 겁니다.
  2. minor digit이라 불리는 두번째 숫자는 새로운 기능이 추가됐는데 이전 버전과 호환되는 새로운 기능이 추가되었을 때 올려준다.
    • 완전히 호환이 안 되는 경우가 아닌 이전 버전과도 충분히 호환 가능한 기능을 업데이트 한 경우 1.0.1에서 1.1.1이 될 수 있겠죠?
  3. 간단한 버그 패치는 patch digit이라 불리는 숫자를 올려준다.
    • 새로운 기능의 추가가 아닌 간단하게 버그만 패치 했다면 1.0.1에서 1.0.2가 될 것입니다.

^기호와 ~기호가 시멘틱 버전에서 갖는 의미

일단 dependency에 ^기호나 ~기호가 없고 그저 버전만 있다면 정확하게 일치하는 버전의 의존성을 사용하게 됩니다. 하지만 ^기호나 ~ 기호가 있다면 정확하게 일치하는 버전을 사용하기보다 제한된 버전 내에서 최신 버전을 사용하게 됩니다. 참고로 알아두시면 좋은 것은 --save옵션을 이용하여 디펜던시를 추가했을 때는 자동으로 ^기호가 붙습니다.

  • ^ 기호가 의존성 버전 앞에 쓰여졌을 때

    • 호환 가능한 최신 기능의 버전으로 업데이트 합니다.
      • ^16.8.6의 버전을 기준으로 16.*.* 의 버전을 가져올 수 있습니다.
      • 단, 17.으로 시작하는 버전을 가져오는 것은 불가능합니다.
  • ~ 기호가 의존성 버전 앞에 쓰여졌을 때

    • 버그가 픽스된 최신 버전으로 업데이트합니다.
      • ~16.8.6의 버전을 기준으로 하면 16.8.*의 버전을 가져올 수 있다고 생각하시면 됩니다.

의존성 버전 앞에는 상황에 맞게 적당한 옵션을 선택하여 사용하시면 되겠습니다.
읽어주셔서 감사합니다.