2장. 진실의 시스템
이 작품은 AI를 사용하여 번역되었습니다. 여러분의 피드백과 의견을 환영합니다: translation-feedback@oreilly.com
작동하는 복잡한 시스템은 항상 작동하는 단순한 시스템에서 진화한 것으로 밝혀집니다.
존 갈(갈의 법칙)
효과적인 DevOps 파이프라인을 갖추려면 프로덕션에 배포되는 비트와 바이트를 파악할 수 있는 단일 진실 시스템을 갖추는 것이 중요합니다. 일반적으로 이는 프로덕션 배포에 컴파일 및 빌드되는 모든 소스 코드를 포함하는 소스 코드 관리 시스템에서 시작됩니다. 프로덕션 배포를 소스 제어의 특정 개정으로 역추적하면 버그, 보안 구멍 및 성능 문제에 대한 근본 원인 분석을 수행할 수 있습니다.
소스 코드 관리는 소프트웨어 배포 수명 주기에서 몇 가지 주요 역할을 해결합니다:
- 협업
-
단일 코드베이스( )에서 작업하는 대규모 팀들은 효과적인 소스 코드 관리가 없으면 서로 막혀서 팀 규모가 커질수록 생산성이 떨어집니다.
- 버전 관리
-
소스 코드 시스템을 사용하면 코드의 버전 을 추적하여 프로덕션에 배포되거나 고객에게 릴리스되는 내용을 식별할 수 있습니다.
- 역사
-
소프트웨어가 개발될 때 모든 버전 의 시간순 기록을 유지하면 이전 버전의 코드로 되돌리거나 회귀를 유발한 특정 변경 사항을 식별할 수 있습니다.
- 어트리뷰션
-
특정 파일을 변경한 사람을 알면 소유권을 파악하고, 도메인 전문성을 평가하고, 변경 시 위험을 평가할 수 있습니다.
- 종속성
-
소스 코드는 다른 패키지에 대한 종속성 등 프로젝트에 대한 기타 주요 메타데이터의 표준 소스( )가 되었습니다.
- 품질
-
소스 코드 관리 시스템을 사용하면 변경 사항을 승인하기 전에 동료 검토를 쉽게 수행할 수 있어 소프트웨어의 전반적인 품질이 향상됩니다.
소스 코드 관리는 소프트웨어 개발에서 매우 중요한 역할을 하므로, 그 작동 방식을 이해하고 조직의 요구와 원하는 DevOps 워크플로우에 가장 적합한 시스템을 선택하는 것이 중요합니다.
3세대에 걸친 소스 코드 관리
협업은 소프트웨어 개발에서 큰 부분을 차지하며, 팀 규모가 커질수록 공유 코드베이스에서 효과적으로 협업하는 기능이 개발자 생산성의 병목이 되는 경우가 많습니다. 또한 시스템의 복잡성이 증가함에 따라 수십 개의 파일이나 소수의 모듈을 관리하는 것이 아니라 시스템 전체의 변경 및 리팩터링을 수행하기 위해 수천 개의 소스 파일을 일괄적으로 업데이트해야 하는 경우가 흔하게 발생하고 있습니다.
코드베이스에 대한 공동 작업의 필요성을 관리하기 위해 SCM( 소스 코드 관리 ) 시스템이 만들어졌습니다. 1세대 SCM 시스템은 파일 잠금을 통해 공동 작업( )을 처리했습니다. 예를 들어 SCCS와 RCS는 편집 전에 파일을 잠그고 변경한 다음 다른 사람이 기여할 수 있도록 잠금을 해제해야 했습니다. 이는 두 개발자가 상충되는 변경을 할 가능성을 없애는 것 같았지만 두 가지 큰 단점이 있습니다:
-
편집하기 전에 다른 개발자가 변경 사항을 완료할 때까지 기다려야 했기 때문에 생산성이 ...