반응형
Jake Seo
제이크서 위키 블로그
Jake Seo
전체 방문자
오늘
어제
  • 분류 전체보기 (715)
    • 일상, 일기 (0)
    • 백준 문제풀이 (1)
    • 릿코드 문제풀이 (2)
    • 알고리즘 이론 (10)
      • 기본 이론 (2)
      • 배열과 문자열 (8)
    • 데이터베이스 (15)
      • Planet Scale (1)
      • MSSQL (9)
      • 디비 기본 개념 (1)
      • SQLite 직접 만들어보기 (4)
    • 보안 (7)
    • 설계 (1)
    • 네트워크 (17)
      • HTTP (9)
      • OSI Layers (5)
    • 회고 (31)
      • 연간 회고 (2)
      • 주간 회고 (29)
    • 인프라 (52)
      • 도커 (12)
      • AWS (9)
      • 용어 (21)
      • 웹 성능 (1)
      • 대규모 서비스를 지탱하는 기술 (9)
    • 깃 (7)
    • 빌드 도구 (7)
      • 메이븐 (6)
      • 그레이들 (0)
    • Java (135)
      • 이펙티브 자바 (73)
      • 자바 API (4)
      • 자바 잡지식 (30)
      • 자바 디자인 패턴 (21)
      • 톰캣 (Tomcat) (7)
    • 프레임워크 (64)
      • next.js (14)
      • 스프링 프레임워크 (28)
      • 토비의 스프링 (6)
      • 스프링 부트 (3)
      • JPA (Java Persistence API) (5)
      • Nest.js (8)
    • 프론트엔드 (48)
      • 다크모드 (1)
      • 노드 패키지 관리 매니저 (3)
      • CSS (19)
      • Web API (11)
      • tailwind-css (1)
      • React (5)
      • React 새 공식문서 요약 (1)
      • HTML (Markup Language) (5)
    • 자바스크립트 (108)
      • 모던 자바스크립트 (31)
      • 개념 (31)
      • 정규표현식 (5)
      • 코드 스니펫 (1)
      • 라이브러리 (6)
      • 인터뷰 (24)
      • 웹개발자를 위한 자바스크립트의 모든 것 (6)
      • 팁 (2)
    • Typescript (49)
    • 리눅스와 유닉스 (10)
    • Computer Science (1)
      • Compiler (1)
    • IDE (3)
      • VSCODE (1)
      • IntelliJ (2)
    • 세미나 & 컨퍼런스 (1)
    • 용어 (개발용어) (16)
      • 함수형 프로그래밍 용어들 (1)
    • ORM (2)
      • Prisma (2)
    • NODEJS (2)
    • cypress (1)
    • 리액트 네이티브 (React Native) (31)
    • 러스트 (Rust) (15)
    • 코틀린 (Kotlin) (4)
      • 자바에서 코틀린으로 (4)
    • 정규표현식 (3)
    • 구글 애널리틱스 (GA) (1)
    • SEO (2)
    • UML (2)
    • 맛탐험 (2)
    • 리팩토링 (1)
    • 서평 (2)
    • 소프트웨어 공학 (18)
      • 테스팅 (16)
      • 개발 프로세스 (1)
    • 교육학 (1)
    • 삶의 지혜, 통찰 (1)
    • Chat GPT (2)
    • 쉘스크립트 (1)
    • 컴파일 (2)
    • Dart (12)
    • 코드팩토리의 플러터 프로그래밍 (4)
    • 플러터 (17)
    • 안드로이드 스튜디오 (1)
    • 윈도우즈 (1)
    • 잡다한 백엔드 지식 (1)
    • 디자인 패턴 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 객체복사
  • 스프링 검증
  • serverless computing
  • Pre-rendering
  • 팩터리 메서드 패턴
  • 자바 디자인패턴
  • item8
  • prerendering
  • 이펙티브 자바 item9
  • 디자인패턴
  • MSSQL
  • 자료구조
  • 작업기억공간
  • 자바 검증
  • rust
  • item9
  • Java
  • 외래키 제약조건
  • 알고리즘
  • 느린 쿼리
  • 서버리스 컴퓨팅
  • 싱글톤 패턴
  • bean Validation
  • 러스트
  • 자바스크립트 인터뷰
  • 싱글턴
  • item7
  • 자바스크립트 면접
  • 플라이웨이트패턴
  • 자바
  • next js app
  • 빈 검증
  • 자바스크립트
  • 참조 해제
  • 프로그래머의 뇌
  • Javadoc 자바독 자바주석 주석 Comment
  • try-with-resources
  • 도커공식문서
  • 이펙티브 자바
  • NEXT JS
  • pnpm
  • 메이븐 라이프사이클
  • 토비의 스프링
  • 싱글톤
  • 추상 팩터리 패턴
  • 이펙티브자바
  • Next.js
  • 메이븐 페이즈
  • 슬로우 쿼리
  • 메이븐 골

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Jake Seo

제이크서 위키 블로그

용어 (개발용어)

