Primrose Docs
  • Home
    • ⛓️Blockchain
      • Avalanche
        • What is AVAX?
      • Ethereum
        • Ethereum Cancun Upgrade Explained(draft)
        • go-ethereum: gas estimate
        • Blockchain Transaction Lifecycle
        • Mempool
        • Gas optimization in Solidity, Ethereum
      • Solidity DeepDive
        • Meta transaction
        • solidity: patterns
        • UUPS vs Transparent
        • Solidity Interface
        • Smart contract storage
        • ERC-2981 Contract
        • Solidity modifier
        • Solidity delete keyword
        • How To Make NFTs with On-Chain Metadata - Hardhat and JavaScript
        • How to Build "Buy Me a Coffee" DeFi dapp
        • How to Develop an NFT Smart Contract (ERC 721) with Alchemy
        • Upgradeable Contract
        • Smart Contract Verification
      • Common
        • Eigenlayer
        • MultiSig(draft)
        • Chain-Based Proof-of- Stake, BFT-Style Proof-of-Stake
        • Byzantine Fault Tolerance
        • Zero-knowledge
        • Hierarchical Deterministic Wallet
        • Maker DAO
        • Defi
        • Uniswap
        • IBC
        • Cosmos
        • Gossip Protocol
        • Tendermint
        • UTXO vs Account
        • Blockchain Layer
        • Consensus Algorithm
        • How does mining work?
        • Immutable Ledger
        • SHA256 Hash
        • Filecoin
        • IPFS - InterPlanetary File System
        • IPFS와 파일코인
        • Livepeer
        • Layer 0
      • Bitcoin
        • BIP for HD Wallet
        • P2WPKH
        • Segwit vs Native Segwit
    • 📖Languages
      • Javascript/Typescript
        • Hoisting
        • This value in Javascript
        • Execution Context
        • About Javscript
        • tsconfig.json
        • Nest js Provider
        • 'return await promise' vs 'return promise'
      • Python
        • Pythonic
        • Python: Iterable, Iterator
        • Uvicorn & Gunicorn
        • WSGI, ASGI
        • Python docstring
        • Decorator in Python
        • Namespace in Python
        • Python Method
      • Go
        • GORM+MySQL Connection Pool
        • Context in golang
        • How to sign Ethereum EIP-1559 transactions using AWS KMS
        • Mongo DB in golang(draft)
        • Golang HTTP Package
        • Panic
        • Golang new/make
        • golang container package
        • errgroup in golang
        • Generic Programming in Golang
        • Goroutine(draft)
    • 📝Database
      • MongoDB in golang
      • Nested loop join, Hash join
      • DB Query plan
      • Index
      • Optimistic Lock Pessimistic Lock
    • 💻Computer Science
      • N+1 query in go
      • Web server 를 구성할 때 Thread, Process 개수를 어떻게 정할 것인가?
      • CAP
      • Socket programming
      • DNS, IP
      • URL, URI
      • TLS과 SSL
      • Caching(draft)
      • Building Microservices: Micro Service 5 Deploy Principle
      • Red Black Tree
      • AOP
      • Distributed Lock
      • VPC
      • Docker
      • All about Session and JWT
      • Closure
      • Singleton Pattern
      • TCP 3 way handshake & 4 way handshake
      • Race Condition
      • Process Address Space 
      • Call by value, Call by reference, Call by assignment
      • Zookeeper, ETCD
      • URL Shortening
      • Raft consensus
      • Sharding, Partitioning
    • 📒ETC
      • K8S SIGTERM
      • SQS
      • Git Branch Strategy: Ship / Show / Ask
      • Kafka
      • Redis Data Types
      • CI/CD
      • How does Google design APIs?
      • Minishell (42 cursus)
      • Coroutine & Subroutine
      • Redis
Powered by GitBook
On this page
  • CI/CD란?
  • Continuous Integration
  • Continuous Delivery
  • Continuous Deploy
  • CI/CD 파이프라인이 중요한 이유
  1. Home
  2. ETC

CI/CD

PreviousRedis Data TypesNextHow does Google design APIs?

Last updated 1 year ago

CI/CD란?

… CI/CD는 단계를 하여 을 더욱 짧은 주기로 고객에게 제공하는 방법입니다. CI/CD의 기본 개념은 지속적인 통합, , 지속적인 배포입니다. CI/CD는 새로운 코드 으로 인해 개발 및 운영팀에 발생하는 문제(일명 "통합 지옥(integration hell)")를 해결하기 위한 솔루션입니다.

특히, CI/CD는 애플리케이션의 통합 및 테스트 단계에서부터 제공 및 에 이르는 전체에 걸쳐 지속적인 자동화와 지속적인 모니터링을 제공합니다. 이러한 구축 사례를 일반적으로 “”이라 부르며, 개발 및 운영팀의 애자일 방식 협력을 통해 또는 방식으로 지원됩니다.

출처 :

위의 Redhat의 정의를 쉽게 풀어서 설명해보면 다음과 같이 설명할 수 있을 것 같다.

CI/CD는 애플리케이션 개발 단계를 자동화하여 더욱 짧은 주기로 고객에게 제공하는 방법.

Continuous Integration

