PlayHub는 Git Submodule을 사용하여 Main 밑으로 Frontend/Backend로 서브모듈단위로 나눌 것이다. 또한 아키텍쳐에 메세지 버스를 사용하므로 여러가지 모듈 분리가 필요할 것으로 예상된다
아키텍쳐
- 구성
+ 모바일 웹앱 : SPA(Single Page Application)으로 구성한다. AngularJS + BootFlat 사용예정
+ 조회&푸쉬 서버 : Node.js를 이용하여 OAuth 로그인을 처리한다. Socket.io를 이용하여 Push를 한다
+ 메세지 버스 : Redis를 사용하여 "조회&푸쉬 서버"와 "이슈정보 서버" 사이를 느슨하게 연결한다. PubSub 방식을 사용한다
+ 이슈정보 서버 : Open API를 사용하여 Google Doc, DropBox, Trello, GitHub의 정보를 주기적으로 수집한다
+ 스토어 서버 : MongoDB 또는 MySql을 사용한다
- 장단점
+ 장점 : Backend의 Scale-out이 가능하고 다양한 언어를 통한 구현 및 Node.js를 통한 손쉬운 Push 구현이 가능하다
+ 단점 : 관리 포인트가 늘어난다.
Git 서브모듈 만들기
- git submodule <command> 를 사용한다
- 생성 순서
+ GitHub에 Main 저장소를 만든다
+ GitHub에 Submodule이 될 저장소를 만든다
+ git clone <Main저장소 주소> playhub & cd playhub
+ git submodule add <Submodule 저장소 주소> <이름지정>
+ GitHub으로 git push 수행하기
$ git clone https://github.com/ysyun/myplayhub.git
Cloning into 'myplayhub'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
$ cd myplayhub/
$ git submodule add https://github.com/ysyun/myplayhub-spa-webapp.git webapp
Cloning into 'webapp'...
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
warning: LF will be replaced by CRLF in .gitmodules.
The file will have its original line endings in your working directory.
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: .gitmodules
# new file: webapp
#
$ git branch
* master
$ git commit -a -m "add submodule webapp"
[master 2fdaa1b] add submodule webapp
warning: LF will be replaced by CRLF in .gitmodules.
The file will have its original line endings in your working directory.
2 files changed, 4 insertions(+)
create mode 100644 .gitmodules
create mode 160000 webapp
$ cat .gitmodules
[submodule "webapp"]
path = webapp
url = https://github.com/ysyun/myplayhub-spa-webapp.git
$ git push
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 404 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/ysyun/myplayhub.git
0871412..2fdaa1b master -> master
- 전체 소스 받아오기
+ git clone 으로 Main 저장소 받아오기
+ git submodule init 명령으로 submodule 등록
+ git submodule update로 서브모듈에 대한 clone 작업 수행
$ git clone https://github.com/ysyun/myplayhub.git
Cloning into 'myplayhub'...
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 6 (delta 0), reused 3 (delta 0)
Unpacking objects: 100% (6/6), done.
$ cd myplayhub/
$ git status
# On branch master
nothing to commit, working directory clean
$ git submodule init
Submodule 'webapp' (https://github.com/ysyun/myplayhub-spa-webapp.git) registered for path 'webapp'
$ git submodule update
Cloning into 'webapp'...
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
Submodule path 'webapp': checked out '1bfbcac347a7d6ce4620900b8dad991a638f2763'
$ cd webapp/
~/myplayhub/webapp on (detached from 1bfbcac)
$ ls
README.md
$ git status
# HEAD detached at 1bfbcac
nothing to commit, working directory clean
// 서브모듈이 현재 존재하지 않는 브랜치가 되었다
~/myplayhub/webapp on (detached from 1bfbcac)
$ git branch
* (detached from 1bfbcac)
master
// 해결을 위하여 branch swith를 해야하는데 "git checkout master"를 하면 된다
$ git checkout master
Switched to branch 'master'
// 해결이 되었다
~/myplayhub/webapp on master
$ git branch
* master
// 이후 업데이트 할 내역이 있으면
$ git pull
- 서브모듈 삭제
+ git submodule rm <submodule 디렉토리> 명령 없어졌음
+ git rm <submodule 디렉토리> 명령으로 제거
+ .gitmodules 의 submodule관련 설정 3줄 제거
$ git rm webapp
rm 'webapp'
$ vi .gitmodules
webapp submodule 삭제
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# deleted: webapp
#
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: .gitmodules
$ git commit -a -m "delete webapp submodule"
[master 8305c3c] delete webapp submodule
2 files changed, 4 deletions(-)
delete mode 160000 webapp
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
# (use "git push" to publish your local commits)
#
nothing to commit, working directory clean
$ git push
Git 브랜치 전략
- 브랜치 전략에 대하여 숙지한다
- master 브랜치에 어느 정도 환경설정이 끝났다면 협업을 위하여 develop 브랜치를 만든다.
+ master와 develop은 절대 삭제되지 않고 계속 유지 되는 브랜치로 둔다
- 기능을 구현하기 시작하면 develop브랜치에서 feature 브랜치를 만든다
+ Story 단위로 만들어서 관리한다
+ master에서 따오지 않고 develop에서 브랜치하고, remote origin에 push하지 않는다
+ 필요없을시 삭제한다
- develop 브랜치에서 어느 정도 되었다 싶으면 release 브랜치를 만든다
+ release 번호를 달고 수정이 필요한 부분을 보완하고 tag를 단다
+ master로 merge를 한다
- master에 문제가 발견되었을 때 hotfix 브랜치를 만든다
+ hotfix는 develop과 master 양쪽에 반영을 한다
Master + Develop 브랜치 : 영원한 브랜치
Feature + Release + Hotfix 브랜치 : 보조 브랜치 (삭제가능)
<참조>
'My Services > PlayHub' 카테고리의 다른 글
[PlayHub] 서비스 디자인 - 6 (2) | 2013.11.09 |
---|---|
[PlayHub] Frontend를 위한 Backend 개발 환경 구성하기 - 5 (0) | 2013.11.09 |
[PlayHub] Frontend 개발 환경 구성하기 - 4 (0) | 2013.10.30 |
[PlayHub] SRS (Software Requirements Specification) - 2 (0) | 2013.10.28 |
[PlayHub] 잘 놀고 싶다 - 1 (0) | 2013.10.24 |