[CI/CD] Github Actions - CI/CD의 개념

Seong Ho Kim·2024년 1월 13일
0

[CI/CD] Github Actions

목록 보기
1/4

1. 개발자가 하는 일들 - 개발부터 배포까지의 일련의 과정

사진 출처 : wecode

  • 개발자는 코드 작업 위주로 하는 것으로 알고있지만, 그것 외에도 외적인 업무로는 테스트, 배포등 다양한 업무가 포함되며 우리의 생각보다 코딩 못지 않게 많은 공수가 들어야 하는 작업이 많다.
  • feature/ㅇㅇbranch에서 기능 작업이 완료되면, 작성한 코드의 정상 동작을 확인하기 위해 Unit Test를 실행해야 한다. 그 후 Pull Request를 통해 develop branch에 코드를 통합하고, 이후 develop branch에서 다시 Unit Test를 실행하는 과정이 필요할 수 밖에 없다.
  • 실행한 Unit에서 정상적으로 동작하더라도, develop branch에서의 통합 후에는 예상치 못한 문제가 발생할 수 있으며, 다른 개발자들의 코드와의 병합으로 인해 갑작스러운 Conflict 등의 문제가 발생할 수 있으므로, develop branch에서의 통합 후에는 반드시 Unit Test를 다시 실행해야 한다.
  • develop branch에서 Unit Test를 통과한 경우, 이제 Staging 서버에 배포하게 되는데, 각 개발팀은 서로 다른 배포 절차를 가지고 있겠지만, 보통은 Staging 서버에 직접 접속하여 새로운 코드를 가져오고, 빌드 명령어를 실행해 빌드한 후 애플리케이션 서버를 실행시켜 배포를 완료하게 된다.

2. 개발자의 생산성을 높일 수 있는 방법? - CI/CD 자동화

  • 개발부터 테스트 그리고 배포까지의 과정은 쉽지 않은 과정이다. 굉장히 반복적이고 매뉴얼적인 과정을 거쳐가야 하기 때문에 많은 시간을 낭비하게 될 수 있다.
  • Unit Test, Integration Test, E2E Test등의 테스트 과정과 모든 배포 과정을 굳이 사람이 직접 실행할 필요 없이 자동으로 실행 되도록 하고, 문제가 생겼을때 자동으로 알려주는 시스템을 구축해서 개발자 대신 모든 과정을 자동으로 진행되도록 하는 시스템, 즉 개발 환경 자동화 를 통해서 개발자의 생산성을 높이게 되었다.
  • 바로 이 방법이 CI/CD 이며, Continuous Integration / Continuous Deployment 의 약자인 CI/CD를 통해서 개발자가 최대한 실제 개발에만 신경을 쓰고 나머지 과정들은 자동으로 이루어질 수 있도록 해서 개발자들의 생산성을 최대한으로 높일 수 있도록 초점을 맞췄다.

3. CI/CD 란?

  • 개발자들이 개발에 더 집중할 수 있도록, 테스트와 배포등 개발 외의 작업들은 모두 자동화를 시켜서 개발자의 생산성을 높여주는게 바로 CI/CD 시스템 이다.

  • CI(Continuous Integration) : 지속적인 통합 이라는 의미를 가지고 있으며, 개발자가 커밋과 푸쉬를 한 후, 빌드 부터 테스트 그리고 develop 브랜치로 merge되는 과정을 말한다. 개발자가 코드를 커밋하고 푸쉬하는 만큼 지체 없이 바로 테스트와 merge가 (하루에도 여러번) 지속적으로 이루어 질 수 있도록 하는 것

3-1) CI 예 - 검색 기능
1. 검색 기능을 작업할 feature branch인 feature/search 브랜치를 생성한다.
2. feature/search 브랜치를 생성 및 기능을 구현 한 후 feature/search 브랜치에 커밋한다.
3. 문제가 없는지 확인하기 위해 (push 후) unit test를 실행한다.
4. Unit test가 문제 없이 모두 통과하면 (Pull Request 리뷰를 거친 후) develop 브랜치에 merge 한다.
5. Develop 브랜치에 merge 된 후 develop 브랜치에서 다시 unit test를 실행하여 develop 브랜치에 merge후 버그나 이상이 없음을 확인 한다.

결론 : CI 과정중 3번에서 5번까지의 모든 과정을 자동화하여, 개발자가 개발을 끝내고 커밋하는 순간 테스트와 머지까지 자동으로 신속하게 이루어지게 하는 것을 말한다.

  • CD(Continuous Deployment) : 지속적인 제공, 지속적인 배포 라는 의미를 가지고 있으며, CI 다음 과정들을 자동화하여, 개발자가 개발을 끝내고 커밋 및 푸쉬를 하면 그대로 모든 테스트를 자동으로 거치고 바로 production 배포까지 완료되는 것

3-2) CD 예 - production 서버 배포

  1. Staging 서버에서 최신 코드를 배포
  2. Staging 서버에서 다음과 같은 다양한 테스트를 실행하여 production에 배포가 될 수 있을지를 판단
    a. Integration Test
    b. E2E(End-To-End) Test
    c. 그 외 Load Test등 필요한 테스트들
  3. 모든 테스트 통과 시, Production 서버에 배포하고 master(혹은 main) 브랜치에 merge
  • 결론 : 최신 코드들이 develop 브랜치에 merge가 되어 있고, 실제 유저들이 사용할 수 있도록 배포되려먼 production 서버에 배포가 되어야 하기에, 배포까지 이루어 지기 위해서는 그 전에 많은 테스트들이 이루어져야 한다.

3-1) CI/CD의 장점

CI(Continuous Integration)

  • 코드 검증에 들어가는 시간이 줄어든다.
  • 개발 편의성이 증가한다.
  • 항상 테스트 코드를 통과한 코드만이 레포지토리에 올라오기 때문에, 좋은 코드의 퀄리티를 유지할 수 있다.

CD(Continuous Delivery)

  • 개발자들이 배포보단 개발에 더 신경쓸수 있도록 해준다
  • 원클릭으로 코드 수 작업 없이 빌드, 테스트, 배포까지의 자동화를 할 수 있다.

Summary

  • 개발자의 업무에는 실제 코딩 외에도 다양한 테스트와 배포등 여러 외적인 업무가 존재한다.
  • 테스트와 배포 작업은 실제 코딩보다도 많은 시간과 공수가 들어가고, 개발자들의 생산성을 저하시키는 문제가 있다.
  • 개발에 더 집중할 수 있도록, 테스트와 배포등 개발 외의 작업들은 모두 자동화를 시켜서 개발자의 생산성을 높여주는게 바로 CI/CD 시스템 이다.
  • CICD 시스템을 통해 더 자주 그리고 더 빠르게 배포를 할 수 있게 되었고, 많게는 하루에 여러번 이상의 배포도 가능하다.

Reference

profile
안녕하세요 Junior UIUX Designer 준비생 입니다 😊

0개의 댓글