더 자세히 들어가보자. CI는 개발자를 위한 자동화 프로세스인 지속적인 통합을 의미한다.

CI가 제대로 구현되면 애플리케이션 코드의 새로운 변경 사항이 정기적으로 빌드 및 테스트를 거쳐 공유 레포지토리에 병합된다.

따라서 여러 명의 개발자가 동시에 애플리케이션 개발과 관련된 코드 작업을 할 경우 서로 충돌하는 문제를 이 방법으로 해결한다.

  1. 개발자가 구현한 코드를 기존 코드와 병합한다.

  2. 병합된 코드가 올바르게 동작하고 빌드되는지 검증

  3. 테스트 결과 문제가 있다면 수정하고 다시 1로 돌아간다. 문제가 없다면 배포한다.

Continuous Delivery

CD는 지속적인 서비스 제공(Continuous Delivery) 또는 지속적인 배포(Continuous Deploy)를 의미하며 이 두 용어는 상호 교환하여 사용된다.

두 가지 의미 모두 파이프라인의 추가 단계에 대한 자동화를 뜻한다.

때로는 얼마나 많은 자동화가 이루어지고 있는 지를 설명하기 위해 별도로 사용되기도 한다.

지속적인 제공이란 개발자들이 애플리케이션에 적용한 변경 사항이 버그 테스트를 거쳐 레포지토리에 자동으로 업로드 되는 것을 뜻하며, 운영팀 (아마도 Devops)은 이 레포지토리에서 애플리케이션을 실시간 프로덕션 환경으로 배포할 수 있다.

이렇게 되면 개발팀과 비즈니스팀 간의 가시성과 커뮤니케이션 부족 문제를 해결할 수 있다.

그러므로 지속적인 서비스 제공은 최소한의 노력으로 새로운 코드를 배포하는 것을 목표로 한다.

Continuous Deploy

지속적인 배포(또 다른 의미의 CD)란 개발자의 변경 사항을 레포지토리에서 고객이 사용 가능한 프로덕션 환경까지 자동으로 릴리스 하는 것을 의미한다.

이는 애플리케이션 제공 속도를 저해하는 수동 프로세스로 인한 운영팀의 프로세스 과부하 문제를 해결한다.

지속적인 배포는 파이프라인의 다음 단계를 자동화함으로써 Continuous Delivery의 장점을 활용한다.

결과적으로 CI/CD는 파이프라인으로 표현되는 프로세스를 의미하고, 애플리케이션 개발에 지속적인 자동화 및 지속적인 모니터링을 추가하는 것을 의미한다.

CI/CD 파이프라인이 중요한 이유

CI와 CD는 모두 최신 DevOps에 필수적이며 Agile 방법론 지원에 도움이 돤다.

이와 같은 효과적인 CI/CD 파이프라인에는 다음과 같은 장점이 있다.

명확한 프로세스

체계적인 CI/CD 접근 방식은 파이프라인의 각 단계를 명확하게 배치하여 정확히 어떤 작업이 이루어져야 하는지에 대한 상세한 개요를 제공함으로써 구상부터 완료까지 프로젝트의 길잡이가 된다.

높은 품질의 코드

작고 점진적인 변화는 품질과 효과를 보다 쉽게 검토할 수 있다.

마찬가지로, 코드 내에 문제가 발생하면 훨씬 더 명백하게 드러나므로 프로세스 초기에 해결할 수 있다.

따라서 프로젝트 전체에 걸쳐 코드의 품질이 높아진다.

쉬운 액세스

변화가 중앙 리포지토리에 자동으로 저장되므로, 이해 관계자, QA, 기타 권한을 가진 팀과 개인이 최신 버전을 포함한 모든 버전의 제품에 직접 액세스할 수 있다.

신뢰할 수 있는 버전 관리

코드에 관련한 문제를 쉽게 해결할 수 없는 경우에는 이전 버전으로 롤백해야 할 수 있다.

효과적인 버전 관리 관행을 통해 번거로움을 최소화하여 롤백할 수 있다.

빠른 피드백

사용자와 테스트 담당자는 CI/CD 파이프라인을 통해 거의 즉각적인 피드백을 제공하여 개발 팀도 그만큼 즉각적으로 피드백에 대한 조치를 취할 수 있다.

짧은 테스트 주기

기존의 개발에서는 제품 전체에 해당하는 코드를 반복해서 테스트해야 하므로 테스트 사이클이 길고 복잡했다.

CI/CD 파이프라인에서는 코드의 양이 계속해서 감소하고 있어 이러한 문제가 더 이상 발생하지 않는다.

개발 민첩성 향상

개발 팀은 CI/CD 파이프라인을 통해 조직의 요구 사항에 즉각적으로 대응하고 필요한 경우 진행 중인 프로젝트에 대한 조치를 취할 수 있다.

개발 응답성이 향상됨에 따라, 기업은 필요한 시점에 정확히 강력하고 전문적인 소프트웨어 솔루션의 이점을 얻을 수 있다.

📒
애플리케이션 개발
자동화
애플리케이션
지속적인 서비스 제공
통합
배포
애플리케이션의 라이프사이클
CI/CD 파이프라인
DevOps
SRE(사이트 신뢰성 엔지니어링)
Redhat
CI/CD pipeline
Unity-what-is-ci-cd