본문 바로가기
Study/지속적인 통합

[지속적인 통합] 1장. 시작하기

by Nahwasa 2023. 3. 7.

지속적인 통합 스터디 메인 페이지

목차

    * 주의 : 책(폴M 듀발 저 - 지속적인 통합) 내용 중 기억하고 싶은 내용 및 제 생각을 적은 글 입니다. 책이 나온지 오래되어 설명에 나온 기술스택이 현재 사용되지 않는게 많아 기술스택보다는 이론이나 책의 조언들 위주로 작성할 것 같고, 기술스택은 제가 알고있는대로 수정해서 작성합니다. 따라서 책에서 말하고자 하는 바와 다를 수 있습니다.

    * 별도로 표기되어 있지 않다면 이미지 출처는 '지속적인 통합 (폴M 듀발 저)' 책 입니다.

     

     

    CHAPTER 1. 시작하기

    • 겉보기엔 기초적인 것 같은 실천 방법도 설교보다는 실천하는 데 중점을 둬야 한다. 통합 빌드를 자주 돌리고 그게 대수롭지 않도록 만들고 싶다면 지속적인 통합(이하 CI)가 도움이 될 것이다.
    • CI
      • 컴파일
      • 데이터베이스 재빌드
      • 자동화된 테스트
      • 자동화된 검사
      • 소프트웨어 배포
      • 사용자 피드백 받기
      • 등. 흔히 얘기하는 CI/CD를 포함한 내용을 이 책에서 다루고 있음.
        • CD(지속적 배포)가 CI에 포함되는 관계이다보니 CI로 묶어서 얘기하고 있는 것 같음.

     

     

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

    • CI 시나리오는 개발자가 소스 코드 저장소에 코드를 커밋할 때 시작된다. 이하 일반적인 단계
      • 1. 개발자가 버전 관리 저장소(이하 VCS)에 커밋
      • 2. CI 서버가 변경 내역을 감지 후 CI 서버에 코드를 가져와 빌드 스크립트 실행해서 소프트웨어 통합
      • 3. 지정된 프로젝트 구성원에게 이메일 등으로 빌드 결과를 피드백
      • 4. CI 서버는 변경을 계속 감지 (폴링 등의 방식으로)

     

    • 개발자
      • 작업 내용과 관련된 수정 작업이 끝나면 개발자는 개인 빌드 후 변경 내역을 버전 관리 저장소에 커밋
    •  버전 관리 저장소(VCS)
      • git이나 svn 같은 것.
      • CI를 수행하려면 VCS를 반드시 사용해야 한다.
      • CI를 쓰지 않는다해도 VCS는 프로젝트의 표준이 되어야 한다.
    • 지속적인 통합 서버
      • 젠킨스, github action 등을 뜻함 (책에선 CruiseControl이 예시로 나옴)
      • 폴링이나 정의해둔 행동 수행(특정 브랜치에 merge와 같이) 등에  따라 빌드 스크립트나 다른 스크립트를 실행
    • 빌드 스크립트
      • 코드 컴파일 및 검사, 배포 등의 작업들을 자동화하는 배치 스크립트
    • 피드백 매커니즘
      • SMS, 이메일, slack 등을 통해 통합 빌드 시 이에 대한 피드백을 주는 것
    • 통합 빌드 머신
      • 소프트웨어 빌드 전용의 독립적인 컴퓨터
      • 통합 빌드 머신에서 CI 서버가 돌아감

     

     

    지속적인 통합의 특징

    • CI가 요구하는 네 가지 컴포넌트
      • VCS로의 연결
      • 빌드 스크립트
      • 피드백 매커니즘
      • 소스 코드 변경 내역을 통합하기 위한 프로세스 (자동이든 수동이든)

     

    • CI 시스템의 하부 프로세스
      • 소스 코드 컴파일 : 소스 코드로부터 실행 가능한 코드를 만들어내는 일
      • DB 통합 : 소스와 동일한 VCS에 DB도 반드시 통합되어 있어야 함 (flyway와 같은 마이그레이션 툴을 써도 될 것 같고, 이 책에서 말하는건 DB 스크립트나 문서 등이 소스 코드와 동일한 VCS에 들어가야 한다는 것)
      • 테스트 : 자동화되고 지속적인 테스트가 구비되어 있지 않은 CI는 CI가 아님
      • 검사 : 자동화된 코딩 검사 (소나큐브, 코틀린이라면 kt 린트 같은 것들) - 여러 코딩 규칙 강제
      • 배포 : 배포를 지속적으로 하면 어느 순간이라도 실제로 작동하는 소프트웨어를 배포할 수 있다. (docker 등을 통한 자동배포)
      • 문서화와 피드백 : 소스코드와 프로젝트 상태 문서화를 실시간에 획득했을 때 이점이 큼 (restdocs, slack 등)

     

    • 좋은 CI 시스템의 핵심적인 특징은 속도!
      • 그리고 적절한 피드백

     

     

    질문

    • VCS를 사용합니까?
    • 빌드 과정이 자동화되고 똑같이 반복될 수 있습니까? 사람이 개입하지 않아도 빌드 과정이 완전히 작동합니까?
    • 자동화된 테스트를 작성해서 돌립니까?
    • 빌드 과정의 일부로써 테스트를 실행합니까?
    • 코딩 및 설계 표준을 어떻게 강제합니까?
    • 자동화시킨 피드백 매커니즘에는 어떤 게 있습니까?
    • 소프트웨어를 빌드할 때 별도의 통합 빌드 머신을 사용합니까?

    댓글