continuous integration...

46
Continuous Integration 지속적인 통합이란 조영호 카페PJT2008.08.25 [email protected]

Upload: others

Post on 01-Sep-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

Continuous Integration

지속적인통합이란

조영호

카페PJT팀

2008.08.25

[email protected]

Page 2: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

1. Feedback

2. 지속적인통합이란

3. 지속적인통합 Practice

목차

4. 지속적인통합지침

Page 3: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

1. Feedback

Page 4: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

4 / 문서의 제목

설계시점

직관 사고 경험

설계품질

역치

직관 사고 경험

설계품질

역치

직관 사고 경험

설계품질

역치

Page 5: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

5 / 문서의 제목

지속적인설계

Big Up Front Design

전체를모두설계한후구현

계획된설계

가정이변할경우낭비발생

Incremental Design

언제나설계하기

구현후설계

리팩토링을수반한반복개발이최선의방법

불명확한문제, 즉 단일한정답이나해결책에도달하는최선의길은

조사, 실험, 결과, 확인을짧고반복적으로수행하여해결책을찾는것이다

명세

테스트

설계

코드

Page 6: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

6 / 문서의 제목

테스트시점

결함비용증가

결함을일찍찾을수록고치는비용감소

피드백순환이길수록비용이증가테스팅

결함

Page 7: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

7 / 문서의 제목

테스트먼저

명세

설계

코드

테스트

코드보다테스트를먼저작성

작은테스트를하나추가한다

모든테스트를실행해서테스트가실패하는것을확인한다

조금수정한다

모든테스트를실행해서테스트가성공하는것을확인한다

중복을제거하기위해리팩토링한다

Software Pull Model

Page 8: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

8 / 문서의 제목

Test-Driven Development

Need Test Code

Refactoring

통과

Bad Smell?

SimpleCode

Simplicity

가장간단한코드가만들어질때까지

불안함이지루함으로변할때까지

Page 9: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

9 / 문서의 제목

코드공동소유

모든사람이코드수정

변경사항의충돌가능성

통합을미룰수록비용증가

통합사이의간격을좁혀통합비용감소

DailyBuild

ContinuousIntegration

IntegrationHell

Page 10: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

10 / 문서의 제목

Feedback

핵심

Test-Driven Development

Refactoring

Continuous Integration

Collective Code Ownership

Page 11: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

2. 지속적인 통합이란

Page 12: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

12 / 문서의 제목

지속적인통합(Continuous Integration)

지속적통합은 여러명으로 구성된 팀이작업한 것을자주 통합하는 것을

가리키는소프트웨어 개발프랙티스로서 여기서 자주는 각팀원이 적어도

하루에한번이상, 매일 여러번의 통합이이루어지는 것을 의미한다. 매번

이루어지는 통합은 자동화된 빌드에 의해통합에러가 없는지 가능한 빨리

검증된다. 여기에서 빌드는 테스트도 포함한다.

- Martin Fowler

Page 13: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

13 / 문서의 제목

자동화의종류

지시자동화(Command Automation)

예약자동화(Scheduled Automation)

유발자동화(Triggered Automation)

Page 14: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

14 / 문서의 제목

빌드란?

빌드는컴파일보다 더많은걸의미합니다.

빌드에는컴파일과 테스트, 검사, 배포 등의과정들이 포함될 수있습니다.

빌드라함은소스 코드를 한곳에모아보고, 소프트웨어가 응집력 있는

하나의단위로써 작동하는지 확인하는 과정이라 하겠습니다.

Page 15: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

15 / 문서의 제목

CI 시스템의컴포넌트

개발자

서브버전

개발자

개발자

피드백 메커니즘

빌드 스크립트

지속적인 통합 서버

통합 빌드 머신버전 관리 저장소

Page 16: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

16 / 문서의 제목

CI 시스템의컴포넌트

개발자

지속적인 통합 서버

빌드 스크립트개발자

개발자

피드백 메커니즘

변경 사항커밋하기

통합 빌드 머신

서브버전

버전 관리 저장소

Page 17: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

17 / 문서의 제목

CI 시스템의컴포넌트

개발자

개발자

개발자

피드백 메커니즘

폴링

빌드 스크립트

서브버전

버전 관리 저장소

지속적인 통합 서버

통합 빌드 머신

Page 18: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

18 / 문서의 제목

