개발자들이 개발하는 환경은 local
이라고 부른다. 각자의 컴퓨터에서 개발을 할테니 지역적 이라고 할 수 있겠다.
같은 프로젝트를 개발하는 여러 개발자들은 각각 개발한 내용을 push
할텐데, 각각 pull request
를 날리고 merge
승인을 내려줘서 병합하게 될 것 이다.
출처 : https://woowabros.github.io/experience/2017/10/30/baemin-mobile-git-branch-strategy.html ( 우아한 형제들, 기술 블로그 )
이런 상황에서 git flow
에서 말하는 개발론은 이러하다.
개발하는 환경은 각각 다르고, 개발한 내용을 QA가 필요하니 각각 개발한 내용을
branch
를 나눠서 업로드하면 어떨까?
그렇다면 어떤 기준으로 branch
를 나눌지에 대한 질문이 생기게 된다.
어떤 기준으로 구분하는 것이 좋을까?
우선 local
이 필요할 것 이다.
각 개발자들은 자신이 개발한 내용을 업로드할 저장소가 필요하니까.
그러면 다른 branch
는 어떤 것들이 필요하게 될까?
크게 3가지로 구분해서 생각할 수 있을 것 이다.
1. 내가 개발하고 있는 곳 (develop)
2. 개발한 내용을 반영할 곳 (feature)
3. 실제 결과물을 저장하는 곳 (product version)
A successful Git branching model 에서는 5가지 branch를 제안한다.
우리가 만드려고 하는 프로그램에 검색 버튼을 추가하려고 한다. 이는 새로운 기능이니까 feature
이다.
이 기능을 위해서 나는 local
에서 개발할 것 이다. (local
은 개발하는 장소니까, develop
이라고 부르자.)
난 열심히 뚝딱 뚝딱 하고 나의 머리를 두들기며 새로운 기능을 개발했다.
그러면 구현된 기능을 속한 프로젝트에 반영하려고 할 것 이다.
그러나 바로 실제 사용에 적용하기엔 문제가 발생할 수 있으니 이를 미리 확인해야 할 것 이다. (QA
가 필요한 순간이다.)
그러니 나는 구현된 기능을 feature
에 업로드(push
)할 것 이다.
feature
에 저장된 내용을 확인해보니 아무 이상도 없고, 기존에 있던 기능들과 함께 잘돌아간다. 다음 달 9월에 이 기능을 업데이트하려고 하니, 우선 feature
에 저장하고 9월 업데이트에 구현된 내용을 추가해야겠다.
9월이 되었다. prod
(product
)에 내가 구현된 내용을 관리자가 추가해주었다. 구현된 기능이 실제 프로그램에 추가되니 뿌듯한 기분이 든다.
내가 git flow
에 대해 이해한 내용이다. 그런데 우리는 branch
에 대한 언급만 했다. branch
로 충분할까?
내가 만든 프로그램이 서버에서 동작한다면, local
과 server
는 다른 컴퓨터일 것 이다.
back-end
api
를 사용한다면?back-end
서버가 dev
, prod
구분되어 있다면? api
가 dev
, prod
구분되어 있다면?흠... 그렇다면 프로그램이 어디서 동작하는지에 따라서 다르게 동작할 필요가 생긴 것 이다. 어떻게 하는게 좋을까?
나는 python
개발을 하고 있다. 환경에 따라 다른 api
를 호출하고 싶은 상황이다. 어떻게 처리하는게 좋을까?
내가 선택한 방법은 config
파일을 생성하는 것 이다.
설정파일을 만들어서 그에 따라 다른 동작을 실행하는 것 이다.
cli
에 주어진arguments
에 따라서, 다른 동작을 수행하는 것과 같은 동작을 구현하려고 하는 것 이다.꼭 파일이 아니라 다른 방법을 환경을 저장할 수도 있다. (환경 변수, ip? os?)
python
에서는 설정파일을 관리하는 parser
를 지원하고 있다.
그러나 나는 간단한 방법을 사용할 것 이다.
현재 상황에서는 단순히 env
가 무엇인지만 저장하면 되기 때문이다.
내가 선택한 방법은 .json
파일로 저장하는 것 이다. 정말 간단하다
// .config.json
{
// 개발 환경이라는 의미
"env" : "dev"
}
그리고 git
에는 올리지 않는다. 그래야지, 각 컴퓨터에서 가진 config
파일에 내용이 덮어써지지 않는다. .gitignore
에 .config.json
을 추가해주었다.