ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • CI/CD 정리 1편 - CI/CD의 필요성(이론)
    백엔드 공부 2024. 1. 28. 11:14

     

     

     

    처음에 CICD 에 대한 플로우를 이해하기가 어려웠지만

     

    직접 해보면서 조금씩 이해가 가기 시작했고  

    이 글을 읽고 조금이나마 도움이 되길 바라면서 글을 써본다.

     


     

     

    우리 프로젝트에서 진행했고, 직접 만든 CI CD 플로우다.

     

    CI CD과정에서 쓰는 기술이 팀마다 모두 다르기도 하지만,

     

    플로우를 나타내는 방식이 정해져있지 않아서 설령 같은 기술을 쓰더라도 다르게 표현 되는 것 때문에

     

    다른 팀들의 플로우를 이해하기 조금 어려웠다.

     

     

    나는 CI과정과 CD 과정을 나눠서 설명할 것인데, 이 두 과정이 왜 필요한지에 대해 먼저 정리하고자 한다.

     


    CI ( Continuous Integration ) 가 필요한 이유

     

     

     

    개발을 할 때 우리는  일의 효율성을 위해  (git기준으로) branch 를 나눠서 작업하게 된다.

     

    그렇게 분업을 하고 나서, 분업한 것을 다시 하나로 뭉쳐야하는데 

     

    각자 branch 에서 분업한 것을 하나로 뭉치면 충돌이 엄청나게 많이 일어난다.

     

    그래서 분업한 것을 병합할 때(merge)는 build 과정과 test 코드를 실행시켜서 과연 병합을 해도 되는지 검증이 필요하다.

     

    그런데 이 과정들을 개발자가 기능 개발하고나서  병합할 때마다 언제 다 하고 있느냐

     

    그래서 이 과정을 자동화 시켜주는 것을 CI(지속적인 통합) 라고 한다

     

     

     

     

    CI 파이프라인을 보면

     

    우리는 코드를 작성해서 깃헙에 push(pr)를 해주면 

     

    build와 test과정은 CI 도구 중 하나인 github actions 가 진행시켜 준다.

     

    저 과정을 통과하지 못한다면 병합에 실패하게 만들어서

     

    통합본 데이터는 안정적인 상태를 유지할 수 있다. 

     

    만약 성공적으로 실행된다면 이후 CD 과정으로 넘어갈 수 있다.


    CD ( Continuous Delivery , Continuous Deployment) 가 필요한 이유

     

    우리가 개발을 하는 최종적인 목표는 바로

     

    애플리케이션을 누구나 사용할 수 있게 만드는 것인데, 그러려면 실제 서버에 '배포'하는 과정이 필요하다.

     

    앞서 CI 과정을 통해 통합된 파일이 있다면 이제 그 파일을 

     

    ec2와 같은 실제 서버에 배포를 해야한다.

     

    CD 과정은 이제는 그 배포 자동화 작업을 하는 것이다.

     

     

     

    CD 를 Continuous Delivery , Continuous Deployment 각각 나눠서 부르는 사람들도 있고, 딱히 나누지않고 하나로만 부르는 사람들도 있는 것 같다. 

     

    Continuous Delivery는 자동으로 레포지토리까지 (위 그림에서 Docker Hub) 전달하고 서버에 배포는 수동으로,

     

    Continuous Deployment는 자동으로 서버(ec2)에 배포하는 것을 의미한다.

     


     

     

    간단하게나마 CI/CD가 왜 필요하고  어떤 flow로 되어있는지 살펴보았다.

     

    다음 포스팅에선 실제로 CI/CD가 각각 어떻게 동작하도록 스크립트들이 작성되어있나 살펴볼 예정이다!

     

     


     

    Reference

     

    https://katalon.com/resources-center/blog/continuous-delivery-vs-continuous-deployment

    https://github.com/smRt-Egg/BE-05-smRt-store

     

Designed by Tistory.