CI 시스템의컴포넌트

개발자

개발자

개발자

피드백 메커니즘

빌드 스크립트

소스 코드 컴파일 하기,데이터베이스 통합하기,테스트 돌리기,검사 돌리기,소프트웨어 배포하기

서브버전

버전 관리 저장소

지속적인 통합 서버

통합 빌드 머신

Page 19: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

19 / 문서의 제목

CI 시스템의컴포넌트

개발자

개발자

개발자

피드백 메커니즘

빌드 스크립트

서브버전

버전 관리 저장소

지속적인 통합 서버

통합 빌드 머신

피드백 생성하기

Page 20: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

20 / 문서의 제목

CI 시스템의컴포넌트

개발자

개발자

개발자

피드백 메커니즘

빌드 스크립트

서브버전

버전 관리 저장소

지속적인 통합 서버

통합 빌드 머신

피드백

Page 21: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

21 / 문서의 제목

CI 시스템의컴포넌트 - 개발자

개발자

• 개인빌드(Private Build) 실행

• 저장소에서코드체크아웃

• 체크아웃한코드수정

• 저장소로부터가장최근의시스템변경사항업데이트

• 단위테스트를포함한빌드실행

• 변경한코드커밋

• 통합 빌드시작

Page 22: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

22 / 문서의 제목

버전 관리 저장소

CI 시스템의컴포넌트 – 버전관리저장소

• 지속적인 통합의 필수요소

• 소스코드와 다른소프트웨어 자산의 변경관리

• 주흐름(mainline)에지속적인 통합실행

• Subversion

Page 23: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

23 / 문서의 제목

CI 시스템의컴포넌트 –

• 버전관리저장소 변경 시통합빌드 실행

• 변경사항을 확인하는 시간 간격설정

• 예약자동화보다는 유발 자동화가 효과적

• Dashboard 제공

• 별도의통합 빌드머신에서 지속적인 통합실행

• Bamboo

통합빌드머신지속적인통합서버

지속적인 통합 서버

통합 빌드 머신

Page 24: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

24 / 문서의 제목

CI 시스템의컴포넌트 – 지속적인 통합서버

지속적인 통합 서버

통합 빌드 머신

Page 25: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

25 / 문서의 제목

CI 시스템의컴포넌트 – 빌드스크립트

빌드 스크립트

• 자동화배치 스크립트

• 사람이개입되지 않는(hands-off) 자동화

• IDE 기반의 빌드를 사용하는 것은 CI가아님

• Maven

Page 26: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

26 / 문서의 제목

CI 시스템의컴포넌트 – 빌드스크립트

빌드 스크립트

Page 27: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

27 / 문서의 제목

피드백 메커니즘

• 통합빌드의 상태를 즉시피드백

• 다양한피드백 메커니즘 제공

• e-mail

• SMS

• RSS

CI 시스템의컴포넌트 – 피드백메커니즘

Page 28: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

28 / 문서의 제목

CI 시스템의컴포넌트 – 피드백메커니즘

피드백 메커니즘

Page 29: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

29 / 문서의 제목

통합버튼

피드백주기

소프트웨어품질을향상시키고위험을줄이기

| \ \

}]

