Post

오토에버 클라우드 2기 51일차

오토에버 클라우드 2기 51일차

1. CI/CD: 개발 및 배포 자동화

CI/CD는 지속적인 통합(Continuous Integration), 지속적인 서비스 제공(Continuous Delivery), 지속적인 배포(Continuous Deployment)의 합성어임

애플리케이션 개발 단계를 자동화하여, 보다 짧은 주기로 고객에게 새로운 기능을 제공하는 것이 핵심 목적 여러 개발자가 동시에 작업할 때 발생하는 코드 충돌 및 통합 문제(Integration Hell)를 해결하기 위한 개발 문화이자 방법론임

지속적인 통합 (CI, Continuous Integration)

개발팀이 작성한 코드를 주기적으로 버전 제어 레포지토리에 통합(Merge)하고, 이 과정을 자동으로 테스트하여 소프트웨어의 품질을 관리하는 것

  • 기술 목표: 애플리케이션을 빌드, 패키징, 테스트하는 과정을 일관되고 자동화된 방식으로 구축하는 것
  • 기대 효과: 코드 변경 사항을 자주 통합함으로써, 여러 개발자 간의 협업을 원활하게 하고 소프트웨어의 품질을 조기에 향상시킴
  • CI 프로세스 흐름:
    1. 코딩(Coding): 개발자가 기능 구현.
    2. 병합(Merge): 작성한 코드를 중앙 레포지토리에 병합.
    3. 빌드(Build): 코드를 실행 가능한 파일로 빌드.
    4. 테스트(Test): 자동화된 테스트를 통해 코드의 결함 검증.
    5. 리포트(Report): 빌드 및 테스트 결과를 개발팀에 보고.
    6. 릴리스(Release): 성공적으로 통합된 버전을 릴리스 가능한 상태로 준비.

지속적인 제공(CD, Continuous Delivery) & 지속적인 배포(CD, Continuous Deployment)

  • 지속적인 제공 (Continuous Delivery) CI 단계를 통과한 코드 변경 사항이 버그 테스트까지 자동으로 완료되어, 언제든지 배포 가능한 상태로 레포지토리에 자동으로 업로드되는 것 실제 운영 환경으로의 배포는 운영팀의 수동 승인을 통해 이루어짐. 개발팀과 운영팀 간의 가시성과 커뮤니케이션 부족 문제를 해결하는 데 중점을 둠
  • 지속적인 배포 (Continuous Deployment) 지속적인 제공에서 한 단계 더 나아간 개념. 레포지토리에 업로드된 변경 사항이 고객이 사용하는 실제 운영 환경까지 자동으로 릴리스되는 과정 파이프라인의 모든 단계가 자동화되어, 개발자의 코드가 별도의 승인 없이 바로 사용자에게 전달됨

 

2. 버전 관리 시스템 (VCS, Version Control System)

파일의 변경 사항을 시간에 따라 기록하여, 과거 특정 시점의 버전으로 다시 되돌릴 수 있게 해주는 시스템. 형상 관리(Configuration Management)라고도 불리며, 모든 변경 이력을 추적하고 관리함

  • 주요 기능:
    • 개별 파일이나 프로젝트 전체를 이전 상태로 복구 가능.
    • 시간에 따른 변경 사항 검토.
    • 특정 변경 사항을 누가, 언제, 왜 만들었는지 추적.
    • 여러 개발자 간의 협업을 원활하게 지원.

종류

  • 로컬 버전 관리 시스템 (LVCS) 사용자의 로컬 컴퓨터에 있는 간단한 데이터베이스에 변경 이력(Patch Set)을 저장하는 방식. 다른 개발자와의 협업이 어려움 (예: RCS)
  • 중앙 집중식 버전 관리 시스템 (CVCS) 모든 파일과 변경 이력을 관리하는 하나의 중앙 서버와, 이 서버에서 파일을 가져와(Checkout) 작업하는 다수의 클라이언트로 구성된 모델
    • 장점: 모든 개발자가 프로젝트의 전체 상황을 쉽게 파악할 수 있음
    • 단점: 중앙 서버에 장애가 발생하면 모든 작업이 중단되고, 최악의 경우 프로젝트의 모든 이력을 잃을 수 있음
    • (예: Subversion(SVN), CVS)
  • 분산 버전 관리 시스템 (DVCS) 클라이언트가 단순히 파일의 마지막 스냅샷만 가져오는 것이 아니라, 저장소 전체를 통째로 복제하는 방식
    • 장점:
      • 서버에 문제가 생겨도, 어느 클라이언트의 로컬 저장소를 복사하면 서버가 즉시 복구됨 (강력한 백업)
      • 오프라인 상태에서도 커밋 등 대부분의 작업이 가능
      • 다수의 원격 저장소를 가질 수 있어, 유연하고 다양한 협업 방식(Workflow)이 가능
    • (예: Git, Mercurial)

 

3. Git: 가장 널리 쓰이는 분산 버전 관리 시스템

Git 생태계

  • Git: 2005년 리누스 토발즈가 개발한 분산 버전 관리 시스템 그 자체. 텍스트 명령어 기반으로 동작.
  • GitHub: Git을 사용하는 프로젝트들을 위한 원격 저장소 호스팅 서비스. GUI, 이슈 트래커, 프로젝트 관리, CI/CD(GitHub Actions) 등 다양한 협업 기능을 제공. 가장 대중적인 서비스.
  • GitLab: GitHub와 유사한 서비스. 비공개 저장소를 무제한으로 생성할 수 있고, 강력한 CI/CD 기능과 이슈 트래커를 내장하고 있어 기업 환경에서 많이 사용됨. 설치형(On-Premise) 버전도 제공.

 

3가지 작업 영역

  1. Working Directory (작업 디렉토리): 실제 파일들이 위치하는 프로젝트 폴더 사용자가 코드를 수정하고 파일을 생성하는 공간
  2. Staging Area (스테이징 영역 또는 Index): 커밋할 변경 사항들이 대기하는 임시 저장 공간 작업 디렉토리의 수많은 변경 사항 중, 이번 커밋에 포함할 내용만 선별하여 추가하는 곳
  3. Local Repository (로컬 저장소, .git 디렉토리): 프로젝트의 모든 변경 이력(커밋)이 저장되는 데이터베이스 .git 폴더에 모든 정보가 압축되어 저장됨
This post is licensed under CC BY 4.0 by the author.