코드 베이스

Codebase

소프트웨어 개발에서 코드베이스(또는 코드베이스)는 특정 소프트웨어 시스템, 응용 프로그램 또는 소프트웨어 컴포넌트를 구축하는 데 사용되는 소스 코드의 집합입니다.일반적으로 코드베이스에는 인간이 작성한 소스 코드 파일만 포함됩니다.따라서 코드베이스에는 도구(생성된 파일) 또는 이진 라이브러리 파일(객체 파일)에 의해 생성된 소스 코드 파일은 포함되지 않습니다.이는 인간이 작성한 소스 코드로 빌드할 수 있기 때문입니다.그러나 구성 및 속성 파일은 빌드에 필요한 데이터이므로 일반적으로 포함됩니다.

코드베이스는 통상 버전 제어 시스템의 소스 제어 저장소에 격납된다.소규모 프로젝트에서는 단순한 파일 세트로 유지할 수 있습니다(Linux 커널도 수년 [1]동안 파일 세트로 유지되었습니다).소스 코드 저장소는 공개 또는 비공개로 대량의 소스 코드를 보관하는 장소입니다.소스 코드 저장소는 기본적으로 백업 및 버전 관리 및 멀티 개발자 프로젝트에서 다양한 소스 코드 버전을 처리하고 개발자가 중복되는 수정을 제출함으로써 발생하는 충돌을 해결하기 위해 사용됩니다.서브버전, GitMercurial은 오픈소스 프로젝트에서 흔히 볼 수 있는 이 워크플로우를 처리하기 위해 사용되는 인기 있는 도구의 예입니다.

고유하고 획일적인 코드베이스

여러 프로젝트에서 개별 코드베이스를 사용하거나 단일 공유 코드베이스 또는 단일 코드베이스를 사용할 수 있습니다.특히 같은 회사 내에서 개발된 프로젝트 등 관련 프로젝트의 경우에는 더욱 그렇습니다.보다 자세한 것은, 모노리식 코드 베이스에는, 통상, 단일의 저장소(모든 코드를 1개의 장소에 보관)가 포함되어 공통의 빌드 시스템이나 공통 라이브러리가 포함되어 있는 것입니다.코드베이스가 공유되는지 분할되는지는 시스템아키텍처와 실제 빌드 결과에 따라 달라지지 않습니다.따라서 실제 개발과 관련된 모노리식 코드베이스에는 소프트웨어 아키텍처 또는 단일 모노리식 바이너리가 관련된 모노리식 시스템이 포함되어 있지 않습니다.그 결과 단일 코드베이스는 단일 시스템이나 단일 바이너리만 전송하는 것이 아니라 개별 컴포넌트로 구성되는 경우가 많습니다.또한 분산 코드베이스(복수의 컴포넌트 포함)를 사용하여 단일 모노리식 시스템 또는 단일 바이너리를 구축할 수도 있습니다.예를 들어 Linux 커널은 구조적으로는 단일 단일 단일 커널이지만 개별 이진(로드 가능한 구성 요소)으로 구성되며 여러 분산 저장소에서 개발됩니다.

분산형 [2][3]코드베이스와 비교할 때 모노리식 코드베이스에는 장점과 단점이 모두 있습니다.가장 간단히 말하면, 단일 코드 기반은 통합을 단순화합니다. 즉, 서로 다른 컴포넌트에 대한 변경이나 컴포넌트 간의 코드 리팩터링을 쉽고 원폭적으로 수행할 수 있습니다.또한 전체 코드 기반에 걸쳐 작업을 수행할 수 있지만 대규모 저장소가 필요하며 광범위한 기술 [dubious ]부채를 쉽게 도입할 수 있습니다.개별 코드베이스 또는 분산 코드베이스는 개별 저장소를 더 작고 관리하기 쉽게 유지하여 컴포넌트 간에 동시에 분리해야 하지만 코드베이스([4]또는 메인 저장소) 간의 통합이 필요하며 여러 코드베이스에 걸친 변경이 복잡해집니다.

표준의 관점에서 보면, 복수의 코드베이스를 「구분」이라고 하는 것은, 공유 소스 코드가 없는 독립된 실장이 존재해, 역사적으로 이러한 실장은 공통의 프로젝트에서 진화한 것이 아님을 나타냅니다.이는 특정 [dubious ]표준을 구현하는 두 개의 독립된 소프트웨어를 보여줌으로써 상호 운용성을 입증하는 방법이 될 수 있습니다.

다음과 같은 대규모 코드베이스가 있습니다.

  • Google: 모노리식, 10억 개의 파일, 900만 개의 소스 코드 파일, 20억 줄의 소스 코드, 총 3,500만 개의 커밋, 86 TB (2015년 [5]1월)
  • Facebook: 일체형, 8GB(이력 포함 54GB, 2014),[6] 수십만 개의 파일(2014년)[3]
  • Linux 커널:[7] 1,500만 줄 이상의 코드 분산(2013년 및 커널 버전 3.10 기준)

「 」를 참조해 주세요.

레퍼런스

  1. ^ "A Short History of Git". git-scm.com. Retrieved October 21, 2014.
  2. ^ J. David Morgenthaler; Misha Gridnev; Raluca Sauciuc & Sanjay Bhansali (2012). "Searching for Build Debt: Experiences Managing Technical Debt at Google". Proceedings of the Third International Workshop on Managing Technical Debt. IEEE. pp. 1–6, (PDF). {{cite conference}}:외부 링크 postscript=(도움말)CS1 유지보수: 포스트스크립트(링크)
  3. ^ a b "Scaling Mercurial at Facebook". Facebook Code. 2014-01-07. Retrieved 29 April 2016.
  4. ^ "Git - Distributed Workflows". git-scm.com. Retrieved 29 April 2016.
  5. ^ Potvin, Rachel; Levenberg, Josh (24 June 2016). "Why Google stores billions of lines of code in a single repository". Communications of the ACM. 59 (7): 78–87. doi:10.1145/2854146.
  6. ^ @feross (April 24, 2014). "Facebook's git repo is 54 GB" (Tweet). Retrieved 29 April 2016 – via Twitter.
  7. ^ Sproull, Lee; Moon, Jae Yun (2000-11-05). "Essence of distributed work: The case of the Linux kernel - Moon - First Monday". First Monday. 5 (11). Retrieved 29 April 2016.