The Twelve-Factor App

1. 코드베이스(Codebase)

버전 관리되는 하나의 코드베이스와 다수의 배포

Twelve-Factor App은 항상 Git, Mercurial, Subversion과 같은 버전 관리 시스템을 사용한다. 버전 관리의 이력 정보를 담고 있는 데이터베이스는 코드 저장소(code repository)라고 불린다. 이를 줄여서 code reporepo라고 부르기도 한다.

코드베이스란 Subversion과 같은 중앙 관리형 버전 관리 시스템에서 하나의 저장소나, Git과 같은 분산형 버전 관리 시스템에서 루트 커밋을 공유하는 다수의 저장소를 일컫는다.

다수의 배포에 대한 하나의 코드베이스

코드베이스와 어플리케이션 간에는 항상 1:1의 관계가 성립한다.

코드베이스는 각 어플리케이션마다 단 하나만 존재하지만, 어플리케이션의 배포는 다수 존재할 수 있다. 배포(deploy)란 어플리케이션의 인스턴스에 해당한다. 일반적으로 하나의 어플리케이션은 하나의 프로덕션 사이트와, 다수의 스테이징 사이트로 배포된다. 한편 어플리케이션 개발에 참여하는 프로그래머들은 각자의 로컬 개발 환경에서 실행되는 어플리케이션 복사본을 가지고 있는데, 이 또한 하나의 배포라고 볼 수 있다.

다수의 배포들은 서로 다른 버전일 수도 있지만, 모든 배포는 하나의 코드베이스를 가진다. 예를 들어 프로그래머의 로컬 환경에는 스테이징 환경에 아직 배포되지 않은 커밋이 포함되어있을 수 있다. 마찬가지로 스테이징에는 아직 프로덕션 환경에 배포되지 않는 커밋이 포함되어있을 수도 있다. 하지만 로컬과 스테이징, 프로덕션은 모두 같은 코드베이스를 공유하고 있으며, 따라서 이들은 같은 어플리케이션의 다른 배포라고 할 수 있다.