🔥 Version

406자
5분

Swift 패키지 매니저에서 버전은 의미 있는 버전 규칙에 따라 정해집니다. 이 규칙을 의미론적 버전 명세라고 부르는데, 세 개의 숫자를 점으로 구분해서 표현하죠. 예를 들면 1.0.0과 같은 모양입니다. 패키지 버전이 이 규칙을 따르면, 개발자가 패키지를 새로운 버전으로 업데이트해도 예상한 대로 잘 동작한다는 걸 보장할 수 있어요.

의미론적 버전 규칙은 버전 번호를 정하고 올리는 방법에 대한 여러 가지 약속과 요구 사항을 담고 있습니다. 이 규칙에 대해 더 자세히 알고 싶다면 semver.org 사이트를 방문해 보세요.

첫 번째 숫자: 주 버전(Major Version)****

버전의 첫 번째 숫자는 _주 버전_이라고 부릅니다. 이 숫자가 올라가면 기존 코드에서 업데이트가 필요할 만큼 큰 변화가 있다는 뜻이에요. 예를 들어, 의미론적 버전 명세에서는 기존 자료형의 이름을 바꾸거나, 메서드를 없애거나, 메서드의 입출력을 변경하는 것을 큰 변화로 봅니다. 이전 버전과 맞지 않는 버그 수정이나 기존 API의 동작을 바꾸는 것도 여기에 포함돼요.

주 버전을 올려야 하는 상황을 코드로 살펴볼까요?

// 버전 1.0.0
struct User {
    let name: String
    let age: Int
}
 
// 버전 2.0.0 - 큰 변화가 있는 버전
struct User {
    let firstName: String // 속성 이름 변경
    let lastName: String // 새로운 필수 속성 추가
    let age: Int
}
swift

두 번째 숫자: 부 버전(Minor Version)****

이전 버전과 잘 맞으면서 기능을 추가할 때는 버전의 두 번째 숫자인 _부 버전_을 올립니다. 예를 들어, 의미론적 버전 규칙에서는 다른 API는 건드리지 않고 새로운 메서드나 자료형을 추가하는 것은 이전 버전과 잘 맞는다고 봐요.

부 버전을 올리는 경우를 코드로 확인해 보죠:

// 버전 1.0.0
struct User {
    let name: String
    let age: Int
}
 
// 버전 1.1.0 - 이전 버전과 잘 맞는 변경 사항
struct User {
    let name: String
    let age: Int
 
    func introduce() {
        print("안녕하세요, 저는 \(name)이고 \(age)살입니다.")
    }
}
swift

세 번째 숫자: 패치 버전(Patch Version)****

이전 버전과 잘 맞으면서 버그를 고칠 때는 버전의 세 번째 숫자인 _패치 버전_을 올립니다. 이렇게 하면 클라이언트는 별다른 수고 없이 패키지의 버그 수정 덕을 볼 수 있답니다.

패치 버전을 올리는 상황도 코드로 알아볼까요?

// 버전 1.0.0
struct User {
    let name: String
    let age: Int
 
    func introduce() {
        print("안녕하세요, 저는 \(name)이고 \(age)입니다.") // 버그: 나이 단위 빠짐
    }
}
 
// 버전 1.0.1 - 이전 버전과 잘 맞는 버그 수정
struct User {
    let name: String
    let age: Int
 
    func introduce() {
        print("안녕하세요, 저는 \(name)이고 \(age)살입니다.") // 버그 수정: 나이 단위 추가
    }
}
swift

이렇게 의미론적 버전 규칙을 따르면 패키지 버전을 체계적으로 관리할 수 있어요. 주 버전, 부 버전, 패치 버전을 알맞게 올려서 패키지의 변경 내용을 확실하게 전달하는 거죠. 그러면 개발자는 패키지를 마음 놓고 업데이트할 수 있게 됩니다.