2021-02-10-TIL
2021-02-10-TIL
맥북 부트캠프
프로그래머스 문제 3단계까지 다 풀기
체리픽과 스냅샷
다른 가지에서 남의가지의 커밋을 가져올때 체리픽 -> 내용은 같지만 id는 다르다
git은 스냅샷이라는 것을 기억할것
git cherry-pick은 다른 브랜치에 있는 커밋 하나를 골라 그 커밋이 만든 변경을 현재 브랜치에 다시 적용한다. Git 문서는 이 동작을 각 커밋이 들인 변경을 적용하고 “recording a new commit for each”라고 설명한다. 새 커밋이므로 변경 내용은 같아도 커밋 id는 다르다.
id가 다른 이유는 스냅샷 모델과 연결된다. 커밋 id는 커밋 객체의 내용으로 계산한 해시다. Pro Git의 Git Objects 장에 따르면 커밋 객체에는 그 시점 스냅샷의 최상위 트리, 부모 커밋, 작성자와 시각, 커밋 메시지가 들어간다. 체리픽한 커밋은 부모가 원래 커밋과 다르므로 같은 변경을 담아도 다른 해시가 나온다.
PR은 보통 기능단위인데 여기에서 revert하면 한꺼번에 되돌릴 수 있다.
GitHub 문서에 따르면 머지된 풀 리퀘스트를 revert하면 원래의 머지 커밋을 되돌리는 새 풀 리퀘스트가 만들어진다. 기능 하나를 PR 하나로 머지해 두면, 문제가 생겼을 때 그 기능 전체를 커밋 하나씩 찾지 않고 한 번에 되돌릴 수 있다.
실습한 명령어
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
8455 git add a.txt
8456 git commit -m "Init"
8457 git branch
8458 git switch -c step1
8461 git add b.txt
8462 git commit -m "BB"
8465 git add d.txt
8466 git commit -m "DD"
8468 git branch step2
8470 git switch step2
8472 git branch -f step1 cd16eab
8476 git switch step1
8479 git add .
8480 git commit -m "zz"
8482 git cherry-pickk 8ef9a0a
8483 git cherry-pick 8ef9a0a
중간의 git branch -f step1 cd16eab는 step1 브랜치가 가리키는 커밋을 cd16eab로 강제로 옮기는 명령이다. 브랜치는 커밋을 가리키는 이름일 뿐이라서, 이렇게 옮기면 step1에서 그 뒤의 커밋들은 보이지 않게 된다(step2가 여전히 가리키고 있으므로 사라지지는 않는다). 그 상태에서 새 커밋을 만들고 git cherry-pick 8ef9a0a로 다른 브랜치의 커밋 하나를 다시 가져왔다.
처음부터 사용하지 않는 설계를 하지말고 그때그때 필요한 경우에 구조를 변경하는 것이 연습하기에 좋다.
당신들의 TDD가 실패하는 이유 - 이규원
구현은 Information Hiding을 지켜야하고 인터페이스를 통해서만 테스트하도록 테스트코드를 작성해야한다.
정보 은닉(information hiding)은 David Parnas가 1972년 논문 “On the Criteria To Be Used in Decomposing Systems into Modules”에서 제시한 모듈 분해 기준이다. 바뀔 가능성이 큰 설계 결정을 모듈 하나 안에 숨기고, 다른 모듈은 그 결정을 모르게 하라는 것이다. 테스트에 적용하면, 테스트가 내부 구현을 직접 들여다보지 않고 공개된 인터페이스만 통해 동작을 확인해야 한다는 뜻이 된다. 그래야 내부 구현을 바꿔도 테스트를 고칠 필요가 없다.
아키텍처
- 낮은 결합
- 높은 응집
- 도메인 모델 보호
자바 이야기를 할 때 스프링을 항상 이야기하는 이유는 도메인 모델이 스프링 플랫폼으로 막혀있기 때문이다. 따라서 스프링을 사용하되 코드가 오염되지않는 아키텍처를 사용해라.
도메인 모델 보호는 비즈니스 규칙을 담은 클래스가 프레임워크의 어노테이션이나 클래스에 의존하지 않게 하라는 뜻으로 이해할 수 있다. 그래야 도메인 로직을 스프링 없이 순수한 단위 테스트로 검증할 수 있다.
댓글
아직 댓글이 없습니다