2024년 8월 25일 일요일

CI/CD

CI/CD란 무엇인가?

  • CIContinuous Integration (지속적 통합) : 지속적으로 퀄리티 컨트롤을 적용하는 프로세스를 실행하는 것.
  • CDContinuous Delivery (지속적 배포) : 팀이 짧은 주기로 소프트웨어를 개발하는 소프트웨어 공학적 접근의 하나로, 소프트웨어가 언제든지 신뢰 가능한 수준으로 출시될 수 있도록 보증하기 위한 것.

출처 - Wikipedia

Image from Devops Explained

  • CI/CD는 개발하는 과정(프로세스)에 밀접한 관련이 있습니다. 서비스를 개발하는 일은 단순히 코딩으로만 끝나는 것이 아닙니다.
  • 개발부터 운영이 끝없이 반복되는 위 그림과 같은 형태를 띕니다.
    • 흔히 말하는 개발 프로세스는 Dev에 해당하는 프로세스들이고, 릴리즈부터 배포, 모니터링까지 이르기를 운영(Ops)에 해당하는 프로세스입니다.
  • 그렇다면 CI/CD와 이것이 무슨 상관인지 하나씩 알아보겠습니다.

CI란?

CI지속적 통합지속적으로 퀄리티 컨트롤을 적용하는 프로세스를 실행하는 것이라고 정의가 쓰여있습니다. 애플리케이션에 대한 새로운 코드 변경 사항이 정기적으로 빌드테스트되어서 하나의 레포지토리로 관리되는 것을 의미합니다.

  • SCMSource Code Management의 과정도 CI에 속합니다.
    • Git을 사용해 Github 레포 하나로 여러명의 개발자가 소스코드를 올리고 충돌을 처리하는 모든 과정도 CI에 속합니다.
    • Git이 아닌 SVN도 마찬가지입니다.
  • 빌드 후 작성된 테스트 코드를 통해 유효성을 검증하는 것도 CI에 속합니다.
    • 아주 간단한 예시로 Pull Request를 생성했을 때, 소스코드가 Conflict나는 경우 Merge 버튼이 비활성화 되는 경험을 해보셨을 겁니다. 그것 또한 유효성 검사에서 실패한 것으로 CI에 속합니다.
    • 더 나아가, CI 툴을 사용해 소스코드가 컨벤션에 준수하는지 등을 체크하는 린터linter로 검증을 하도록 할 수 있는 등 다양한 일이 가능합니다.

CI를 하면 뭐가 좋은가요?

  • 지속적 통합을 하게되면 소스코드는 항상 Ready-to-run 상태(배포가 가능한 상태는 아닙니다.)가 됩니다. 즉, 중간에 누군가 합류를 해도 빌드가 되는 코드를 받을 수 있습니다.
    • 혼자서 개발할 때는 이런 문제를 겪어보지 못해서 중요성을 체감하지 못합니다.
    • 하지만, 회사 프로젝트나 오픈소스 프로젝트 등 여러명이서 개발을 하는 상태라면 이 문제는 더욱 중요해집니다.
      • 중간에 합류해서 새로운 기능을 개발하려고 하는데 누군가 작업하고 있는 코드가 아직 공유 레포upstream에 올라가 있어서 빌드가 안된다.
      • 이런 경우가 발생하면 그 사람과 얘기해서 해결하던가, 직접 소스코드를 보고 돌아가도록 디버깅을 하던가 해야합니다. 하지만, 이 자체로도 시간이 소요되므로 생산성이 매우매우 떨어지게 됩니다.
    • 게다가, 특정한 날을 정해서 각자 개발한 소스코드를 병합하도록 하게되면 그에 따르는 많은 시간을 소모하게 됩니다.
      • 만약, 기존 코드와 Merge한 코드가 에러가 난다면 이를 처리하는 과정에도 많은 시간이 소요될 것입니다.
  • 항상 양질의 코드 퀄리티를 유지할 수 있습니다.
    • 테스트의 자동화를 이루게되면 항상 테스트 코드를 통과하는 코드만 공유 레포에 올라갈 수 있기 때문에 상당한 퀄리티의 소스코드로 유지되게 됩니다.

CD란?

