CI/CD AWS Code Series

Gyuri hwang·2024년 5월 6일
0

CI

= Continuous Integration 지속적 통합
: 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트되어 공유 소스 레포지토리에 통합되는 것

→ 빌드 / 테스트 자동화 과정

핵심 목표

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

CI가 필요한 이유

  • CI를 성공적으로 구현할 경우, 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트되어 공유 레포지토리에 통합되므로 여러 명의 개발자가 동시에 어플리케이션 개발과 관련된 코드 작업을 할 경우 서로 충돌할 수 있는 문제를 해결할 수 있음

  • 이전에는 팀의 개발자가 장기간 격리된 상태로 작업하고, 작업이 완료된 후에야 변경 사항을 마스터 브랜치에 병합 → 병합 코드가 어렵고 시간 소모적, 수정 없이 오랫동안 버그가 축적됨

CI가 필요한 환경

  1. 다수의 개발자가 형상관리 툴을 공유하여 사용하는 환경
    형상관리: 소프트웨어 개발 프로세스 각 단계에서 소프트웨어 변경 사항을 체계적으로 추적하고 관리
    형상관리 툴로는 Git, SVN 등이 있음

    지속적으로 서비스해야 하는 어플리케이션이나 현재 개발 중인 어플리케이션에서, 기능을 추가할 때마다 commit 등을 날려 레포지토리에 버전 업데이트
    → 기능별로 빌드/테스트/병합(Merge)을 자동화해 원천 소스코드의 충돌 등을 방어

  2. MSA(Micro Service Archietecture) 환경
    MSA: 작은 기능별로 서비스를 잘게 쪼개어 개발하는 형태. 대부분 Agile 방법론이 적용되기 때문에, 기능 추가가 빈번하게 발생, 긴밀한 동작 테스트의 중요성
    Agile 방법론: 작업 계획을 짧은 단위로 세우고 제품을 만들고 고쳐나가는 사이클을 반복함으로써 고객의 요구 변화에 유연하고도 신속하게 대응하는 개발 방법론

→ CI의 적용으로 기능 충돌 방지 등의 Benefit 제공

CI의 이점

  1. 개발자 생산성 향상
  2. 버그를 더 빠르게 발견 & 해결 가능
  3. 업데이트를 더 빠르게 제공

CD

= Continuous Delivery 지속적 전달
: 개발자의 변경사항이 레포지토리를 넘어 고객의 프로덕션 환경까지 릴리즈되는 것

CD는 Continous Delivery와 Continuous Deployment 두 용어 모두의 축약어이다!

  • Continuous Delivery 지속적 전달
    : CI에서 빌드와 단위 및 통합 테스트를 자동화한 다음 검증된 코드를 레포지토리로 릴리즈하는 것을 자동화 (실제 프로덕션 환경에 배포하기 전까지)
    : 최종 배포는 수동으로 진행
  • Continuous Deployment 지속적 개발
    : 모든 과정을 자동화하며, 테스트가 통과되면 코드 변경사항이 자동으로 프로덕션 환경에 배포되어 고객이 사용할 수 있도록 함

DevOps

=Development Operations
: 소프트웨어 개발과 운영을 통합하여 효율성, 협력, 속도, 안정성을 개선하는 개발 및 운영 방법론

기존의 소프트웨어 개발 및 인프라 관리 프로세스를 사용하는 조직보다 제품을 더 빠르게 혁신하고 개선할 수 있음

Hands-on 정리

AWS CodePipeline을 이용한 CI/CD

  1. 프로젝트 세팅 및 배포 관련 코드 작성
    Django를 이용한 프로젝트 세팅을 github에 포크

  2. AWS EC2 인스턴스 생성

  • AMI → Ubuntu
  • 키 페어 생성 → 유형: RSA

저장한 위치 기억!

  1. 파일 준비
  2. IAM 역할 생성
  3. EC2 설정
    포트 8000을 허용하도록 EC2에 연결된 보안 그룹을 수정
  4. AWS Code Deply 구성
    깃허브와 연결 생성!
  5. AWS CodePipeline 구성

0개의 댓글