ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • CI / CD 란?
    프로그래밍 기초 공부 2022. 11. 11. 18:06

    [ CI / CD 배경 ]

    •  사용자에게 프로젝트를 배포했는데 어떠한 동작이 올바르게 동작하지 않아 문제가 발생했다고 가정
          -> 개발자들에게는 비상
          -> 급한 프로젝트일수록 더욱 빠르게 문제를 수정해야만 함
          -> 수정 후 다시 컴파일, 빌드, 배포하는 과정을 통해 수정된 코드가 제대로 동작하는지 테스트하고 검증 
          -> 이 과정들은 시간도 많이 걸리고 실수하기도 쉬움
          -> 수정된 코드에 문제가 다시 생기면 또 다시 과정을 반복해야함
          -> 이런 반복 과정을 개발자가 아닌 누군가 자동으로 해주면 좋지 않을까라는 생각에서 CI/CD가 생겨남

     

    [ CI ]

    • Continuous Integration 약자이고, 지속적인 통합을 의미
    • 어플리케이션의 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트 되어공유 레포지토리에 통합히는 것을 의미
    • 간단히 요약하면 빌드/테스트 자동화 과정
    •  CI를 성공적으로 구현할 경우
         -> 애플리케이션에 대한 새로운 코드 변경사항이 정기적으로 빌드 및 테스트되어 공유 리포지토리에 통합
         ->여러 명의 개발자가 동시에 애플리케이션 개발과 관련된 코드 작업을 할 경우
         -> 서로 충돌할 수 있는 문제를 해결할 수 있음
    • 지속적 통합의 실행은 소스/버전 관리 시스템에 대한 변경 사항을 정기적으로 커밋하여 모든 사람에게 동일 작업 기반을 제공하는 것으로 시작
      1. 개발자가 구현한 코드를 기존 코드와 병합
      2. 병합된 코드가 올바르게 동작하고 빌드되는지 검증
      3. 테스트 결과 문제가 있다면 수정하고 다시 1로 돌아감
      4. 문제가 없다면 배포를 진행

     

     

    [ CI가 필요한 환경 ]

    • 다수의 개발자가 형상관리 툴을 공유하여 사용하는 환경
      • 개발자는 형상관리 툴(Git, SVN 등)을 사용함
      • 지속적으로 서비스해야 하는 어플리케이션이나 현재 개발 중인 어플리케이션은 기능 추가 시마다
        commit 등을 날려 레포지토리에 버전 업데이트를 함
      • 다수의 개발자가 한 팀으로 작업할 경우, 이 공유 레포지토리에 수많은 commit들이 쌓이게 됨
      • 그럴 때마다, 기능별로 빌드/테스트/병합까지 하려면 상당히 번거로울 것
            -> 자동화된 빌드/테스트는 원천 소스코드의 충돌 등을 방어하는 Benefit을 제공할 수 있음

     

    • MSA(Micro Service Archietecture) 환경
      • 최근 IT 업계에 붐처럼 떠오르고 있는 아키텍처 모델
      • 기존의 어플리케이션이 모든 기능을 포함하는 하나의 거대한 서비스이었다면,
        MSA는 작은 기능별로 서비스를 잘게 쪼개어 개발하는 형태를 의미
      • MSA 환경에서는 대부분 Agile(소규모 기능 단위로 빠르게 개발 & 적용을 반복하는 개발방법론) 방법론이 적용되기 때문에, 기능 추가가 매우 빈번하게 발생하게 됨
            -> 그러한 상황에서 CI의 적용은 기능 충돌 방지 등의 Benefit을 제공할 수 있음

     

     

    [ CI 목표 ]

    1. 버그를 신속하게 찾아 해결
    2. 소프트웨어의 품질을 개선
    3. 새로운 업데이트 검증 및 릴리즈의 시간을 단축시키는 것

     

     

    [ CD ]

    • Continuous Delivery, Continuous Depolyment의 약자
    • 지속적인 배포, 지속적인 서비스 제공 둘 다 의미
      • 지속적 제공
        •  CI를 통해서 새로운 소스코드의 빌드와 테스트 병합까지 성공적으로 진행되었다면, 빌드와 테스트를 거쳐 github과 같은 저장소에 업로드하는 것을 의미
      • 지속적 배포
        • 이렇게 성공적으로 병합된 내역을 저장소뿐만 아니라 사용자가 사용할 수 있는 배포환경까지 릴리즈하는 것을 의미
    • 요약하면 CD는 개발자의 변경 사항이 레포지토리를 넘어, 고객의 프로덕션 환경까지 릴리즈 되는 것을 의미

     

    • 서비스의 사용자는 최대한 빠른 시간 내에 최신 버전의 프로덕션을 제공받을 필요가 있음
    • 이 때, 소프트웨어가 언제든지 신뢰 가능한 수준의 버전을 유지할 수 있도록 지원 하는 것이 CD
    • 이는 서비스의 개발팀과 비즈니스팀(영업, CS팀 등) 간의 커뮤니케이션 부족 문제를 해결해 줌으로써,
      배포에 이르기까지의 노력을 최소한으로 단축시켜 준다는 Benefit을 제공

     

     

    [ DevOps 엔지니어 역할 ]

     

    • CI/CD 자동화는 DevOps 엔지니어의 핵심 업무
    • CI/CD를 위한 파이프라인을 구성하고, 이를 자동화 단계까지 끌어 올림
    • 또한 중간중간 모니터링 지표를 구성하여, 개발자들의 개발 방향을 가이드
    • 이를 통하여, 고객들에게 안정적이고 신뢰성 높은 서비스 프로덕션을 제공
    • 서비스 제품을 개발하는 일도 중요하지만, 고객에게 안정감 있는 서비스를 배포하여 운영하는 일도 중요
    • DevOps 엔지니어가 사용하는 대표적인 CI/CD툴
      •  Jenkins
      • CircleCI
      • TravisCI
      • Bamboo
      • Github Actions
      • etc

     

     

    [ CI/CD 적용 전 후 ]

     

    CI/CD를 적용하기 전

    1. 개발자들이 개발하여 코드를 수정
    2. 각자의 feature 브랜치에 코드를 push함
    3. 각자의 코드를 git에 올리고 통합함
    4. 에러가 발생해도 어느 부분인지 모르므로 다시 어디부분에 에러가 있는지 디버깅하고 코드를 수정
    5. (1) ~ (4)의 과정을 반복
    6. 많은 시간을 할애하여 에러가 해결되었으면 배포를 시작
    7. 배포과정 또한, 개발자가 직접 배포과정을 거치므로 많은 시간을 소요

     

    CI/CD를 적용 후

    1. 개발자들이 개발하여 feature브랜치에 코드를 push
    2. git push를 통해 Trigger되어 CI서버에서 알아서 Build, Test, Link를 실행하고 결과를 전송
    3. 개발자들은 결과를 전송받고 에러가 난 부분이 있다면 에러부분을 수정하고 코드를 master 브랜치에 merge
    4. master 브랜치에 코드를 merge하고 Build, Test가 정상적으로 수행이 되면 CI서버에서 알아서 Deploy 과정을 수행

     

    '프로그래밍 기초 공부' 카테고리의 다른 글

    DOM이란?  (0) 2022.11.16
    GraphQL이란?  (1) 2022.11.14
    OAuth란?  (0) 2022.11.10
    URL, URI란?  (0) 2022.11.07
    TCP, UDP란?  (0) 2022.11.06
Designed by Tistory.