SlideShare une entreprise Scribd logo
1  sur  52
임도형
개발 문화
삽질 증오
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. 버그 픽스, 사소한 변경.

Contenu connexe

Tendances

[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함Ji-Woong Choi
 
Svn server 설치(명준민_2015.07.10)
Svn server 설치(명준민_2015.07.10)Svn server 설치(명준민_2015.07.10)
Svn server 설치(명준민_2015.07.10)준민 명
 
디자이너를 위한 Svn 사용법
디자이너를 위한 Svn 사용법디자이너를 위한 Svn 사용법
디자이너를 위한 Svn 사용법Je Lyoung Kim
 
Docker 사내교육 자료
Docker 사내교육 자료Docker 사내교육 자료
Docker 사내교육 자료Juneyoung Oh
 
[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)Ildoo Kim
 
[오픈소스컨설팅] RPM 만들기
[오픈소스컨설팅] RPM 만들기[오픈소스컨설팅] RPM 만들기
[오픈소스컨설팅] RPM 만들기Ji-Woong Choi
 
[17.02.09] Github introduction (Korean Version)
[17.02.09] Github introduction (Korean Version)[17.02.09] Github introduction (Korean Version)
[17.02.09] Github introduction (Korean Version)Ildoo Kim
 
CLT 소스품질 Jenkins 사용가이드
CLT 소스품질 Jenkins 사용가이드CLT 소스품질 Jenkins 사용가이드
CLT 소스품질 Jenkins 사용가이드jSoboro
 
Open stack의 vm개념을 통한 docker의 활용
Open stack의 vm개념을 통한 docker의 활용Open stack의 vm개념을 통한 docker의 활용
Open stack의 vm개념을 통한 docker의 활용Tae Young Lee
 
Envoy 를 이용한 코드 배포 자동화
Envoy 를 이용한 코드 배포 자동화Envoy 를 이용한 코드 배포 자동화
Envoy 를 이용한 코드 배포 자동화Juwon Kim
 
젠킨스 설치 및 설정
젠킨스 설치 및 설정젠킨스 설치 및 설정
젠킨스 설치 및 설정중선 곽
 
Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템
Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템
Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템Park JoongSoo
 
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 DockerXECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 DockerXpressEngine
 
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축Ji-Woong Choi
 
[오픈소스컨설팅]애플리케이션 빌드 및_배포가이드_v1.0_20140211
[오픈소스컨설팅]애플리케이션 빌드 및_배포가이드_v1.0_20140211[오픈소스컨설팅]애플리케이션 빌드 및_배포가이드_v1.0_20140211
[오픈소스컨설팅]애플리케이션 빌드 및_배포가이드_v1.0_20140211Ji-Woong Choi
 
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHubXECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHubXpressEngine
 
[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기
[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기
[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기KTH, 케이티하이텔
 
Docker로 서버 개발 편하게 하기
Docker로 서버 개발 편하게 하기Docker로 서버 개발 편하게 하기
Docker로 서버 개발 편하게 하기Dronix
 
Docker 사용가이드 public v0.1
Docker 사용가이드 public v0.1Docker 사용가이드 public v0.1
Docker 사용가이드 public v0.1Steve Shim
 
Tensorflow 설치 가이드 for Windows10
Tensorflow 설치 가이드 for Windows10Tensorflow 설치 가이드 for Windows10
Tensorflow 설치 가이드 for Windows10Hwanhee Kim
 

Tendances (20)

[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함
 
Svn server 설치(명준민_2015.07.10)
Svn server 설치(명준민_2015.07.10)Svn server 설치(명준민_2015.07.10)
Svn server 설치(명준민_2015.07.10)
 
디자이너를 위한 Svn 사용법
디자이너를 위한 Svn 사용법디자이너를 위한 Svn 사용법
디자이너를 위한 Svn 사용법
 
Docker 사내교육 자료
Docker 사내교육 자료Docker 사내교육 자료
Docker 사내교육 자료
 
[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)
 
[오픈소스컨설팅] RPM 만들기
[오픈소스컨설팅] RPM 만들기[오픈소스컨설팅] RPM 만들기
[오픈소스컨설팅] RPM 만들기
 
[17.02.09] Github introduction (Korean Version)
[17.02.09] Github introduction (Korean Version)[17.02.09] Github introduction (Korean Version)
[17.02.09] Github introduction (Korean Version)
 
CLT 소스품질 Jenkins 사용가이드
CLT 소스품질 Jenkins 사용가이드CLT 소스품질 Jenkins 사용가이드
CLT 소스품질 Jenkins 사용가이드
 
Open stack의 vm개념을 통한 docker의 활용
Open stack의 vm개념을 통한 docker의 활용Open stack의 vm개념을 통한 docker의 활용
Open stack의 vm개념을 통한 docker의 활용
 
Envoy 를 이용한 코드 배포 자동화
Envoy 를 이용한 코드 배포 자동화Envoy 를 이용한 코드 배포 자동화
Envoy 를 이용한 코드 배포 자동화
 
젠킨스 설치 및 설정
젠킨스 설치 및 설정젠킨스 설치 및 설정
젠킨스 설치 및 설정
 
Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템
Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템
Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템
 
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 DockerXECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
 
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
 
[오픈소스컨설팅]애플리케이션 빌드 및_배포가이드_v1.0_20140211
[오픈소스컨설팅]애플리케이션 빌드 및_배포가이드_v1.0_20140211[오픈소스컨설팅]애플리케이션 빌드 및_배포가이드_v1.0_20140211
[오픈소스컨설팅]애플리케이션 빌드 및_배포가이드_v1.0_20140211
 
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHubXECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
 
[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기
[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기
[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기
 
Docker로 서버 개발 편하게 하기
Docker로 서버 개발 편하게 하기Docker로 서버 개발 편하게 하기
Docker로 서버 개발 편하게 하기
 
Docker 사용가이드 public v0.1
Docker 사용가이드 public v0.1Docker 사용가이드 public v0.1
Docker 사용가이드 public v0.1
 
Tensorflow 설치 가이드 for Windows10
Tensorflow 설치 가이드 for Windows10Tensorflow 설치 가이드 for Windows10
Tensorflow 설치 가이드 for Windows10
 

En vedette

메이븐파헤치기(김우용)
메이븐파헤치기(김우용)메이븐파헤치기(김우용)
메이븐파헤치기(김우용)우용 김
 
Requirement matrix
Requirement matrixRequirement matrix
Requirement matrixbususu
 
150514 경북대학교(콘텐츠산업과 창업)
150514 경북대학교(콘텐츠산업과 창업)150514 경북대학교(콘텐츠산업과 창업)
150514 경북대학교(콘텐츠산업과 창업)Hee Dae Kim
 
001.경제원론2-개관 (ku,snu 2015f)
001.경제원론2-개관 (ku,snu 2015f)001.경제원론2-개관 (ku,snu 2015f)
001.경제원론2-개관 (ku,snu 2015f)Namun Cho
 
웹 접근성 평가도구 OpenWAX 뜯어보기
웹 접근성 평가도구 OpenWAX 뜯어보기웹 접근성 평가도구 OpenWAX 뜯어보기
웹 접근성 평가도구 OpenWAX 뜯어보기Goonoo Kim
 
Dream maker 1(융합은 연결이다)
Dream maker 1(융합은 연결이다)Dream maker 1(융합은 연결이다)
Dream maker 1(융합은 연결이다)경태 민
 
ISO 25000과 ISO 29119를 활용한 임베디드 소프트웨어 시험 평가 방법에 관한 연구
ISO 25000과 ISO 29119를 활용한 임베디드 소프트웨어 시험 평가 방법에 관한 연구ISO 25000과 ISO 29119를 활용한 임베디드 소프트웨어 시험 평가 방법에 관한 연구
ISO 25000과 ISO 29119를 활용한 임베디드 소프트웨어 시험 평가 방법에 관한 연구Kyung Hyun Roh
 
스토리포인트로 공수산정하기 운선순위정하기
스토리포인트로 공수산정하기 운선순위정하기스토리포인트로 공수산정하기 운선순위정하기
스토리포인트로 공수산정하기 운선순위정하기도형 임
 
유지보수성이 sw의 품질이다.
유지보수성이 sw의 품질이다.유지보수성이 sw의 품질이다.
유지보수성이 sw의 품질이다.도형 임
 
모션 용기
모션 용기모션 용기
모션 용기Sujin Han
 
역사 속 초기 데이터 전문가를 통해 배우는 5가지 교훈
역사 속 초기 데이터 전문가를 통해 배우는 5가지 교훈역사 속 초기 데이터 전문가를 통해 배우는 5가지 교훈
역사 속 초기 데이터 전문가를 통해 배우는 5가지 교훈HT Kim
 
Toc quality management
Toc quality managementToc quality management
Toc quality managementNamkee Chung
 
메이븐 기본 이해
메이븐 기본 이해메이븐 기본 이해
메이븐 기본 이해중선 곽
 
코드의 품질 (Code Quality)
코드의 품질 (Code Quality)코드의 품질 (Code Quality)
코드의 품질 (Code Quality)ChulHui Lee
 
제2부 제조 및 서비스 프로세스 제10장 식스시그마 품질
제2부 제조 및 서비스 프로세스 제10장 식스시그마 품질제2부 제조 및 서비스 프로세스 제10장 식스시그마 품질
제2부 제조 및 서비스 프로세스 제10장 식스시그마 품질Minsuk Chang
 
마케팅 기본 개념_2010.12
마케팅 기본 개념_2010.12마케팅 기본 개념_2010.12
마케팅 기본 개념_2010.12James Kwon
 
Stp marketing strategy ver#1
Stp marketing strategy ver#1 Stp marketing strategy ver#1
Stp marketing strategy ver#1 의철 김
 
Git 사용 가이드
Git 사용 가이드Git 사용 가이드
Git 사용 가이드도형 임
 

En vedette (20)

메이븐파헤치기(김우용)
메이븐파헤치기(김우용)메이븐파헤치기(김우용)
메이븐파헤치기(김우용)
 
K.study. 9.5
K.study. 9.5K.study. 9.5
K.study. 9.5
 
Requirement matrix
Requirement matrixRequirement matrix
Requirement matrix
 
150514 경북대학교(콘텐츠산업과 창업)
150514 경북대학교(콘텐츠산업과 창업)150514 경북대학교(콘텐츠산업과 창업)
150514 경북대학교(콘텐츠산업과 창업)
 
001.경제원론2-개관 (ku,snu 2015f)
001.경제원론2-개관 (ku,snu 2015f)001.경제원론2-개관 (ku,snu 2015f)
001.경제원론2-개관 (ku,snu 2015f)
 
웹 접근성 평가도구 OpenWAX 뜯어보기
웹 접근성 평가도구 OpenWAX 뜯어보기웹 접근성 평가도구 OpenWAX 뜯어보기
웹 접근성 평가도구 OpenWAX 뜯어보기
 
Dream maker 1(융합은 연결이다)
Dream maker 1(융합은 연결이다)Dream maker 1(융합은 연결이다)
Dream maker 1(융합은 연결이다)
 
ISO 25000과 ISO 29119를 활용한 임베디드 소프트웨어 시험 평가 방법에 관한 연구
ISO 25000과 ISO 29119를 활용한 임베디드 소프트웨어 시험 평가 방법에 관한 연구ISO 25000과 ISO 29119를 활용한 임베디드 소프트웨어 시험 평가 방법에 관한 연구
ISO 25000과 ISO 29119를 활용한 임베디드 소프트웨어 시험 평가 방법에 관한 연구
 
스토리포인트로 공수산정하기 운선순위정하기
스토리포인트로 공수산정하기 운선순위정하기스토리포인트로 공수산정하기 운선순위정하기
스토리포인트로 공수산정하기 운선순위정하기
 
유지보수성이 sw의 품질이다.
유지보수성이 sw의 품질이다.유지보수성이 sw의 품질이다.
유지보수성이 sw의 품질이다.
 
모션 용기
모션 용기모션 용기
모션 용기
 
역사 속 초기 데이터 전문가를 통해 배우는 5가지 교훈
역사 속 초기 데이터 전문가를 통해 배우는 5가지 교훈역사 속 초기 데이터 전문가를 통해 배우는 5가지 교훈
역사 속 초기 데이터 전문가를 통해 배우는 5가지 교훈
 
Toc quality management
Toc quality managementToc quality management
Toc quality management
 
Kotler Keller 마케팅관리론 14판 요약 강의 13장. 서비스
Kotler Keller 마케팅관리론 14판 요약 강의 13장. 서비스Kotler Keller 마케팅관리론 14판 요약 강의 13장. 서비스
Kotler Keller 마케팅관리론 14판 요약 강의 13장. 서비스
 
메이븐 기본 이해
메이븐 기본 이해메이븐 기본 이해
메이븐 기본 이해
 
코드의 품질 (Code Quality)
코드의 품질 (Code Quality)코드의 품질 (Code Quality)
코드의 품질 (Code Quality)
 
제2부 제조 및 서비스 프로세스 제10장 식스시그마 품질
제2부 제조 및 서비스 프로세스 제10장 식스시그마 품질제2부 제조 및 서비스 프로세스 제10장 식스시그마 품질
제2부 제조 및 서비스 프로세스 제10장 식스시그마 품질
 
마케팅 기본 개념_2010.12
마케팅 기본 개념_2010.12마케팅 기본 개념_2010.12
마케팅 기본 개념_2010.12
 
Stp marketing strategy ver#1
Stp marketing strategy ver#1 Stp marketing strategy ver#1
Stp marketing strategy ver#1
 
Git 사용 가이드
Git 사용 가이드Git 사용 가이드
Git 사용 가이드
 

Plus de 도형 임

인공지능과 심리상담
인공지능과 심리상담인공지능과 심리상담
인공지능과 심리상담도형 임
 
Anomaly detection practive_using_deep_learning
Anomaly detection practive_using_deep_learningAnomaly detection practive_using_deep_learning
Anomaly detection practive_using_deep_learning도형 임
 
Deep learning application_to_manufacturing
Deep learning application_to_manufacturingDeep learning application_to_manufacturing
Deep learning application_to_manufacturing도형 임
 
프로그래머를 고려하는 당신에게
프로그래머를 고려하는 당신에게프로그래머를 고려하는 당신에게
프로그래머를 고려하는 당신에게도형 임
 
테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)도형 임
 
코드와 실습으로 이해하는 인공지능
코드와 실습으로 이해하는 인공지능코드와 실습으로 이해하는 인공지능
코드와 실습으로 이해하는 인공지능도형 임
 
알파고 학습 이해하기
알파고 학습 이해하기알파고 학습 이해하기
알파고 학습 이해하기도형 임
 
Ai 그까이거
Ai 그까이거Ai 그까이거
Ai 그까이거도형 임
 
테스트 케이스와 SW 품질
테스트 케이스와 SW 품질테스트 케이스와 SW 품질
테스트 케이스와 SW 품질도형 임
 
Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드
Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드
Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드도형 임
 
고품질 Sw와 개발문화
고품질 Sw와 개발문화고품질 Sw와 개발문화
고품질 Sw와 개발문화도형 임
 
오버라이딩을 사용한 테스트 시의 설정 처리
오버라이딩을 사용한 테스트 시의 설정 처리오버라이딩을 사용한 테스트 시의 설정 처리
오버라이딩을 사용한 테스트 시의 설정 처리도형 임
 
행복한 개발을 위한_테스트_케이스
행복한 개발을 위한_테스트_케이스행복한 개발을 위한_테스트_케이스
행복한 개발을 위한_테스트_케이스도형 임
 
행복, 그리고 인지과학
행복, 그리고 인지과학행복, 그리고 인지과학
행복, 그리고 인지과학도형 임
 
유지보수를 고려한 SW 개발
유지보수를 고려한 SW 개발유지보수를 고려한 SW 개발
유지보수를 고려한 SW 개발도형 임
 
흰머리 성성하게 개발하기 위해
흰머리 성성하게 개발하기 위해흰머리 성성하게 개발하기 위해
흰머리 성성하게 개발하기 위해도형 임
 
프로젝트 Xxx에 적용하고 싶은 개발방법
프로젝트 Xxx에 적용하고 싶은 개발방법프로젝트 Xxx에 적용하고 싶은 개발방법
프로젝트 Xxx에 적용하고 싶은 개발방법도형 임
 
행복한 소프트웨어 개발
행복한 소프트웨어 개발행복한 소프트웨어 개발
행복한 소프트웨어 개발도형 임
 
Java 그쪽 동네는
Java 그쪽 동네는Java 그쪽 동네는
Java 그쪽 동네는도형 임
 
자동화된 Test Case의 효과
자동화된 Test Case의 효과자동화된 Test Case의 효과
자동화된 Test Case의 효과도형 임
 

Plus de 도형 임 (20)

인공지능과 심리상담
인공지능과 심리상담인공지능과 심리상담
인공지능과 심리상담
 
Anomaly detection practive_using_deep_learning
Anomaly detection practive_using_deep_learningAnomaly detection practive_using_deep_learning
Anomaly detection practive_using_deep_learning
 
Deep learning application_to_manufacturing
Deep learning application_to_manufacturingDeep learning application_to_manufacturing
Deep learning application_to_manufacturing
 
프로그래머를 고려하는 당신에게
프로그래머를 고려하는 당신에게프로그래머를 고려하는 당신에게
프로그래머를 고려하는 당신에게
 
테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)테스트 기발 개발, TBD(Test based developement)
테스트 기발 개발, TBD(Test based developement)
 
코드와 실습으로 이해하는 인공지능
코드와 실습으로 이해하는 인공지능코드와 실습으로 이해하는 인공지능
코드와 실습으로 이해하는 인공지능
 
알파고 학습 이해하기
알파고 학습 이해하기알파고 학습 이해하기
알파고 학습 이해하기
 
Ai 그까이거
Ai 그까이거Ai 그까이거
Ai 그까이거
 
테스트 케이스와 SW 품질
테스트 케이스와 SW 품질테스트 케이스와 SW 품질
테스트 케이스와 SW 품질
 
Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드
Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드
Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드
 
고품질 Sw와 개발문화
고품질 Sw와 개발문화고품질 Sw와 개발문화
고품질 Sw와 개발문화
 
오버라이딩을 사용한 테스트 시의 설정 처리
오버라이딩을 사용한 테스트 시의 설정 처리오버라이딩을 사용한 테스트 시의 설정 처리
오버라이딩을 사용한 테스트 시의 설정 처리
 
행복한 개발을 위한_테스트_케이스
행복한 개발을 위한_테스트_케이스행복한 개발을 위한_테스트_케이스
행복한 개발을 위한_테스트_케이스
 
행복, 그리고 인지과학
행복, 그리고 인지과학행복, 그리고 인지과학
행복, 그리고 인지과학
 
유지보수를 고려한 SW 개발
유지보수를 고려한 SW 개발유지보수를 고려한 SW 개발
유지보수를 고려한 SW 개발
 
흰머리 성성하게 개발하기 위해
흰머리 성성하게 개발하기 위해흰머리 성성하게 개발하기 위해
흰머리 성성하게 개발하기 위해
 
프로젝트 Xxx에 적용하고 싶은 개발방법
프로젝트 Xxx에 적용하고 싶은 개발방법프로젝트 Xxx에 적용하고 싶은 개발방법
프로젝트 Xxx에 적용하고 싶은 개발방법
 
행복한 소프트웨어 개발
행복한 소프트웨어 개발행복한 소프트웨어 개발
행복한 소프트웨어 개발
 
Java 그쪽 동네는
Java 그쪽 동네는Java 그쪽 동네는
Java 그쪽 동네는
 
자동화된 Test Case의 효과
자동화된 Test Case의 효과자동화된 Test Case의 효과
자동화된 Test Case의 효과
 

Release and versioning

  • 1.
  • 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 TEST ENV NEXUS some-0.1.2.jar • 배포에 사용된 브랜치 0.1.x를 삭제. 삭제
  • 16. SVN trunk pom.xml : 0.1.2-SNAPSHOT branches tags 0.1.2 TEST ENV NEXUS some-0.1.2.jar • trunk의 것으로 개발을 진행한다. • 버전은 변경되지 않는다. 개발
  • 17. 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 패키징, 설치
  • 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에서도 개발을 진행한다. 개발 개발
  • 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를 삭제. 두 브랜치 삭제
  • 49. 제시된 예는 예일뿐이다. 회사마다 정책이 다르고, 실 운영도 다르다. • micro version 사용 여부 • branch 이름 • 버전에 release, rc 표기 • 테스트 환경에 따른 버저닝 방법.
  • 50. ‘rc’ in some-2.3.1-rc.jar Release Candidate; 배포 후보. 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 : major version. 아주 굵직한 변경. 하위호환포기면 무조건 Major. 5 : minor version. 기능 추가. 6 : micro/patch/build/revision version. 버그 픽스, 사소한 변경.