2021 02 28
2021-02-28¶
Git Commands¶
- 브랜치
- 각자 독립적인 작업 영역
> $ git branch step1
$ git switch step1
- 작업 합치기
- merge: 브랜치 작업 내역을 합치기
- 합치는 과정 모두 history에 남김
> $ git switch step1
$ git merge bugFix- rebase: 기존 커밋을 복사해서 올려놓음 - 합치는 과정 새롭게 history 씀 - log의 정돈, but history의 삭제 > $ git rebase step1
$ git switch step1
$ git rebase bugFix
- HEAD
- *의 정체
- 현재 작업 중인 로컬 브랜치의 가장 최근 commit을 가르킴
> $ git switch HEAD^ //하나 뒤로 가기
$ git switch HEAD^^ //두 개 뒤로 가기
$ git switch HEAD\~2 //두 개 뒤로 가기
$ git branch -f step2 step1~2 //step2 브랜치를 step1의 2단계 뒤로 보낼 것
- 삭제와 복구
- 참고: https://velog.io/@sonypark/git-reset-vs-git-revert-%EC%B0%A8%EC%9D%B4
- reset: 완전히 기록을 지우는 방법
- history를 지우기 때문에, 원격 브랜치에서는 안 쓰는 방식
> $ git reset HEAD~1 //최근 커밋 하나 지우기
- revert: 이전 커밋 내역을 그대로 남겨둔 채 새로운 커밋 생성 - 새로 생성된 커밋은 이전 내역을 지우는 커밋 > $ git revert HEAD
- 복구도 reset으로 가능 > $ git reset --hard [돌릴 커밋 Hash 값]
- Remote
- clone: origin으로 저장소 추가
> $ git clone https://my-repo.com
- remote add: 다른 원격 저장소 별명으로 추가 > $ git remote add [별명] https://mission-repo.com
- Cherry-pick - 원하는 커밋만 가져올 수 있는 기능 > $ git cherry-pick [갖고 올 커밋 Hash 값]
Git 브랜치 전략¶
- git 브랜치 전략이란? - 여러 개발자가 협업하는 환경에서 git 저장소를 효과적으로 활용하기 위한 work-flow - 브랜치의 생성/삭제/병합이 자유로운 git의 유연한 구조를 활용하여, 다양한 방식으로 소스관리 가능 - 브랜치 생성의 규칙을 만들어 혼돈을 방지하자!
- git-flow - 5가지의 브랜치를 이용해 운영하는 브랜치 전략 - 메인 브랜치 (항상 유지됨) - master : 제품으로 출시될 브랜치 - develop : 다음 출시 버전을 개발하는 브랜치 - 보조 브랜치 (merge되면 사라짐) - feature : 기능을 개발하는 브랜치 - release : 이전 출시 버전을 준비하는 브랜치 - hotfix : 출시 버전에서 발생한 버그를 수정하는 브랜치 - 적용 - master: 우테코 미션 저장소 master 브랜치 - develop: 우테코 미션 저장소 papimonlikelion 브랜치 - feature: 내 로컬 저장소 step1, step2 브랜치 - 특징 - 주기적으로 배포를 하는 서비스에 적합 - 유명해서, 많은 IDE가 지원
- github-flow - master 브랜치와 PR을 활용한 단순한 브랜치 전략 - 프로세스 1. 기능 개발/버그 픽스/etc 이유로 branch 생성. 브랜치 이름에 의도가 명확할 것! 2. 커밋 메시지는 상세하게 커밋 3. PR 생성 4. 충분한 리뷰와 토의 5. 리뷰가 끝나면 해당 내용 실제 서버에 배포 6. master에 merge 후, 즉시 배포 (배포 자동화 도구 권장) - 특징 - 단순해서, git 처음 접하는 사람에게 유용 - CI(지속적 통합), CD(지속적 배포)가 자연스럽게 이루어짐
DTO vs Entity vs VO¶
- 참고: https://velog.io/@gillog/Entity-DTO-VO-%EB%B0%94%EB%A1%9C-%EC%95%8C%EA%B8%B0
- DTO - 정의 - Data Transfer Object - "계층 간" 데이터를 전달하기 위해 사용하는 객체 - DB의 데이터를 Service나 Controller 등에게 넘길 때 사용하는 객체 - 특징 - 오직 getter/setter만을 가짐 - 다른 로직은 X - setter를 가진 경우, 데이터 변조의 위험이 있음 - 따라서, 생성자로 초기화하는 불변객체로 만드는 것이 안전 - read only 속성 가짐
- Entity - 정의 - 실제 DB의 테이블과 1:1로 매핑 되는 클래스로, DB의 테이블 내에 존재하는 칼럼만을 속성으로 가져야 한다. - 특징 - 요청이나 응답값을 가지면 X - 자주 변하는 view에 따라 변할 속성의 클래스가 아님 - 자유롭게 변경가능한 DTO 사용하자 - 최대한 외부에서 Entity 클래스의 getter method를 사용하지 않도록 해야함 - Domain 로직만 O, Presentation 로직은 X
- VO - 정의 - Value Object - 값 그 자체를 표현하는 객체, 값 자체만 중요한 객체 - equals, hashCode 오버라이딩 필수 - 속성값이 모두 같으면, 같은 객체임 - 특징 - getter/setter 의외의 로직도 okay - 불변 객체로 구현할 것