시멘틱 버저닝 (Semantic Versioning) 이란? (feat. package.json 표현 방식)

2022. 11. 6. 22:47

시멘틱 버전(semantic versioning)

  • 시멘틱 버저닝 이란 패키지의 일반적인 버전의 표현 방식을 이야기한다.
  • 숫자 3자리로 버전을 표현한다.
  • 이를테면 노드의 package.json 에서는 "react":"16.8.6" 와 같이 리액트 버전 표기가 가능하다.
  • .으로 구분된 3개의 숫자는 각각의 숫자마다 의미를 갖고 있다.

첫번째 숫자, Major Digit (16.8.6)

  • 첫번째 숫자는 이전 버전들과의 호환성을 나타낸다. 이번 업데이트에 이전 버전과 호환되지 않는 큰 변화가 있었다면, major digit이라 불리는 가장 앞의 숫자를 올린다.
  • 이를테면 1.0.1 버전을 업데이트해서 더이상 이전 버전과 호환되지 않으면 2.0.1 버전이 된다.

두번째 숫자, Minor Digit (16.8.6)

  • 두번째 숫자는 이번 업데이트에 새로운 기능이 추가됐을 때 올려준다. 단, 위와 다르게 이전 버전과 호환되는 새로운 기능이 추가되었을 때 올려준다. minor digit이라 불린다.
  • 1.0.1에서 호환 가능한 새로운 기능을 추가하면 1.1.1이 되는 식이다.

세번째 숫자, Patch Digit (16.8.6)

  • 세번째 숫자는 이번 업데이트에 간단한 버그 패치가 있었을 경우에 올려준다. patch digit이라 불리는 숫자를 올려준다.
  • 새로운 기능의 추가가 아닌 간단하게 버그만 패치 했다면 1.0.1에서 1.0.2가 된다.

+ package.json 의 ^ 기호와 ~ 기호

package.json 에는 dependencies 버전 앞 ^기호와 ~기호가 있는데 이에 대해서도 알아보자.

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

여기서는 ^기호가 쓰였다.

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

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

저 기호들은 버전 앞에 붙이는 접두사(prefix)라고 볼 수 있다. 프로젝트 내부 dependency의 버전을 제한할 것인지 여부를 나타내는 기호이다. 앱의 안정성이 중요하다면, 보수적으로 설정하는 것이 좋다.

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

prefix 인 ^ 기호나 ~ 기호가 없고 버전만 명시되어 있다면 정확하게 일치하는 버전의 의존성을 사용하게 된다.

하지만 ^기호나 ~ 기호가 있다면 정확하게 일치하는 버전을 사용하기보다 제한된 버전 내에서 최신 버전을 사용하게 된다.

참고로 알아두시면 좋은 것은 --save옵션을 이용하여 디펜던시를 추가했을 때는 자동으로 ^기호가 붙는다.

  • ^ 기호가 의존성 버전 앞에 쓰여졌을 때
    • minor digit 기준으로 최신 패키지를 사용한다.
    • 호환 가능한 최신 기능의 버전으로 업데이트 한다.
    • ^16.8.6의 버전을 기준으로 16.*.* 의 버전을 가져올 수 있다.
    • 17.으로 시작하는 버전을 가져오는 것은 불가능하다.
  • ~ 기호가 의존성 버전 앞에 쓰여졌을 때
    • patch digit 기준으로 최신 패키지를 사용한다.
    • 버그가 픽스된 최신 버전으로 업데이트한다.
    • ~16.8.6의 버전을 기준으로 하면 16.8.*의 버전을 가져올 수 있다고 생각하면 된다.

개인적으로는 프로덕션 앱이라면 prefix 기능 자체를 굳이 사용하지 않는 것을 추천한다.

반응형
저작자표시 비영리 (새창열림)

'용어 (개발용어)' 카테고리의 다른 글

UTF (Unicode Transformation Format) 인코딩이란?  (0) 2023.03.10
이스케이프 시퀀스 (Escape Sequence) 란?  (0) 2023.03.10
루프백 아이피 (loopback ip) 란?  (0) 2022.11.05
커멘드 라인 표기법 (Command Line Notation) 이란?  (0) 2022.10.29
샤딩 (Sharding) 이란?  (0) 2022.06.30
    '용어 (개발용어)' 카테고리의 다른 글
    • UTF (Unicode Transformation Format) 인코딩이란?
    • 이스케이프 시퀀스 (Escape Sequence) 란?
    • 루프백 아이피 (loopback ip) 란?
    • 커멘드 라인 표기법 (Command Line Notation) 이란?
    Jake Seo
    Jake Seo
    ✔ 잘 보셨다면 광고 한번 클릭해주시면 큰 힘이 됩니다. ✔ 댓글로 틀린 부분을 지적해주시면 기분 나빠하지 않고 수정합니다. ✔ 많은 퇴고를 거친 글이 좋은 글이 된다고 생각합니다. ✔ 간결하고 명료하게 사람들을 이해 시키는 것을 목표로 합니다.

    티스토리툴바