CD는 지속적 제공Continuous Delivery과 지속적 배포Continuous Deployment를 모두 의미합니다.

  • 지속적 제공Continuous Delivery : CI 과정이 모두 끝난 뒤 유효성 검증이 된 코드를 레포지토리에 올리는 것을 자동화합니다. (프로덕션 레벨로 배포하는 것과는 별개입니다.)
    • 항상 프로덕션 레벨로 배포할 수 있는 준비가 되어있는 소스코드를 자동으로 올라갈 수 있도록 합니다.
  • 지속적 배포Continuous Deployment : CI/CD 과정의 마지막 단계입니다. 지속적 제공을 통해 배포 가능한 소스코드를 프로덕션 레벨로 릴리즈하는 것을 의미합니다.

실제 사례에서 지속적 배포는 개발자가 애플리케이션을 수정한 뒤 몇 분 이내에 애플리케이션을 자동으로 실행할 수 있는 것을 의미합니다.

CD를 하면 뭐가 좋은가요?

  • 개발부터 배포까지 과정이 번거롭지 않고 간소화 되기 때문에 사용자 피드백을 빠르게 반영할 수 있습니다.
    • 장애 대응이 빨라집니다. 릴리즈를 했는데 굉장히 크리티컬한 이슈가 발견되었을 때, 개발부터 배포까지의 과정이 복잡하면 반영에 오래걸리게 됩니다.
  • 만약, 로드밸런서로 수십대의 서버를 동시에 운용한다면?
    • 자동화를 하지않으면 직접 서버에 들어가서 일일이 실행해야하기 때문에 하루종일 배포를 할 수도 있습니다.
CI/CD를 가능하게 해주는 툴

CI/CD를 제공하는 툴은 상당히 많습니다. 그 중에서 유명한 것 약 3개 정도를 비교해보겠습니다.

툴별로 이름, 가격, 특징에 근거한 내용을 정리함

Jenkins

무료 오픈소스지만
직접 설치해서 서버를 운용해야함.
설치가 어려움
자바 분야 CI/CD로 뿌리가 깊다.
다양한 플러그인 제공
파이프라인 구성 자유도 매우 높음

Circle CI

무료 플랜은 동시에 Job 1개만 돌 수 있음.
(게다가, 크레딧은 1주당 2500)
Perfomance 플랜은 한달에 30$
기업용은 꽤 비싸다
Docker-Compose를 사용 가능
무료 플랜에서는 도커 레이어 캐싱 불가

Travis CI

오픈소스(Public Repo)는 무료
기업용은 꽤 비싼편
심지어 취미용도 비싸다
Github 의존도가 높음
빌드 매트릭스 제공
(여러 버전으로 빌드를 해야할 때 이를 지원함.)

  • 이외에도 TeamCity 등 많은 CI/CD 툴이 있으므로 알아보고, 여건에 맞게 골라서 사용하시면 됩니다.
  • 이번 프로젝트에서는 Circle CI를 통해 자동화를 했습니다. Circle CI로 자동화하는 과정에 대한 자세한 설명은 다음 포스팅에 이어서 작성하겠습니다

출처: https://minz.dev/18 [MinJunKweon 개발 블로그] 

댓글 없음:

댓글 쓰기

태그

