logo
Published on

지속적인 통합 - Paul M. Duvall Chapter 1

Authors

챕터1

변경할 때마다 소프트웨어 빌드하기1

먼저 기초부터 통달하라 - 래리 버드

  • 매일 사과 하나를 먹어라

변경할 때마다 소프트웨어를 빌드하기

https://www.youtube.com/watch?v=L1dtkLeIz-M

  • 코드 커밋 → 저장소에서 변경 내역 감지 및 빌드 / 통합 → 변경내역 전달 → CI 서버는 계속 변경사항 체크

개발자

  • 자주 빌드하여 문제를 빨리 찾아내기
    • 코딩표준 준수 여부
    • 자동화된 테스트 적용 얼마나 (커버리지)
    • 최근이 변경사항이 테스트 통과?
    • 성능 요구사항 준수?
    • 마지막 배포 문제 없음?

버전 관리 저장소

  • 저장소는 프로젝트의 표준이 되어야

지속적인 통합 서버

  • 저장소의 변경사항을 감지
  • 자동 테스트 및 빌드
  • 대시보드 제공

빌드 스크립트

  • 빌드 스크립트 사용 (수동 빌드 대체)

피드백 메커니즘

  • 테스트 및 빌드에 문제가 있을 경우 피드백을 빨리 받기
  • 이메일, 문자, RSS 등 (현대에는 무엇이 있을까? 슬랙?)

통합 빌드 머신

  • 프로젝트를 빌드하는 것이 유일한 목적인 머신

지속적인 통합의 특징

  • 버전 관리 저장소로의 연결
  • 빌드 스크립트
  • 몇 종류의 피드백 메커니즘
  • 소스코드 변경 내역을 통합하기 위한 프로세스

소스 코드 컴파일

  • 통합 ↔ 소스코드 컴파일
  • 검사 → 테스트 → 소스코드 컴파일 → DB 통합 → 배포

데이터베이스 통합

  • CI 와 Database integration 은 별개의 임무가 아님
  • 데이터베이스 연결, 조작, 스크립트 등이 고려되어야

테스트

  • 단위 테스트
  • 회귀 테스트

검사 (Inspection)

  • lint
  • coding convention

배포

  • 저장소 → 소스코드 체크아웃 → 빌드 → 테스트 및 검사 → 릴리즈 태깅 → 배포

문서화와 피드백

  • 간결하고 명확한 코드가 최고의 문서
  • Javadoc 등을 이용할 수 있음
  • 좋은 CI 의 핵심 특징은 속도
  • 정수는 개발자와 프로젝트 이해관계자 들에게 시의 적절하게 피드백 제공하는 것

챕터1 요약

인상

  • 2008년에도 이런 아이디어가 있었다니.. 이때 난 뭐했지? 수동 서버 관리, 수동 백업, 수동 설치, 아이언맨
  • 이제 손쉬운 CI 툴이 있다. (gitlab, jenkins)
  • 소프트웨어와 DB 를 분리하지 말자

적용

  • 10년 전 이러한 회사를 피해라? 버전관리 X
  • 지금은 지속적 배포, 회귀 테스트를 하고 있는가
  • 나는 변경할 때마다 빌드 하는가? FeConf 최수형님 영상의 그 느낌
  • 나의 개발환경 부터 CI 환경을 구성해보자
  • 나는 빠른 피드백이 가능한 지 점검해보자

회고

  • subversion 의 특성 상 저장소 푸시 이후 모든 과정이 시작. git 시대에는 달라야 하지 않을까