티스토리 뷰

저번에 heroku 에서 java spring boot 프로젝트를 올려서 서버를 하나 마련했는데, 운영환경과 동일한 테스트용도로 쓸 staging 서버를 하나 더 heroku 에 추가하려 했다. heroku는 Procfile 파일에 서버 실행 명령어를 넣어놓기 때문에, 하나의 레파지토리 버전으로는 2개의 서버를 다르게 적용할 수 없다. DB 접속정보가 다르기 때문에, application.properties 파일의 설정을 아래 처럼 각각 다르게 읽어야 한다. 

web: java -Dserver.port=$PORT -jar target/app_demo.jar --spring.profiles.active=stag
web: java -Dserver.port=$PORT -jar target/app_demo.jar --spring.profiles.active=prod

이렇게 서버마다 설정파일이 일부 달라야 하는데, 이거 때문에 레파지토리를 2개로 가져갈 필요는 없고, github 에 새로 branch 를 추가하여 셋팅을 해보기로 했다. 우선 저번에 heroku 셋팅관련 포스팅을 참고한다.

 

heroku 에 spring boot 배포, 설정 하기

최근에 spring boot 를 가지고 웹사이트를 개발했는데, 로컬서버로만 가지고 있자니 너무 불편해서 거래는 거의 없을테니, 공짜 클라우드 서버를 사용해보고자 열심히 구글링을 해봤다. heroku 라는

emflant.tistory.com

 

Git Attributes 

 

Git - Git Attributes

디렉토리와 파일 단위로 다른 설정을 적용할 수도 있다. 이렇게 경로별로 설정하는 것을 Git Attribute 라고 부른다. 이 설정은 .gitattributes 라는 파일에 저장하고 아무 디렉토리에나 둘 수 있지만,

git-scm.com

위에 git document 에 있는 내용을 풀어 적은 것 뿐이니 참고. 진행중인 프로젝트에 바로 아래 명령어들을 수행하지 마시고, 실험할 레파지토리를 하나 새로 파서 먼저 시행착오를 격어보길 권장한다.


.gitattributes 파일을 셋팅하면 브랜치간 merge 시에 특정파일은 변동되지 않고 계속 원본을 유지하는 전략이다. 지금 하고자하는 작업은 master 와 staging 브랜치에서 Procfile 내용을 다르게 관리하도록 하는 것이다. 보통은 staging 브랜치에서 설정정보를 바꿔서 커밋하고 master 브랜치에서 merge 를 하면 해당 변경정보가 master 에 병합되기 마련인데, 다른 브랜치에서 변경된 사항을 반영하지 않고 그냥 master 브랜치의 버전으로 유지하는 방법이다. 

우선 아래 git 설정이 필요하니 수행한다. 

> git config --global merge.ours.driver true

 

설정이 잘되었는지 확인하는 명령어.

> git config -l

 

.gitattributes 파일을 아래 내용으로 만든다. Procfile 이라는 파일은 다른 브랜치의 변경사항이 있더라도 변경이 없도록 merge 정책을 ours 로 셋팅한다.

Procfile merge=ours
반응형

이제 브랜치(branch)를 새로 하나 만든다. 이름은 staging 으로 했다.

> git branch staging
> git checkout staging

 

staging 으로 체크아웃해서, Procfile 내용을 변경하고 git add, git commit, git push 한다. push 할 때 조심해야 할 것은,  브랜치 정보가 다르기 때문에 아래처럼 수행해야 한다. 

> git push -u origin staging

 

저장하고 나서는, master 로 이동해서 master 의 Procfile 파일도 스페이스 하나 넣어주고 커밋후 push 까지 하자. 이렇게 하는 이유는 커밋하지 않은채롤 머지를 하면 fast forward 머지로 되다보니, 아무리 merge=ours 로 셋팅해도 staging 의 변경사항이 엎어쳐지니 유의한다.

> git checkout master

 

같은 하나의 파일을 c2 에서 분기가 되었을때, 머지가 되지 않고자 하는 파일을 각 브랜치에서 각각 커밋을 해야 한다.

마지막으로 merge 처리해보자. 이제 staging 에 있는 Procfile 과 master 에 있는 Procfile 이 머지 처리 했음에도 그대로 유지가 되있는지 확인해보면 된다. 

> git merge staging

 

이제 heroku 가서 새로 앱을 하나 또 만들고, 이번엔 staging 브랜치로 연결하면 2개의 서버를 하나의 소스로 관리할 수 있게 된다.

 

Branch 삭제

혹시 브랜치를 잘 못 만들었거나 꼬였거나 다시 시작하고 싶으면, 아래 처럼 지우면 된다. 여기서 브랜치 이름 예시는 "staging" 이고, 옵션중에 -D 는 강제 삭제니 조심한다.

> git push origin --delete staging
To https://github.com/******.git
 - [deleted]         staging

> git branch -d staging
error: The branch 'staging' is not fully merged.
If you are sure you want to delete it, run 'git branch -D staging'.

> git brnach -D staging
Deleted branch staging (was 4c64***).
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함