임도형
개발 문화
삽질 증오
Case 1.
일반적인 배포 프로세스
• 프로젝트 초기 커밋
SVN
trunk
pom.xml : 0.0.1-SNAPSHOT
TEST ENV
NEXUS
• 개발 진행
• pom.xml의 버전은 변경되지 않는다.
SVN
trunk
pom.xml : 0.0.1-SNAPSHOT
TEST ENV
NEXUS
개발
• 개발 계속 진행
• 역시 pom.xml의 버전은 변경되지 않는다.
SVN
trunk
pom.xml : 0.0.1-SNAPSHOT
TEST ENV
NEXUS
계속 개발
SVN
trunk
pom.xml : 0.0.1-SNAPSHOT
branches
0.1.x
pom.xml : 0.1.1-SNAPSHOT
TEST ENV
NEXUS
• 0.1로 배포 준비 시작
• 배포 작업을 위한 branch 0.1.x를 생성.
• 브랜치 0.1.x의 pom 버전을 0.1.1-SNAPSHOT으로 변경
버전 변경
브랜치 생성
SVN
trunk
pom.xml : 0.0.1-SNAPSHOT
branches
0.1.x
pom.xml : 0.1.1-SNAPSHOT
TEST ENV
some-0.1.1-SNAPSHOT.jar
NEXUS
• 브랜치 0.1.x에서 패키징 하고 테스트 환경에 설치
설치
패키징
SVN
trunk
pom.xml : 0.0.1-SNAPSHOT
branches
0.1.x
pom.xml : 0.1.1-SNAPSHOT
TEST ENV
some-0.1.1-SNAPSHOT.jar
NEXUS
• 개발 서버에서 테스트 실패. 버그가 있다.
• 브랜치 0.1.x에서 디버깅한다.
테스트 실패
디버깅
SVN
trunk
pom.xml : 0.0.1-SNAPSHOT
branches
0.1.x
pom.xml : 0.1.2-SNAPSHOT
TEST ENV
some-0.1.2-SNAPSHOT.jar
NEXUS
• 브랜치 0.1.x의 pom의 버전을 0.1.2-SNAPSHOT으로 변경
• 다시 패키징 하고 테스트 환경에 설치
설치
버전 변경, 패키징
SVN
trunk
pom.xml : 0.0.1-SNAPSHOT
branches
0.1.x
pom.xml : 0.1.2-SNAPSHOT
TEST ENV
some-0.1.2-SNAPSHOT.jar
NEXUS
• 테스트 성공하였다. 배포 하자.
테스트 성공
SVN
trunk
pom.xml : 0.0.1-SNAPSHOT
branches
0.1.x
pom.xml : 0.1.2-SNAPSHOT
tags
0.1.2
pom.xml : 0.1.2
TEST ENV
some-0.1.2-SNAPSHOT.jar
NEXUS
• 브랜치 0.1.x를 복사하여 tag 0.1.2를 생성.
• tag 0.1.2의 pom.xml의 버전을 0.1.2로 수정
태그 생성
버전 변경
SVN
trunk
pom.xml : 0.0.1-SNAPSHOT
branches
0.1.x
pom.xml : 0.1.2-SNAPSHOT
tags
0.1.2
pom.xml : 0.1.2
TEST ENV
some-0.1.2-SNAPSHOT.jar
NEXUS
some-0.1.2.jar
• tag 0.1.2에서 패키징하고 Nexus에 업로드한다.
패키징
업로드
SVN
trunk
pom.xml : 0.1.2-SNAPSHOT
branches
0.1.x
pom.xml : 0.1.2-SNAPSHOT
tags
0.1.2
pom.xml : 0.1.2
TEST ENV
some-0.1.2-SNAPSHOT.jar
NEXUS
some-0.1.2.jar
• 브랜치 0.1.x의 것을 trunk로 머징.
• trunk의 버전은 브랜치의 버전 0.1.2-SNAPSHOT이 되었다.
머징
SVN
trunk
pom.xml : 0.1.2-SNAPSHOT
branches
0.1.x
tags
0.1.2
TEST ENV
NEXUS
some-0.1.2.jar
• 배포에 사용된 브랜치 0.1.x를 삭제.
삭제
SVN
trunk
pom.xml : 0.1.2-SNAPSHOT
branches
tags
0.1.2
TEST ENV
NEXUS
some-0.1.2.jar
• trunk의 것으로 개발을 진행한다.
• 버전은 변경되지 않는다.
개발
SVN
trunk
pom.xml : 0.1.2-SNAPSHOT
branches
tags
0.1.2
TEST ENV
NEXUS
some-0.1.2.jar
• trunk의 것으로 계속 개발한다.
• 이 때 trunk의 것을 패키징하여 개발 서버에 배포하여 테스트 할수도 있다.
• 하지만 배포가 아니기에 버전관리는 고려되지 않는다.
계속 개발
DEV server
some-0.1.2-SNAPSHOT.jar 패키징, 설치
some-0.1.2-SNAPSHOT.jar
• 그냥 현재의 것을 패키징한 것이다. 배포한 것이 아니다.
• 패키징 할 때의 소스가 확보되어 있지 않다.
some-0.1.2.jar
• 버전관리되어 배포된 것이다.
• 패키징 할때의 소스가 확보되어 있다.(tag 0.1.2로)
DEV server
some-0.1.2-SNAPSHOT.jar
• 패키징되어 배포된 소스의 영구 보관을 의미.
• 그렇기 때문에 반드시 READ ONLY이다.
• 수정도 삭제도 안된다.
SVN
trunk
pom.xml
branches
0.1.x
tags
0.1.2
• 작업 공간을 의미.
• main인 trunk말고 특정 작업이 필요할 경우 생성.
• 보통 작업이 완료되면 삭제한다.
SVN
trunk
pom.xml
branches
0.1.x
tags
0.1.2
Case 2.
특정 기능 개발을 위한 브랜치
SVN
trunk
pom.xml : 0.1.2-SNAPSHOT
branches
cool
pom.xml : 0.1.2-cool-SNAPSHOT
tags
0.1.2
TEST ENV
NEXUS
some-0.1.2.jar
• 혹은 특정 기능 cool의 개발을 진행할 브랜치를 생성하고 여기서 개발을 진행.
브랜치 생성
개발
SVN
trunk
pom.xml : 0.1.2-SNAPSHOT
branches
cool
pom.xml : 0.1.2-cool-SNAPSHOT
tags
0.1.2
TEST ENV
NEXUS
some-0.1.2.jar
• 브랜치 cool는 개발을 진행하며 수시로 패키징하고 개발 서버에 설치해 볼 수도 있다.
• 하지만 배포가 아니기에 버전을 수정하거나 관리하지 않는다.
개발, 패키징
DEV server
some-0.1.2-cool-SNAPSHOT.jar 설치
SVN
trunk
pom.xml : 0.1.2-SNAPSHOT
branches
cool
pom.xml : 0.1.2-cool-SNAPSHOT
tags
0.1.2
TEST ENV
NEXUS
some-0.1.2.jar
• cool 브랜치에서의 개발과 별개로, trunk에서도 개발을 진행한다.
개발
개발
Case 3.
배포 프로세스, 한 번 더
SVN
trunk
pom.xml : 0.1.2-SNAPSHOT
branches
cool
pom.xml : 0.1.2-cool-SNAPSHOT
0.2.x
pom.xml : 0.2.1-SNAPSHOT
tags
0.1.2
TEST ENV
NEXUS
some-0.1.2.jar
• 0.2로 배포 준비 시작
• 배포 작업을 위한 branch 0.2.x를 생성.
• 브랜치 0.2.x의 pom 버전을 0.2.1-SNAPSHOT으로 변경
브랜치 생성
SVN
trunk
pom.xml : 0.1.2-SNAPSHOT
branches
cool
pom.xml : 0.1.2-cool-SNAPSHOT
0.2.x
pom.xml : 0.2.1-SNAPSHOT
tags
0.1.2
TEST ENV
some-0.2.1-SNAPSHOT.jar
NEXUS
some-0.1.2.jar
• 브랜치 0.2.x에서 패키징하여 테스트 환경에 설치
패키징
설치
SVN
trunk
pom.xml : 0.1.2-SNAPSHOT
branches
cool
pom.xml : 0.1.2-cool-SNAPSHOT
0.2.x
pom.xml : 0.2.1-SNAPSHOT
tags
0.1.2
TEST ENV
some-0.2.1-SNAPSHOT.jar
NEXUS
some-0.1.2.jar
• 테스트가 실패하였다. 브랜치 0.2.x에서 수정한다.
디버깅
테스트 실패
SVN
trunk
pom.xml : 0.1.2-SNAPSHOT
branches
cool
pom.xml : 0.1.2-cool-SNAPSHOT
0.2.x
pom.xml : 0.2.2-SNAPSHOT
tags
0.1.2
TEST ENV
some-0.2.2-SNAPSHOT.jar
NEXUS
some-0.1.2.jar
• 브랜치 0.2.x의 pom.xml의 버전을 0.2.2-SNAPSHOT으로 수정.
• 다시 패키징 하여 테스트 환경에 설치
패키징
설치
SVN
trunk
pom.xml : 0.1.2-SNAPSHOT
branches
cool
pom.xml : 0.1.2-cool-SNAPSHOT
0.2.x
pom.xml : 0.2.9-SNAPSHOT
tags
0.1.2
TEST ENV
some-0.2.9-SNAPSHOT.jar
NEXUS
some-0.1.2.jar
• 테스트가 계속 실패한다. 브랜치의 버전은 계속 변경되어 0.2.9-SNAPSHOT이 되었다.
• 이와중에 trunk와 cool 브랜치에서는 별개의 개발이 동시에 진행되어도 무방하다.
계속 디버깅
계속 테스트 실패
개발 진행
개발 진행
SVN
trunk
pom.xml : 0.1.2-SNAPSHOT
branches
cool
pom.xml : 0.1.2-cool-SNAPSHOT
0.2.x
pom.xml : 0.2.10-SNAPSHOT
tags
0.1.2
TEST ENV
some-0.2.10-SNAPSHOT.jar
NEXUS
some-0.1.2.jar
• 0.2.10-SNAPSHOT에서 테스트가 성공하였다.
테스트 성공
SVN
trunk
pom.xml : 0.1.2-SNAPSHOT
branches
cool
pom.xml : 0.1.2-cool-SNAPSHOT
0.2.x
pom.xml : 0.2.10-SNAPSHOT
tags
0.1.2
0.2.10
pom.xml : 0.2.10
TEST ENV
NEXUS
some-0.1.2.jar
• 브랜치 0.2.x를 복사하여 tag 0.2.10을 생성.
• 0.2 태그의 pom.xml의 버전을 0.2.10로 변경.
태그 생성
SVN
trunk
pom.xml : 0.1.2-SNAPSHOT
branches
cool
pom.xml : 0.1.2-cool-SNAPSHOT
0.2.x
pom.xml : 0.2.10-SNAPSHOT
tags
0.1.2
0.2.10
pom.xml : 0.2.10
TEST ENV
NEXUS
some-0.1.2.jar
some-0.2.10.jar
• 태그 0.2에서 패키징하고 Nexus에 업로드
SVN
trunk
pom.xml : 0.2.10-SNAPSHOT
branches
cool
pom.xml : 0.1.2-cool-SNAPSHOT
0.2.x
pom.xml : 0.2.10-SNAPSHOT
tags
0.1.2
0.2.10
pom.xml : 0.2.10
TEST ENV
NEXUS
some-0.1.2.jar
some-0.2.10.jar
• 브랜치 0.2.x의 소스를 trunk로 머징.
• trunk의 버전은 0.2.10-SNAPSHOT이 된다.
머징
삭제
Case 4.
이미 배포된 버전의 핫 픽스
SVN
trunk
pom.xml : 0.2.10-SNAPSHOT
branches
cool (pom.xml : 0.1.2-cool-SNAPSHOT)
0.1.x
pom.xml : 0.1.2-SNAPSHOT
tags
0.1.2
0.2.10
TEST ENV
NEXUS
some-0.1.2.jar
some-0.2.10.jar
• 배포한 0.1.2에서 버그가 발견되었다. 핫픽스하여 배포하여야 한다.
• tags 0.1.2를 카피하여 브랜치 0.1.x 생성
• 브랜치 0.1.x의 pom.xml의 버전을 0.1.2-SNAPSHOT으로 수정
브랜치 생성
SVN
trunk
pom.xml : 0.2.10-SNAPSHOT
branches
cool (pom.xml : 0.1.2-cool-SNAPSHOT)
0.1.x
pom.xml : 0.1.3-SNAPSHOT
tags
0.1.2
0.2.10
TEST ENV
some-0.1.3-SNAPSHOT.jar
NEXUS
some-0.1.2.jar
some-0.2.10.jar
• 0.1.x의 버전을 0.1.3-SNAPSHOT으로 수정.
• 패키징하고 개발환경에 설치.
설치
버전 수정
SVN
trunk
pom.xml : 0.2.10-SNAPSHOT
branches
cool (pom.xml : 0.1.2-cool-SNAPSHOT)
0.1.x
pom.xml : 0.1.3-SNAPSHOT.jar
tags
0.1.2
0.2.10
TEST ENV
some-0.1.3-SNAPSHOT.jar
NEXUS
some-0.1.2.jar
some-0.2.10.jar
• 테스트 성공.
테스트 성공
SVN
trunk
pom.xml : 0.2.10-SNAPSHOT
branches
cool (pom.xml : 0.1.2-cool-SNAPSHOT)
0.1.x
tags
0.1.2
0.1.3
0.2.10
TEST ENV
NEXUS
some-0.1.2.jar
some-0.1.3.jar
some-0.2.10.jar
• 브랜치 0.1.x를 카피하여 tag 0.1.3를 생성. 버전을 0.1.3으로 변경
• tag 0.1.3에서 패키징하고, 업로드.
• 브랜치 0.1.x를 trunk로 머징. 버전은 0.2.10-SNAPSHOT을 유지.
업로드
머징
tag 생성
작업 브랜치 삭제
Case 5.
특정 기능의 브랜치 배포
SVN
trunk
pom.xml : 0.2.10-SNAPSHOT
branches
cool (pom.xml : 0.1.2-cool-SNAPSHOT)
1.0.x (pom.xml : 1.0.1-SNAPSHOT)
tags
0.1.2
0.1.3
0.2.10
TEST ENV
NEXUS
some-0.1.2.jar
some-0.1.3.jar
some-0.2.10.jar
• 오래 개발해 오던 기능 cool 개발이 완료되었다.
• trunk에서 복사하여 브랜치 1.0.x를 생성
• 브랜치 1.0.x의 버전을 1.0.1-SNAPSHOT로 변경
브랜치 생성
SVN
trunk
pom.xml : 0.2.10-SNAPSHOT
branches
cool (pom.xml : 0.1.2-cool-SNAPSHOT)
1.0.x (pom.xml : 1.0.1-SNAPSHOT)
tags
0.1.2
0.1.3
0.2.10
TEST ENV
NEXUS
some-0.1.2.jar
some-0.1.3.jar
some-0.2.10.jar
• 브랜치 cool을 브랜치 1.0.x로 머징.
머징
SVN
trunk
pom.xml : 0.2.10-SNAPSHOT
branches
cool (pom.xml : 0.1.2-cool-SNAPSHOT)
1.0.x (pom.xml : 1.0.1-SNAPSHOT)
tags
0.1.2, 0.1.3, 0.2.10
TEST ENV
1.0.1-SNAPSHOT.jar
NEXUS
some-0.1.2.jar, some-0.1.3.jar, some-0.2.10.jar
• 브랜치 1.0.x를 패키징하고 테스트 환경에 설치.
설치
패키징
SVN
trunk
pom.xml : 0.2.10-SNAPSHOT
branches
cool (pom.xml : 0.1.2-cool-SNAPSHOT)
1.0.x (pom.xml : 1.0.1-SNAPSHOT)
tags
0.1.2, 0.1.3, 0.2.10
TEST ENV
1.0.1-SNAPSHOT.jar
NEXUS
some-0.1.2.jar, some-0.1.3.jar, some-0.2.10.jar
• 테스트가 성공하였다.
테스트 성공
SVN
trunk
pom.xml : 0.2.10-SNAPSHOT
branches
cool (pom.xml : 0.1.2-cool-SNAPSHOT)
1.0.x (pom.xml : 1.0.1-SNAPSHOT)
tags
0.1.2, 0.1.3, 0.2.10
1.0.1 (pom.xml : 1.0.1)
TEST ENV
NEXUS
some-0.1.2.jar, some-0.1.3.jar, some-0.2.10.jar
some-1.0.1.jar
• 브랜치 1.0.x를 복사하여 tag 1.0.1을 생성. 버전을 1.0.1으로 수정.
• 패키징하고 업로드
업로드
버전 수정, 패키징
tag 생성
SVN
trunk
pom.xml : 1.0.1-SNAPSHOT
branches
cool (pom.xml : 0.1.2-cool-SNAPSHOT)
1.0.x (pom.xml : 1.0.1-SNAPSHOT)
tags
0.1.2, 0.1.3, 0.2.10
1.0.1
TEST ENV
NEXUS
some-0.1.2.jar, some-0.1.3.jar, some-0.2.10.jar
some-1.0.1.jar
• 브랜치 1.0.x를 trunk에 머징. trunk의 버전은 1.0.1-SNAPSHOT이 됨.
머징
SVN
trunk
pom.xml : 1.0.1-SNAPSHOT
branches
cool
1.0.x
tags
0.1.2, 0.1.3, 0.2.10
1.0.1
TEST ENV
NEXUS
some-0.1.2.jar, some-0.1.3.jar, some-0.2.10.jar
some-1.0.1.jar
• 기능 cool 개발에 사용된 브랜치 1.0.x를 삭제.
두 브랜치 삭제
기타
제시된 예는 예일뿐이다.
회사마다 정책이 다르고, 실 운영도 다르다.
• micro version 사용 여부
• branch 이름
• 버전에 release, rc 표기
• 테스트 환경에 따른 버저닝 방법.
‘rc’ in some-2.3.1-rc.jar
Release Candidate; 배포 후보.
alpha, beta 테스트 이후의 배포 전 단계.
특정 버전에 대한 배포 단계를 의미
1.2-a1(1st alpha test version)
1.2-b1(1st beta test version)
1.2-b2(2nd beta test version)
1.2-rc1(1st release candidate version)
1.2-rc2(2nd release candidate version)
1.2-r(release version)
1.2-r2(release version with another bug fixed)
1.2-r3(release version with 2nd bug fixed)
some-3.5.6.jar
3 : major version. 아주 굵직한 변경. 하위호환포기면 무조건 Major.
5 : minor version. 기능 추가.
6 : micro/patch/build/revision version. 버그 픽스, 사소한 변경.

