코드베이스 - Codebase

단일 코드 베이스로 버전 관리하고 여러 단계로 배포하라


Twelve-factor 앱은 깃Git, 머큐리얼Mercurial , 서브 버전Subversion 같은 버전 관리 시스템을 이용해 모든 변경 사항을 추적한다.  변경 내역 추적 데이터베이스의 사본을  코드 저장소라고 하며, 줄여서 코드 레포, 또는 레포라고 한다.


코드 베이스는 단일 저장소와 루트 커밋을 공유하는 공유 저장소로 나눌수 있다. 단일 저장소는 서브버전 같은 중앙 집중화된 리비전 관리 시스템에 해당하며, 공유 저장소는 깃 같은 분산 리비전 관리 시스템에서 볼 수 있다.


코드 베이스와 앱은 항상 1:1 관계가 된다. 


  • 코드 베이스가 여러 개 존재한다면, 앱이 아니라 분산 시스템이다. 분산 시스템 상의 컴포넌트가 앱이며, 각 컴포넌트는 개별적으로 Twelve-factor 규칙을 따른다.
  • 여러 앱이 같은 코드를 공유하면 Twelve-factor 규칙에 위배된다. 이에 대한 해결책은 공유 코드를 라이브러리로 만들고, 이 라이브러리를 종속성 관리자로 관리하는 것이다.


앱은 코드 베이스를 한 개만 갖는다. 그렇지 않으면, 배포가 여러 개 생길 수 있다. 한 개의 배포가 실행 중인 한 개의 앱 인스턴스다. 보통 운영 사이트나 여러 스테이징 사이트가 이에 해당된다. 추가적으로 모든 개발자들은 자신의 로컬 개발 환경에 앱을 실행하는데, 이 역시 배포라고 볼 수 있다.


각 배포에 다른 버전의 코드 베이스가 활성화되어 있을 수는 있지만, 모든 배포에 걸쳐 코드 베이스는 같아야 한다. 예를 들어, 개발자가 아직 스테이징에 배포되지 않은 커밋을 가질 수 있다. 또한 스테이징은 아직 운영에 배포하지 않은 커밋을 가질 수 있다. 그러나, 이 모두 같은 코드 베이스를 공유하고 있다. 이렇게 해야 같은 앱의 다른 배포로 구별할 수 있다.

고객 리뷰