{[

“‘ Integrate

?/

shift?/

P ㅖㅔ

통합하기

소스코드컴파일하기

테스트돌리기

검사수행하기

소프트웨어배포하기

데이터베이스통합하기

자동화된통합빌드

Page 30: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

30 / 문서의 제목

지속적인통합의도입

CI 시스템을조금씩성장시켜나가는걸목표로삼으세요.

당장모든걸 CI 시스템에쑤셔넣으려고하면일이꼬일수있습니다.

우선돌아가게만들고, 개발자들이 CI를사용하게만든다음에

프로젝트의위험요소를근거로하여다른자동화된프로세스를추가하세요.

Page 31: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

31 / 문서의 제목

3. 지속적인 통합 PracticeContinuous Integration

By Martin Fowler

Page 32: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

32 / 문서의 제목

지속적인통합 PRACTICE

단일소스저장소를유지하라 빌드를자동화하라

스스로테스트(self-testing)가능한빌드를만들어라

모든사람이하루에한번씩커밋한다

모든커밋은통합머신의메인라인을빌드해야한다

빌드시간을짧게유지하라

프로덕션환경과동일한환경에서테스트하라

모든사람이최신실행본에쉽게접근하도록하라

모든사람이진행사항을볼수있어야한다

배포를자동화하라

Page 33: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

33 / 문서의 제목

단일소스저장소를유지하라

빌드에필요한모든것을저장

소스코드

테스트스크립트

프로퍼티파일

데이터베이스스키마

설치스크립트

외부라이브러리

IDE 설정

빌드로생성할수있는것들은제외

브랜치의수는최 소화

Subversion

Page 34: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

34 / 문서의 제목

빌드를자동화하라

자동화된빌드에시스템생성에필요한모든것을포함시켜라

자동화된빌드가아닌것

사람에의한커맨드입력

대화상자클릭

IDE에독립적인빌드

Maven

Page 35: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

35 / 문서의 제목

스스로테스트가능한빌드를구축하라

빌드내에자동화된테스트포함

테스트실패시빌드실패

xUnit, FITness

자주실행되는불완전한테스트가

전혀작성되지않는완벽한테스트보다낫다

Page 36: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

36 / 문서의 제목

모든사람이하루에한번씩커밋한다

통합은변경된코드에대한커뮤니케이션수단

빈번한커밋

잦은커뮤니케이션을통한변경사항의빠른전달

더빠른충돌감지

검사할범위축소

측정가능한작은단위로작업조절

컴파일단계충돌

빌드실패

실행단계충돌

셀프테스트실패

Page 37: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

37 / 문서의 제목

모든커밋은빌드머신에서주흐름을빌드해야한다

커밋한코드가통합머신상에서의빌드에성공한경우에만빌드완료

주흐름을건강한상태로유지

빌드방법

수동빌드

통합서버에서수작업으로통합빌드수행

CI 서버

매커밋시마다 CI 서버에의한자동빌드

지속적통합에서가장중요한점은

빌드가실패했을때즉시수정해야한다는점이다

Page 38: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

38 / 문서의 제목

빌드시간을짧게유지하라

지속적통합의가장큰이점은피드백

오랜시간이걸리는빌드는 CI의가장큰적

XP의 10분빌드

Staged Build(Build Pipeline)

Commit Build

커밋시에이루어지는빠른빌드

데이터베이스와분리된빠른테스트실행

주 CI 사이클에서이용

Secondary Build

가장최근에성공한 Commit Build의소스를사용

실제데이터베이스를사용하는느린테스트실행

작업을나누어한대이상의 통합서버에서병렬실행가능

Page 39: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

39 / 문서의 제목

운영환경과동일한환경에서테스트하라

가능한테스트환경과운영환경을유사하게구성

목표는차이에따른위험을인식하는것

Commit Build

최대한빠른속도를얻기위해인위적인환경구성

Secondary Build

최대한운영환경과유사한환경구성

Page 40: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

40 / 문서의 제목

모든사람이최신실행본에쉽게접근할수있도록하라

올바른소프트웨어를개발하고있는가?

모든사람이최신실행본에접근하고실행가능해야함

모든사람들에게최신실행본의위치를통보

문제는바라는것과인식하는것과의차이다.

원하는것을실제로갖기전까지는

무엇을정말로원하는지알수없다

Page 41: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

41 / 문서의 제목

모든사람이어떤일이일어나고있는지알수있다

모든사람이시스템의상태를공유

가장중요한것은주흐름빌드의상태

피드백메커니즘

CI dashboard

Information Radiator

Page 42: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

42 / 문서의 제목

배포를자동화하라

하나이상의환경에빌드

commit test

secondary test

production

자동화된배포프로세스

프로젝트속도향상

에러방지

자동화된롤백방법도함께고려

Page 43: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

43 / 문서의 제목

4. 지속적인 통합지침

Page 44: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

44 / 문서의 제목

지속적인통합지침

코드를자주커밋하세요

깨진코드를커밋해서는안됩니다

빌드가깨지면즉시고치세요

개인빌드(Private Build)를돌리세요

테스트와검사는모두통과해야합니다

깨진코드는가져오지마세요

자동화된개발자테스트를작성하세요

Page 45: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

Thank you.

Page 46: Continuous Integration 지속적인통합이란pds16.egloos.com/pds/201002/17/18/1.Continuous_Integration.pdf · 리팩토링 을수반한반복 ... Refactoring Continuous Integration

Question.