코드베이스
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
코드베이스는 소프트웨어 프로젝트의 소스 코드 전체를 의미하며, 프로젝트의 규모, 개발 팀의 규모, 기술 스택, 배포 환경 등에 따라 다양한 유형으로 나뉜다. 코드베이스는 크게 단일의 '모놀리식 코드베이스'와 여러 개의 '분산 코드베이스'로 구분될 수 있으며, 각 유형은 통합 용이성, 관리 용이성, 코드 변경의 복잡성 등에서 장단점을 가진다. 구글, 페이스북과 같은 대규모 기업들은 모놀리식 코드베이스를 사용하고, 리눅스 커널과 같은 프로젝트는 분산 코드베이스를 활용하는 사례가 있다.
더 읽어볼만한 페이지
- 버전 관리 - 깃허브
깃허브는 Git 버전 관리 시스템을 기반으로 소프트웨어 개발 협업 기능과 부가 서비스를 제공하는 웹 기반 플랫폼이지만, 여러 논란과 비판도 존재하는 세계 최대의 소프트웨어 개발 플랫폼이다. - 버전 관리 - 스테핑 레벨
- 소스 코드 - 헤더 파일
헤더 파일은 프로그래밍 언어에서 코드 재사용성, 모듈화, 컴파일 시간 단축에 기여하며 함수 프로토타입, 변수 선언 등을 포함하고 `#include` 지시어로 소스 코드에 포함되어 사용되는 파일이다. - 소스 코드 - 헝가리안 표기법
헝가리안 표기법은 변수 이름에 데이터 타입이나 목적을 나타내는 접두사를 붙이는 명명 규칙으로, 찰스 시모니가 고안하여 마이크로소프트에서 널리 사용되었으나, 코드 가독성 향상에 대한 유용성 논란과 함께 최신 IDE 환경에서는 불필요하다는 비판도 있다.
| 코드베이스 | |
|---|---|
| 개요 | |
| 유형 | 소스 코드의 모음 |
| 설명 | 시스템, 애플리케이션 또는 구성 요소를 빌드하는 데 사용되는 소스 코드 모음 |
2. 코드베이스의 유형
코드베이스는 관리 방식에 따라 크게 두 가지 유형으로 나눌 수 있다. 즉, 여러 프로젝트에서 별개의 ''개별 코드베이스''를 가지는 경우와 단일 ''공유'' 또는 모놀리식 코드베이스를 가지는 경우이다. 특히 동일한 회사 내에서 개발된 관련 프로젝트의 경우, 단일 코드베이스를 공유하는 경우가 많다.
모놀리식 코드베이스와 분산 코드베이스는 각각 장단점을 가진다.[2][3] 모놀리식 코드베이스는 통합이 쉽고, 구성 요소 간 변경 및 코드 리팩토링이 용이하며, 전체 코드베이스에 걸친 작업이 가능하다는 장점이 있지만, 저장소 크기가 커지고 기술적 부채가 쌓이기 쉽다는 단점이 있다. 반면 분산 코드베이스는 개별 저장소 관리가 용이하고 구성 요소 간 분리가 강제되지만, 코드베이스 간 통합이 필요하고 여러 코드베이스에 걸친 변경이 복잡하다는 단점이 있다.[4]
표준 측면에서, 여러 코드베이스를 "개별적인" 것으로 언급하는 것은 공유 소스 코드가 없는 독립적인 구현이 있으며, 역사적으로 이러한 구현이 공통 프로젝트에서 발전하지 않았음을 의미한다.
2. 1. 모놀리식 코드베이스
여러 프로젝트는 별개의 코드베이스를 가지거나, 단일 ''공유'' 또는 ''모놀리식 코드베이스''를 가질 수 있다. 특히 동일한 회사 내에서 개발된 관련 프로젝트의 경우에 해당된다. 모놀리식 코드베이스는 일반적으로 단일 저장소(모든 코드가 한 곳에 있음)와 공통 빌드 시스템 또는 공통 라이브러리를 수반한다.모놀리식 코드베이스는 소프트웨어 아키텍처 또는 단일 모놀리식 바이너리와 관련된 모놀리식 시스템을 반드시 수반하지는 않는다. 대신 별도의 구성 요소로 구성될 수 있으며, 분산 코드베이스를 사용하여 단일 모놀리식 시스템 또는 단일 바이너리를 구축할 수도 있다. 예를 들어, 리눅스 커널은 아키텍처적으로 단일 모놀리식 커널이지만, 별도의 바이너리(로드 가능한 구성 요소)로 구성되어 여러 분산 저장소에서 개발된다.
모놀리식 코드베이스는 분산 코드베이스와 비교할 때 다음과 같은 장단점을 갖는다.[2][3]
| 장점 | 단점 |
|---|---|
반면, 별도의 코드베이스 또는 분산 코드베이스는 개별 저장소를 더 작고 관리하기 쉽게 유지하면서 동시에 구성 요소 간의 분리를 강제하지만, 코드베이스 간의 통합(또는 메인 저장소와의 통합)이 필요하며 여러 코드베이스에 걸쳐있는 변경 사항을 복잡하게 만든다.[4]
2. 2. 분산 코드베이스
분산 코드베이스는 코드가 여러 개의 저장소로 분산되어 관리되는 방식이다.분산 코드베이스는 개별 저장소를 더 작고 관리하기 쉽게 유지하면서 동시에 구성 요소 간의 분리를 강제하지만, 코드베이스 간의 통합(또는 메인 저장소와의 통합)이 필요하며 여러 코드베이스에 걸쳐있는 변경 사항을 복잡하게 만든다.[4]
예를 들어, 리눅스 커널은 아키텍처적으로는 단일 모놀리식 커널이지만, 개별 바이너리(로드 가능한 구성 요소)로 구성되어 여러 분산 저장소에서 개발되고 있다.
표준 측면에서, 여러 코드베이스를 "개별적인" 것으로 언급하는 것은 공유 소스 코드가 없는 독립적인 구현이 있으며, 역사적으로 이러한 구현이 공통 프로젝트에서 발전하지 않았음을 선언하는 것이다. 이는 주어진 표준을 구현하는 두 개의 독립적인 소프트웨어 조각을 보여줌으로써 상호 운용성을 입증하는 방법이 될 수 있다.
3. 코드베이스 유형 선택 시 고려 사항
여러 프로젝트는 별개의 ''개별 코드베이스''를 가질 수도 있고, 단일의 ''공유'' 또는 monolithic codebase|모놀리식 코드베이스영어를 가질 수도 있다. 이는 특히 동일한 회사 내에서 개발된 관련 프로젝트의 경우에 해당한다. 모놀리식 코드베이스는 일반적으로 단일 저장소와 공통 빌드 시스템 또는 공통 라이브러리를 수반한다. 코드베이스가 공유되거나 분할되는지는 시스템 아키텍처 및 실제 빌드 결과에 따라 달라지지 않는다.
모놀리식 코드베이스는 분산 코드베이스와 비교할 때 장점과 단점이 모두 있다.[2][3] 모놀리식 코드베이스는 통합을 단순화하고, 서로 다른 구성 요소에 대한 변경 사항 또는 구성 요소 간의 코드 리팩토링을 쉽고 원자적으로 수행할 수 있으며, 전체 코드베이스에서 작업을 허용하지만 더 큰 저장소가 필요하다. 별도의 코드베이스 또는 분산 코드베이스는 개별 저장소를 더 작고 관리하기 쉽게 유지하면서 동시에 구성 요소 간의 분리를 강제하지만, 코드베이스 간의 통합(또는 메인 저장소와의 통합)이 필요하며 여러 코드베이스에 걸쳐있는 변경 사항을 복잡하게 만든다.[4]
표준 측면에서, 여러 코드베이스를 "개별적인" 것으로 언급하는 것은 공유 소스 코드가 없는 독립적인 구현이 있으며, 역사적으로 이러한 구현이 공통 프로젝트에서 발전하지 않았음을 선언하는 것이다.
4. 대표적인 코드베이스 예시
다음은 대규모 코드베이스의 대표적인 예시이다.
| 회사 | 저장소 유형 | 크기 및 기타 정보 |
|---|---|---|
| 구글 | 모놀리식 | 2015년 1월 기준, 86TB. 10억 개의 파일, 900만 개의 소스 코드 파일, 20억 줄의 소스 코드, 총 3,500만 건의 커밋.[5] |
| 페이스북 | 모놀리식 | 2014년 기준, 8GB(히스토리 포함 54GB). 수십만 개의 파일.[6][3] |
| 리눅스 커널 | 분산형[7] | 2013년 기준, 1,500만 줄 이상의 코드. |
4. 1. 구글
구글은 모놀리식 코드베이스를 사용하며, 2015년 1월 기준으로 10억 개의 파일, 900만 개의 소스 코드 파일, 20억 줄의 소스 코드, 총 3,500만 건의 커밋, 총 86TB 크기로 구성되어 있다.[5]4. 2. 페이스북
페이스북은 모놀리식 코드베이스를 사용하며, 2014년 기준으로 8GB(히스토리를 포함한 저장소는 54GB)이고, 수십만 개의 파일로 구성되어 있다.[6][3]4. 3. 리눅스 커널
리눅스 커널은 분산형 코드베이스를 사용하며,[7] 2013년 기준 1,500만 줄 이상의 코드로 구성되어 있다.참조
[1]
웹사이트
A Short History of Git
http://git-scm.com/b[...]
2014-10-21
[2]
conference
Searching for Build Debt: Experiences Managing Technical Debt at Google
http://research.goog[...]
IEEE
[3]
웹사이트
Scaling Mercurial at Facebook
https://code.faceboo[...]
2014-01-07
[4]
웹사이트
Git - Distributed Workflows
http://git-scm.com/b[...]
2016-04-29
[5]
journal
Why Google stores billions of lines of code in a single repository
2016-06-24
[6]
tweet
Facebook's git repo is 54 GB.
2014-04-24
[7]
journal
Essence of distributed work: The case of the Linux kernel - Moon - First Monday
http://www.firstmond[...]
2000-11-05
[8]
웹사이트
A Short History of Git
http://git-scm.com/b[...]
2014-10-21
[9]
conference
Searching for Build Debt: Experiences Managing Technical Debt at Google
http://research.goog[...]
IEEE
[10]
웹사이트
Scaling Mercurial at Facebook
https://code.faceboo[...]
2014-01-07
[11]
웹사이트
Git - Distributed Workflows
http://git-scm.com/b[...]
2016-04-29
[12]
journal
Why Google stores billions of lines of code in a single repository
2016-06-24
[13]
tweet
Facebook's git repo is 54 GB.
2014-04-24
[14]
웹사이트
Scaling Mercurial at Facebook
https://code.faceboo[...]
2014-01-07
[15]
journal
Essence of distributed work: The case of the Linux kernel - Moon - First Monday
http://www.firstmond[...]
2000-11-05
[16]
웹인용
A Short History of Git
http://git-scm.com/b[...]
2014-10-21
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com