Release and versioning

  • 2.
  • 3.
  • 4.
    • 프로젝트 초기커밋 SVN trunk pom.xml : 0.0.1-SNAPSHOT TEST ENV NEXUS
  • 5.
    • 개발 진행 •pom.xml의 버전은 변경되지 않는다. SVN trunk pom.xml : 0.0.1-SNAPSHOT TEST ENV NEXUS 개발
  • 6.
    • 개발 계속진행 • 역시 pom.xml의 버전은 변경되지 않는다. SVN trunk pom.xml : 0.0.1-SNAPSHOT TEST ENV NEXUS 계속 개발
  • 7.
    SVN trunk pom.xml : 0.0.1-SNAPSHOT branches 0.1.x pom.xml: 0.1.1-SNAPSHOT TEST ENV NEXUS • 0.1로 배포 준비 시작 • 배포 작업을 위한 branch 0.1.x를 생성. • 브랜치 0.1.x의 pom 버전을 0.1.1-SNAPSHOT으로 변경 버전 변경 브랜치 생성
  • 8.
    SVN trunk pom.xml : 0.0.1-SNAPSHOT branches 0.1.x pom.xml: 0.1.1-SNAPSHOT TEST ENV some-0.1.1-SNAPSHOT.jar NEXUS • 브랜치 0.1.x에서 패키징 하고 테스트 환경에 설치 설치 패키징
  • 9.
    SVN trunk pom.xml : 0.0.1-SNAPSHOT branches 0.1.x pom.xml: 0.1.1-SNAPSHOT TEST ENV some-0.1.1-SNAPSHOT.jar NEXUS • 개발 서버에서 테스트 실패. 버그가 있다. • 브랜치 0.1.x에서 디버깅한다. 테스트 실패 디버깅
  • 10.
    SVN trunk pom.xml : 0.0.1-SNAPSHOT branches 0.1.x pom.xml: 0.1.2-SNAPSHOT TEST ENV some-0.1.2-SNAPSHOT.jar NEXUS • 브랜치 0.1.x의 pom의 버전을 0.1.2-SNAPSHOT으로 변경 • 다시 패키징 하고 테스트 환경에 설치 설치 버전 변경, 패키징
  • 11.
    SVN trunk pom.xml : 0.0.1-SNAPSHOT branches 0.1.x pom.xml: 0.1.2-SNAPSHOT TEST ENV some-0.1.2-SNAPSHOT.jar NEXUS • 테스트 성공하였다. 배포 하자. 테스트 성공
  • 12.
    SVN trunk pom.xml : 0.0.1-SNAPSHOT branches 0.1.x pom.xml: 0.1.2-SNAPSHOT tags 0.1.2 pom.xml : 0.1.2 TEST ENV some-0.1.2-SNAPSHOT.jar NEXUS • 브랜치 0.1.x를 복사하여 tag 0.1.2를 생성. • tag 0.1.2의 pom.xml의 버전을 0.1.2로 수정 태그 생성 버전 변경
  • 13.
    SVN trunk pom.xml : 0.0.1-SNAPSHOT branches 0.1.x pom.xml: 0.1.2-SNAPSHOT tags 0.1.2 pom.xml : 0.1.2 TEST ENV some-0.1.2-SNAPSHOT.jar NEXUS some-0.1.2.jar • tag 0.1.2에서 패키징하고 Nexus에 업로드한다. 패키징 업로드
  • 14.
    SVN trunk pom.xml : 0.1.2-SNAPSHOT branches 0.1.x pom.xml: 0.1.2-SNAPSHOT tags 0.1.2 pom.xml : 0.1.2 TEST ENV some-0.1.2-SNAPSHOT.jar NEXUS some-0.1.2.jar • 브랜치 0.1.x의 것을 trunk로 머징. • trunk의 버전은 브랜치의 버전 0.1.2-SNAPSHOT이 되었다. 머징
  • 15.
    SVN trunk pom.xml : 0.1.2-SNAPSHOT branches 0.1.x tags 0.1.2 TESTENV NEXUS some-0.1.2.jar • 배포에 사용된 브랜치 0.1.x를 삭제. 삭제
  • 16.
    SVN trunk pom.xml : 0.1.2-SNAPSHOT branches tags 0.1.2 TESTENV NEXUS some-0.1.2.jar • trunk의 것으로 개발을 진행한다. • 버전은 변경되지 않는다. 개발
  • 17.
    SVN trunk pom.xml : 0.1.2-SNAPSHOT branches tags 0.1.2 TESTENV NEXUS some-0.1.2.jar • trunk의 것으로 계속 개발한다. • 이 때 trunk의 것을 패키징하여 개발 서버에 배포하여 테스트 할수도 있다. • 하지만 배포가 아니기에 버전관리는 고려되지 않는다. 계속 개발 DEV server some-0.1.2-SNAPSHOT.jar 패키징, 설치
  • 18.
    some-0.1.2-SNAPSHOT.jar • 그냥 현재의것을 패키징한 것이다. 배포한 것이 아니다. • 패키징 할 때의 소스가 확보되어 있지 않다. some-0.1.2.jar • 버전관리되어 배포된 것이다. • 패키징 할때의 소스가 확보되어 있다.(tag 0.1.2로) DEV server some-0.1.2-SNAPSHOT.jar
  • 19.
    • 패키징되어 배포된소스의 영구 보관을 의미. • 그렇기 때문에 반드시 READ ONLY이다. • 수정도 삭제도 안된다. SVN trunk pom.xml branches 0.1.x tags 0.1.2
  • 20.
    • 작업 공간을의미. • main인 trunk말고 특정 작업이 필요할 경우 생성. • 보통 작업이 완료되면 삭제한다. SVN trunk pom.xml branches 0.1.x tags 0.1.2
  • 21.
    Case 2. 특정 기능개발을 위한 브랜치
  • 22.
    SVN trunk pom.xml : 0.1.2-SNAPSHOT branches cool pom.xml: 0.1.2-cool-SNAPSHOT tags 0.1.2 TEST ENV NEXUS some-0.1.2.jar • 혹은 특정 기능 cool의 개발을 진행할 브랜치를 생성하고 여기서 개발을 진행. 브랜치 생성 개발
  • 23.
    SVN trunk pom.xml : 0.1.2-SNAPSHOT branches cool pom.xml: 0.1.2-cool-SNAPSHOT tags 0.1.2 TEST ENV NEXUS some-0.1.2.jar • 브랜치 cool는 개발을 진행하며 수시로 패키징하고 개발 서버에 설치해 볼 수도 있다. • 하지만 배포가 아니기에 버전을 수정하거나 관리하지 않는다. 개발, 패키징 DEV server some-0.1.2-cool-SNAPSHOT.jar 설치
  • 24.
    SVN trunk pom.xml : 0.1.2-SNAPSHOT branches cool pom.xml: 0.1.2-cool-SNAPSHOT tags 0.1.2 TEST ENV NEXUS some-0.1.2.jar • cool 브랜치에서의 개발과 별개로, trunk에서도 개발을 진행한다. 개발 개발
  • 25.
  • 26.
    SVN trunk pom.xml : 0.1.2-SNAPSHOT branches cool pom.xml: 0.1.2-cool-SNAPSHOT 0.2.x pom.xml : 0.2.1-SNAPSHOT tags 0.1.2 TEST ENV NEXUS some-0.1.2.jar • 0.2로 배포 준비 시작 • 배포 작업을 위한 branch 0.2.x를 생성. • 브랜치 0.2.x의 pom 버전을 0.2.1-SNAPSHOT으로 변경 브랜치 생성
  • 27.
    SVN trunk pom.xml : 0.1.2-SNAPSHOT branches cool pom.xml: 0.1.2-cool-SNAPSHOT 0.2.x pom.xml : 0.2.1-SNAPSHOT tags 0.1.2 TEST ENV some-0.2.1-SNAPSHOT.jar NEXUS some-0.1.2.jar • 브랜치 0.2.x에서 패키징하여 테스트 환경에 설치 패키징 설치
  • 28.
    SVN trunk pom.xml : 0.1.2-SNAPSHOT branches cool pom.xml: 0.1.2-cool-SNAPSHOT 0.2.x pom.xml : 0.2.1-SNAPSHOT tags 0.1.2 TEST ENV some-0.2.1-SNAPSHOT.jar NEXUS some-0.1.2.jar • 테스트가 실패하였다. 브랜치 0.2.x에서 수정한다. 디버깅 테스트 실패
  • 29.
    SVN trunk pom.xml : 0.1.2-SNAPSHOT branches cool pom.xml: 0.1.2-cool-SNAPSHOT 0.2.x pom.xml : 0.2.2-SNAPSHOT tags 0.1.2 TEST ENV some-0.2.2-SNAPSHOT.jar NEXUS some-0.1.2.jar • 브랜치 0.2.x의 pom.xml의 버전을 0.2.2-SNAPSHOT으로 수정. • 다시 패키징 하여 테스트 환경에 설치 패키징 설치
  • 30.
    SVN trunk pom.xml : 0.1.2-SNAPSHOT branches cool pom.xml: 0.1.2-cool-SNAPSHOT 0.2.x pom.xml : 0.2.9-SNAPSHOT tags 0.1.2 TEST ENV some-0.2.9-SNAPSHOT.jar NEXUS some-0.1.2.jar • 테스트가 계속 실패한다. 브랜치의 버전은 계속 변경되어 0.2.9-SNAPSHOT이 되었다. • 이와중에 trunk와 cool 브랜치에서는 별개의 개발이 동시에 진행되어도 무방하다. 계속 디버깅 계속 테스트 실패 개발 진행 개발 진행
  • 31.
    SVN trunk pom.xml : 0.1.2-SNAPSHOT branches cool pom.xml: 0.1.2-cool-SNAPSHOT 0.2.x pom.xml : 0.2.10-SNAPSHOT tags 0.1.2 TEST ENV some-0.2.10-SNAPSHOT.jar NEXUS some-0.1.2.jar • 0.2.10-SNAPSHOT에서 테스트가 성공하였다. 테스트 성공
  • 32.
    SVN trunk pom.xml : 0.1.2-SNAPSHOT branches cool pom.xml: 0.1.2-cool-SNAPSHOT 0.2.x pom.xml : 0.2.10-SNAPSHOT tags 0.1.2 0.2.10 pom.xml : 0.2.10 TEST ENV NEXUS some-0.1.2.jar • 브랜치 0.2.x를 복사하여 tag 0.2.10을 생성. • 0.2 태그의 pom.xml의 버전을 0.2.10로 변경. 태그 생성
  • 33.
    SVN trunk pom.xml : 0.1.2-SNAPSHOT branches cool pom.xml: 0.1.2-cool-SNAPSHOT 0.2.x pom.xml : 0.2.10-SNAPSHOT tags 0.1.2 0.2.10 pom.xml : 0.2.10 TEST ENV NEXUS some-0.1.2.jar some-0.2.10.jar • 태그 0.2에서 패키징하고 Nexus에 업로드
  • 34.
    SVN trunk pom.xml : 0.2.10-SNAPSHOT branches cool pom.xml: 0.1.2-cool-SNAPSHOT 0.2.x pom.xml : 0.2.10-SNAPSHOT tags 0.1.2 0.2.10 pom.xml : 0.2.10 TEST ENV NEXUS some-0.1.2.jar some-0.2.10.jar • 브랜치 0.2.x의 소스를 trunk로 머징. • trunk의 버전은 0.2.10-SNAPSHOT이 된다. 머징 삭제
  • 35.
    Case 4. 이미 배포된버전의 핫 픽스
  • 36.
    SVN trunk pom.xml : 0.2.10-SNAPSHOT branches cool(pom.xml : 0.1.2-cool-SNAPSHOT) 0.1.x pom.xml : 0.1.2-SNAPSHOT tags 0.1.2 0.2.10 TEST ENV NEXUS some-0.1.2.jar some-0.2.10.jar • 배포한 0.1.2에서 버그가 발견되었다. 핫픽스하여 배포하여야 한다. • tags 0.1.2를 카피하여 브랜치 0.1.x 생성 • 브랜치 0.1.x의 pom.xml의 버전을 0.1.2-SNAPSHOT으로 수정 브랜치 생성
  • 37.
    SVN trunk pom.xml : 0.2.10-SNAPSHOT branches cool(pom.xml : 0.1.2-cool-SNAPSHOT) 0.1.x pom.xml : 0.1.3-SNAPSHOT tags 0.1.2 0.2.10 TEST ENV some-0.1.3-SNAPSHOT.jar NEXUS some-0.1.2.jar some-0.2.10.jar • 0.1.x의 버전을 0.1.3-SNAPSHOT으로 수정. • 패키징하고 개발환경에 설치. 설치 버전 수정
  • 38.
    SVN trunk pom.xml : 0.2.10-SNAPSHOT branches cool(pom.xml : 0.1.2-cool-SNAPSHOT) 0.1.x pom.xml : 0.1.3-SNAPSHOT.jar tags 0.1.2 0.2.10 TEST ENV some-0.1.3-SNAPSHOT.jar NEXUS some-0.1.2.jar some-0.2.10.jar • 테스트 성공. 테스트 성공
  • 39.
    SVN trunk pom.xml : 0.2.10-SNAPSHOT branches cool(pom.xml : 0.1.2-cool-SNAPSHOT) 0.1.x tags 0.1.2 0.1.3 0.2.10 TEST ENV NEXUS some-0.1.2.jar some-0.1.3.jar some-0.2.10.jar • 브랜치 0.1.x를 카피하여 tag 0.1.3를 생성. 버전을 0.1.3으로 변경 • tag 0.1.3에서 패키징하고, 업로드. • 브랜치 0.1.x를 trunk로 머징. 버전은 0.2.10-SNAPSHOT을 유지. 업로드 머징 tag 생성 작업 브랜치 삭제
  • 40.
    Case 5. 특정 기능의브랜치 배포
  • 41.
    SVN trunk pom.xml : 0.2.10-SNAPSHOT branches cool(pom.xml : 0.1.2-cool-SNAPSHOT) 1.0.x (pom.xml : 1.0.1-SNAPSHOT) tags 0.1.2 0.1.3 0.2.10 TEST ENV NEXUS some-0.1.2.jar some-0.1.3.jar some-0.2.10.jar • 오래 개발해 오던 기능 cool 개발이 완료되었다. • trunk에서 복사하여 브랜치 1.0.x를 생성 • 브랜치 1.0.x의 버전을 1.0.1-SNAPSHOT로 변경 브랜치 생성
  • 42.
    SVN trunk pom.xml : 0.2.10-SNAPSHOT branches cool(pom.xml : 0.1.2-cool-SNAPSHOT) 1.0.x (pom.xml : 1.0.1-SNAPSHOT) tags 0.1.2 0.1.3 0.2.10 TEST ENV NEXUS some-0.1.2.jar some-0.1.3.jar some-0.2.10.jar • 브랜치 cool을 브랜치 1.0.x로 머징. 머징
  • 43.
    SVN trunk pom.xml : 0.2.10-SNAPSHOT branches cool(pom.xml : 0.1.2-cool-SNAPSHOT) 1.0.x (pom.xml : 1.0.1-SNAPSHOT) tags 0.1.2, 0.1.3, 0.2.10 TEST ENV 1.0.1-SNAPSHOT.jar NEXUS some-0.1.2.jar, some-0.1.3.jar, some-0.2.10.jar • 브랜치 1.0.x를 패키징하고 테스트 환경에 설치. 설치 패키징
  • 44.
    SVN trunk pom.xml : 0.2.10-SNAPSHOT branches cool(pom.xml : 0.1.2-cool-SNAPSHOT) 1.0.x (pom.xml : 1.0.1-SNAPSHOT) tags 0.1.2, 0.1.3, 0.2.10 TEST ENV 1.0.1-SNAPSHOT.jar NEXUS some-0.1.2.jar, some-0.1.3.jar, some-0.2.10.jar • 테스트가 성공하였다. 테스트 성공
  • 45.
    SVN trunk pom.xml : 0.2.10-SNAPSHOT branches cool(pom.xml : 0.1.2-cool-SNAPSHOT) 1.0.x (pom.xml : 1.0.1-SNAPSHOT) tags 0.1.2, 0.1.3, 0.2.10 1.0.1 (pom.xml : 1.0.1) TEST ENV NEXUS some-0.1.2.jar, some-0.1.3.jar, some-0.2.10.jar some-1.0.1.jar • 브랜치 1.0.x를 복사하여 tag 1.0.1을 생성. 버전을 1.0.1으로 수정. • 패키징하고 업로드 업로드 버전 수정, 패키징 tag 생성
  • 46.
    SVN trunk pom.xml : 1.0.1-SNAPSHOT branches cool(pom.xml : 0.1.2-cool-SNAPSHOT) 1.0.x (pom.xml : 1.0.1-SNAPSHOT) tags 0.1.2, 0.1.3, 0.2.10 1.0.1 TEST ENV NEXUS some-0.1.2.jar, some-0.1.3.jar, some-0.2.10.jar some-1.0.1.jar • 브랜치 1.0.x를 trunk에 머징. trunk의 버전은 1.0.1-SNAPSHOT이 됨. 머징
  • 47.
    SVN trunk pom.xml : 1.0.1-SNAPSHOT branches cool 1.0.x tags 0.1.2,0.1.3, 0.2.10 1.0.1 TEST ENV NEXUS some-0.1.2.jar, some-0.1.3.jar, some-0.2.10.jar some-1.0.1.jar • 기능 cool 개발에 사용된 브랜치 1.0.x를 삭제. 두 브랜치 삭제
  • 48.
  • 49.
    제시된 예는 예일뿐이다. 회사마다정책이 다르고, 실 운영도 다르다. • micro version 사용 여부 • branch 이름 • 버전에 release, rc 표기 • 테스트 환경에 따른 버저닝 방법.
  • 50.
    ‘rc’ in some-2.3.1-rc.jar ReleaseCandidate; 배포 후보. alpha, beta 테스트 이후의 배포 전 단계.
  • 51.
    특정 버전에 대한배포 단계를 의미 1.2-a1(1st alpha test version) 1.2-b1(1st beta test version) 1.2-b2(2nd beta test version) 1.2-rc1(1st release candidate version) 1.2-rc2(2nd release candidate version) 1.2-r(release version) 1.2-r2(release version with another bug fixed) 1.2-r3(release version with 2nd bug fixed)
  • 52.
    some-3.5.6.jar 3 : majorversion. 아주 굵직한 변경. 하위호환포기면 무조건 Major. 5 : minor version. 기능 추가. 6 : micro/patch/build/revision version. 버그 픽스, 사소한 변경.