0920 - 0926
# 0920 - 0926
# 0921 - org.assertj.core.api.Assertions.assertThat
# assertj๋?
ํ ์คํธ ์ฝ๋ ์์ฑ์ ์ฝ๊ฒ ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
๋ฉ์๋ ์ฒด์ด๋ ์ง์ (๋ฉ์๋ ์ฒด์ด๋์ด๋ ์ฌ๋ฌ ๋ฉ์๋ ํธ์ถ์ ์ฐ๊ฒฐํด ํ๋์ ์คํ๋ฌธ์ผ๋ก ํํํ๋ ๋ฌธ)
# asertj ์ฌ์ฉํ๊ธฐ
# ์์กด์ฑ
- maven
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<!-- use 2.9.1 for Java 7 projects -->
<version>3.11.1</version>
<scope>test</scope>
</dependency>
- gradle
testCompile("org.assertj:assertj-core:3.11.1")
# ์ ์ธ
import static org.assertj.core.api.Assertions.assertThat;
# ์ฌ์ฉ๋ฒ
- isEqualTo() -> ์ฃผ์๊ฐ์ด ์๋๋ค.
@Test
public void eq(){
String name ="์ด๋ฆ";
assertThat(name).isEqualTo("์ด๋ฆ"); // success
}
- ๋ฆฌ์คํธ ํ๋๊ฐ ๊ฒ์ฆ
- extraction('์์ฑ๋ช ').containsExactly('ํ๋๊ฐ1', 'ํ๋๊ฐ2', 'ํ๋๊ฐ3')
@Test
public void list(){
User user1 = new User("ํผ์นด์ธ");
User user2 = new User("ํ์ด๋ฆฌ");
User user3 = new User("๊ผฌ๋ถ๊ธฐ");
List<User> list = new ArrayList<>();
list.add(user1);
list.add(user2);
list.add(user3);
assertThat(list).extracting("name")
.containsExactly("ํผ์นด์ธ","ํ์ด๋ฆฌ","๊ผฌ๋ถ๊ธฐ");//success
assertThat(list).extracting("name")
.containsExactly("ํผ์นด์ธ"); //fail
}
- ์ค๋ธ์ ํธ ๊ฐ์ฒด ๊ฒ์ฆ
- ๊ฐ์ฒด์ hashCode(), equals() ๊ตฌํ
@Test
public void objectValue(){
assertThat(ํผ์นด์ธUser).contains(new User("ํผ์นด์ธ"));
}
- ์์ธ ํ ์คํธ
@ParameterizedTest
@ValueSource(strings = {"", "spring"})
@DisplayName("์ด๋ฆ ๊ธธ์ด๊ฐ 0 ์ดํ ๋๋ 5 ์ด์์ผ ๋ ์๋ฌ ํ์ธ")
void car_name_exception(String name) {
assertThatThrownBy(() -> new Car(name))
.isInstanceOf(IllegalStateException.class)
.hasMessageContaining("์ด๋ฆ ๊ธธ์ด๋ 0์ดํ ๋๋ 5์ด์์ด์ด์ผ ํฉ๋๋ค.");
}
# 0922 - git flow
# git-flow๋
git์ผ๋ก ๊ฐ๋ฐํ ๋ ๊ฑฐ์ ํ์ค๊ณผ ๊ฐ์ด ์ฌ์ฉ๋๋ ๋ฐฉ๋ฒ๋ก
๊ฐ์ ๊ฐ๋ฐ ํ๊ฒฝ์ ๋ฐ๋ผ ์์ ํ๊ณ ๋ณํํด์ ์ฌ์ฉ
# git-flow ์ ๋ต
- master : ์ ํ์ผ๋ก ์ถ์ ๋ ์ ์๋ ๋ธ๋์น
- develop : ๋ค์ ์ถ์ ๋ฒ์ ์ ๊ฐ๋ฐํ๋ ๋ธ๋์น
- feature : ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๋ ๋ธ๋์น
- release : ์ด๋ฒ ์ถ์ ๋ฒ์ ์ ์ค๋นํ๋ ๋ธ๋์น
- hotfix : ์ถ์ ๋ฒ์ ์์ ๋ฐ์ํ ๋ฒ๊ทธ๋ฅผ ์์ ํ๋ ๋ธ๋์น
# 0924 - Merge, Squash and Merger, Rebase and Merge
Github์ ์๋ฒ์ ์์ merge, squash and merge, rebse and merge ์ธ ์ข ๋ฅ์ merge๋ฅผ ๋ชจ๋ ์ง์ํ๊ธฐ ์์ํ๋ค. ๊ฐ ๋จธ์ง ๋ฐฉ์์ ๋ฐ๋ผ ์ปค๋ฐ ํ์คํ ๋ฆฌ๊ฐ ๋ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์ ์ด๋ค ๊ฒฝ์ฐ์ ์ด๋ค ๋จธ์ง๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์์ง ํ์ธ.
# Merge
- a, b, c๋ฅผ refer ํ๋ m ์ปค๋ฐ ๋ ธ๋ ์์ฑ, m์ parent๋ก init, c๋ฅผ ๊ฐ์ง
- ์ปค๋ฐ m์์๋ถํฐ ๋ค๋ก ๋๋์๊ฐ๋ฉด์ ๋ถ๋ชจ๋ฅผ ๋ชจ๋ ์ฐพ์ ๋ธ๋ ์น๋ฅผ ๊ตฌ์ฑ. ์ปค๋ฐ m์ ๋ถ๋ชจ๋ก c, Init์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, c๋ b๋ฅผ, b๋ a๋ฅผ, a๋ Init์ ๋ค์ ๋ถ๋ชจ๋ก ๊ฐ์ง, ์ด ํ์์ ๋ชจ๋ backtrace ํ์ฌ, Init->a->b->c->m์ด๋ผ๋ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค๊ณ ์ด ๊ตฌ์กฐ๊ฐ ๋ชจ๋ ํ์คํ ๋ฆฌ์ ๋จ์.
- htfix - develop, hotfix - master ๋ธ๋ ์น๊ฐ์ ๋จธ์ง์ ์ ์ฉ
# Squash and Merge
- a, b, c๋ฅผ ํฉ์ณ์ ์๋ก์ด ์ปค๋ฐ์ผ๋ก ๋ง๋ค๊ณ , ๋จธ์ง ๋์ ๋ธ๋ ์น์ ์ถ๊ฐ, 'a,b,c'์ปค๋ฐ์ parent๋ฅผ Init ํ๋๋ง ๊ฐ์ง
- ์ปค๋ฐ 'a,b,c'๋ Init๋ง์ ๋ถ๋ชจ๋ก ๊ฐ์ง ๋จ์ผ ์ปค๋ฐ. ์์ ํ๋ ๋ธ๋ ์น์ a, b, c์ปค๋ฐ๋ค์ ๋จธ์ง ํ์ ๋ฉ์ธ ๋ธ๋ ์น ์ปค๋ฐ Init, 'a,b,c'์ ์๋ฌด๋ฐ ์ฐ๊ด์ ๊ฐ์ง์ง ์์.
- develop - feature, htfix - develop, hotfix - master ๋ธ๋ ์น๊ฐ์ ๋จธ์ง์ ์ ์ฉ
# Rebase and Merge
- a, b, c ๋ฅผ ์ฌ๋ฆฌ์ค(Seamless ๋ Seam (๊ฒน์น๋ถ๋ถ)์ด less (์๋) ๊ฒ)ํ๊ฒ ๋จธ์ง ๋์ ๋ธ๋ ์น๋ก ์ถ๊ฐ, ๊ฐ ์ปค๋ฐ๋ค์ ๋ชจ๋ parent๋ฅผ ํ๋์ฉ๋ง ๊ฐ์ง.
- ์ปค๋ฐ a, b, c์ ๊ด๊ณ๋ฅผ ๊ทธ๋๋ก ์ ์งํ ์ฑ, ๋ฉ์ธ ๋ธ๋ ์น์ ๊ทธ๋๋ก ์ถ๊ฐ. ์ปค๋ฐ a๋ ๋ถ๋ชจ๋ก ์ปค๋ฐ e๋ฅผ ๊ฐ์ง. Rebase and Merge ์์ ํ์๋, ์์ ํ๋ ๋ธ๋ ์น์ a, b, c์ปค๋ฐ๋ค์ ๋จธ์ง ํ์ ๋ฉ์ธ ๋ธ๋ ์น์ Init, d, e, a, b, c ์ปค๋ฐ๋ค๊ณผ ์ฐ๊ด ๊ด๊ณ๋ฅผ ๊ฐ์ง์ง ์์.
- master - develop ๋ธ๋ ์น๊ฐ์ ๋จธ์ง์ ์ ์ฉ
# 0925 - ํ๋ ์์ํฌ๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
# framework(ํ๋ ์์ํฌ)
ํ๋ ์์ํฌ๋ ๋ผ๋๋ ๊ธฐ๋ฐ๊ตฌ์กฐ๋ฅผ ๋ปํ๋๋ฐ, Application ๊ฐ๋ฐ ์ ํ์์ ์ธ ์ฝ๋, ์๊ณ ๋ฆฌ์ฆ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๋ ๋ฑ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ๋ค์ ์ํด ์ด๋์ ๋ ๋ผ๋(๊ตฌ์กฐ)๋ฅผ ์ ๊ณตํด์ฃผ๋ ๊ฒ. ๊ทธ๋ฌ๋ฏ๋ก ๊ทธ๋ฌํ ๋ผ๋ ์์ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ฝ๋๋ฅผ ์์ฑํ์ฌ Application์ ์์ฑ์์ผ์ผ ํ๋ค. ์ด๋์ ๋ ๋ผ๋๋ฅผ ์ ๊ณตํด ์ฃผ๊ธฐ ๋๋ฌธ์, ๊ฐ์ฒด ์งํฅ ๊ฐ๋ฐ์ ํ๋ฉด์ ์ผ๊ด์ฑ ๋ถ์กฑ ๋ฑ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด ์ค๋ค. ๊ทธ๋์ ์ํํธ์จ์ด์์๋ ํ๋ ์์ํฌ๋ฅผ ์๋์ ๊ฐ์ด ์ ์ํ๊ณค ํ๋ค.
์ํ๋ฅด์จ์ด์ ํน์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ์ํธ ํ๋ ฅํ๋ ํด๋์ค์ ์ธํฐํ์ด์ค์ ์งํฉ
# Libreay(๋ผ์ด๋ธ๋ฌ๋ฆฌ)
Library๋ ํน์ ๊ธฐ๋ฅ์ ๋ํ ๋๊ตฌ or ํจ์๋ค์ ๋ชจ์ ์งํฉ์ด๋ค. ์ฆ, ํ๋ก๊ทธ๋๋จธ๊ฐ ๊ฐ๋ฐํ๋๋ฐ ํ์ํ ๊ฒ๋ค์ ๋ชจ์๋ ๊ฒ. Library๋ ํ๋ก๊ทธ๋๋จธ๋ผ๋ฉด ๋๊ตฌ๋ ํ๋ฒ์ฏค์ ์จ๋ดค์ ๊ฒ์ด๋ฉฐ, ์ค์ค๋ก ์จ๋ณด์ง ์์๋ค๋ผ๊ณ ์๊ฐํ๋ ์ฌ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ฌด์์ธ์ง ๋ชฐ๋ผ์ ๊ทธ๋ ๊ฒ ์๊ธฐํ๋ ๊ฒ์ผ ๋ฟ, ์๊ธฐ๋ ๋ชจ๋ฅด๊ฒ ์จ๋ณด์์ ๊ฒ์ด๋ค. Library ์ญ์๋ ์๋์ ๊ฐ์ด ๊ฐ๋จํ๊ฒ ์ ์ํ ์ ์๋ค.
๋จ์ ํ์ฉ์ด ๊ฐ๋ฅํ ๋๊ตฌ๋ค์ ์งํฉ
# ์ฐจ์ด
Framework์ Library์ ์ฐจ์ด๋ Flow(ํ๋ฆ)์ ๋ํ ์ ์ด ๊ถํ์ด ์ด๋์ ์๋๋์ ์ฐจ์ด์ด๋ค. ํ๋ ์์ํฌ๋ ์ ์ฒด์ ์ธ ํ๋ฆ์ ์์ฒด์ ์ผ๋ก ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ํ๋ก๊ทธ๋๋จธ๊ฐ ๊ทธ ์์ ํ์ํ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐ๋ฉด์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ฌ์ฉ์๊ฐ ํ๋ฆ์ ๋ํด ์ ์ด๋ฅผ ํ๋ฉฐ ํ์ํ ์ํฉ์ ๊ฐ์ ธ๋ค ์ฐ๋๊ฒ.
- ํ๋ ์์ํฌ์๋ ๋ถ๋ช
ํ
์ ์ด์ ์ญ์
๊ฐ๋ ์ด ์ ์ฉ๋์ด ์์ด์ผ ํ๋ค. - ์ ์ด์ ์ญ์ ์ด๋ ์ด๋ ํ ์ผ์ ํ๋๋ก ๋ง๋ค์ด์ง ํ๋ ์์ํฌ์ ์ ์ด์ ๊ถํ์ ๋๊น์ผ๋ก์จ ํด๋ผ์ด์ธํธ ์ฝ๋๊ฐ ์ ๊ฒฝ ์จ์ผ ํ ๊ฒ์ ์ค์ด๋ ์ ๋ต