2025년 가열재생방식 가치기반 가치기반학습 가치이터레이션 강화학습 강화학습기초이론 강화학습방법 강화학습종류 개나리 개념 개발업무 최적화 건강 건식전극코팅 검사 검사기 검사장비 검사장비 양산라인 투입 절차 검색엔진최적화 검색키워드 검출율 경쟁력 경험재플레이 고체전해질적용 공부방법 공정간 에너지 흐름 공정내 에너지 절감 기술 과검율 관절 구글검색키워드 군마트 극초박형 셀제조 기계학습 기내반입 기대값 기초용어 나스닥 남녀사랑 냉각시스템 네이버 네이버 검색 키워드 분석 단백질 답변거부능력 더 원씽 덕담 동적계획법 듀얼브레인 드로스 딥시크 레이저노칭 문제점 로봇산업 롤투롤 생산공정 리액트히터 리튬산업 마르코프과정 마르코프의사결정 막걸리 말을 잘하는 방법 멀티 스텝 모델링 메모리 메인내용 메주콩 메주콩파종 멧돌호박 모델기반학습 모델종류 모델프리학습 모듈 모바일 몬테카를로 방법 몬테카를로방법 물류 및 공급망 최적화 물성의 성질 미국 오하이오 미국주가 미국주식 미래기술전망 미래전망 미세플라스틱 미중경쟁 밀도범함수이론 반도체 가격 상승 반사율 방수 배터리 배터리 주요불량 배터리공정 배터리기술 배터리불량 배터리소재 배터리신뢰성 배터리와인공지능 배터리정책 배터리제조 배터리제조신기술 백주 뱀때 버거체인 벨만방정식 병역명문가 보조배터리 보조배터리 기내반입 분석솔루션 불량원인분석 비례적분미분제어 비전 비지도학습 사랑 삼성반도체 새피해 새해인사 새해인사말 생각정리 생각정리기술 생마늘 생산계획 생수 생수페트병 설계최적화 설날인사말 설비고장예측 성심당 성심당온라인 구매 성심당추천빵 셀 스웰링 셀스웰링 셀투팩 소매업 소재개발 소프트뱅크 쇠뜨기 수명예측 수요예측 스마트팩토리 스웰링불량 시간차학습 시계열분석 시뮬레이션 신뢰성 액터-크리틱 양배추 양자컴퓨터 어텐션 어텐션메커니즘 에너지 절감 에너지 절감방법 에너지사용최적화 에너지절감 에너지절감방안 에어드라이어 에피소드 기반 학습 엘지전자 영어 영어 리스닝 예제 오버행불량 오버행불량원인 오프폴리시 온누리상품권 온폴리시 용접 워런버핏 원달러 변화패턴 원달러 환율전망 원엔환율 원인 원자간 상호작용 학습 및 예측 웬디스버거 을사 인간피드백을 통한 강화학습 인공지능 인공지능경쟁 인생 일본금리 일본환율 자발적DR 자이가르닉 효과 장마 재고관리 재생시스템 재활용소재활용 저전압 저축 전자분포 전자의 움직임 전자의분포 전자의움직임 전통시장통통 정식방법 정책기반 정책기반 이터레이션 정책기반학습 정책이터레이션 제사상 제습공조설비 제습효율 제조업 제조에너지절감 제품개발 젠슨황 조합최적화 주식 중국공급과잉 중요샘플링 지도학습 지도학습미세조정 지붕방수 지수평활법 창신메모리테크놀로지 책줄거리 청주 최신배터리기술 최신이슈 최적제어 추정 추천빵 코스모스 콜드 스타트 키워드 분석 탁주 통계적 방법 투자 투자가 투자철학 트럼프2.0 트루시니스 파종 패키징공정 페트병 페트병두께 푸른뱀때 품질관리 피엑스 필요기술 필요지식 하이닉스 학습항목 한국반도체 행복 행위적인공지능 현대차 화합물 물성 확률 효능 효율적인 업무방법 휴머노이드로봇 흡착식 에너 드라이어 흡착식에어드라이어 흡착제 힘의교환 Actor Actor-Critic 강화학습 Actor-Critic학습 Agentic AI AI AI기반품질관리 Air Dryer ARIMA AS재고관리 Attention Attention Algorithm Battery Manufacturing Battery Manufaturing Battery Material Books Books for Beginners to Learn About LLM CATL Cell to Pack confusion matrix Critic CTC CTP CXMT DDR5 Deep Learning Deep Seek DeepSeek Demand Response DFT DIO Double DQN DP DPO DQN Dross DSO Dueling DQN dumplings Dynamic Programming ESS ESS솔루션 EV FFC FFC체결여부 검사 garlic genesis Gongi Graph Enhanced RAG Health Horsetail Hot Areas how to speak well Human Feedback importance sampling Kitchen hoods Korean dumplings Korean Rice Cake Soup Korean Traditional Game Large Language Models LLM LSTM Machine Learning Interatomic Potential Mandy Material Development MDP MLIP MMFF94 Multi-step Modeling New Battery Materials NMP Recovery Nuts PCU Physical AI PID제어 ppm PPO Pre Cooling Unit pre training Precooling Unit Prophet Protein Q-Learning Quality Inspection Data Quality Management RAG Raw Garlic RCU React Heater REINFORCE REINFORCE학습 Reinforcement Learning Reliability Return cooling Unit RL RLHF RORL RUL방법 SARIMA SARSA SCM SCM 핵심 재무 지표 SEO SFT SHAP SHAP로직 small kitchen hoods squd Squid Game Stacking TD학습 Temporal Difference Tener Stack Time Difference Learning truthiness Ttakji Tteokguk VAR ventilations for small spaces Vision Water Z-Stacking