์ข์ ์ฝ๋๊ฐ ๋๋์ฒด ๋ญ์ง?
‘์ข์ ์ฝ๋๋?‘์ด๋ผ๊ณ ๊ตฌ๊ธ๋งํด๋ณด๋ฉด ๋ง์ ๊ฒ์ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค. ๋๋ ๊ทธ๋ ๊ณ ๋ค๋ค ๊ถ๊ธํ๋๋ฏํ๋ค. ‘์ข์ ์ฝ๋’๋ ๋ ์์ ์ ์ฒด๋, ์ค์ฒด๋ ์์ด ์ด ์ธ์์ ๋ ๋๊ณ ์๋ค. ๋ชจ๋๊ฐ ‘์ข์ ์ฝ๋’์ ๊ธฐ์ค์ด ์กฐ๊ธ์ฉ ๋ค๋ฅด๊ณ ๊ฐ๊ฐ์ ๊ฒฝํ์ ๊ธฐ๋ฐ์ผ๋ก ์ข์ ์ฝ๋๋ฅผ ์ ์ํ๊ณ ์๋ค. ์ธ๊ฐ์ ์ข์ ์ฝ๋์ ์ ์๋ ์ ๋ง ๋ง๋ค.
- ์ฝ๊ธฐ ์ฌ์ด ์ฝ๋
- ์ค๋ณต์ด ์๋ ์ฝ๋
- ํ ์คํธ๊ฐ ์ฉ์ดํ ์ฝ๋
- ๋ฑ๋ฑ…
์ฝ๊ธฐ ์ฌ์ด ์ฝ๋๊ฐ ์ข์ ์ฝ๋?
์ด ์ ๋ชฉ์ ์ฑ ๋ ์๋ค. ์ ๋ชฉ ๊ทธ๋๋ก์ ๋ด์ฉ์ ๋ด๊ณ ์๊ณ ์ฝ๊ธฐ ์ฌ์ด ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํด์ ์ง์ผ์ผ ํ ๋ช ๊ฐ์ง๋ฅผ ์ ์ํ๊ณ ์๋ค.
์ฝ๊ธฐ ์ฌ์ฐ๋ ค๋ฉด ์ฃผ์์ ์ฐ๋ฉด ๋์ง ์๋?
๋จ์ํ๊ฒ ์๊ฐํด์ ์ฝ๊ธฐ ์ฝ๋๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ ค๋ฉด ์์ฑ์์๊ฒ ์ต์ํ ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค. ํ๊ตญ์ธ์ด๋ผ๋ฉด ์์ด๋ก ๋ณต์กํ๊ฒ ์์ฑ๋ ์ฝ๋๋ณด๋ค ํ๊ตญ์ด๊ฐ ์ต์ํ์ง ์์๊น? ๋ชจ๋ ์ฝ๋์ ํ๊ตญ์ด๋ก ์ฃผ์์ ์์ธํ ์์ฑํด๋๋ฉด ์ฝ๋๋ฅผ ์ฝ์ง ์์๋ ์ฝ๋๊ฐ ๋ฌด์์ ํ๋์ง ๋น ๋ฅด๊ณ ์ฝ๊ฒ ํ์ ํ ์ ์๋ค.
// ์ด๋ฆ: ์๋ฆฌ๊ธ์ํ
// ์ค๋ช
: ์๋ฆฌ๊ธ์ํ์ ์ฒ๋ฆฌํ๋ Mapper
// ์ธ์1: m: ์๋ฆฌ๊ธ
// ์ธ์2: pe: ์ ์ฉ๋ฑ๊ธ
public void refundMapper(int m, String pe){
...
}
์ฃผ์๋ง ์ฝ์ด๋ด๋ ์ธ์ ์ฌ์ฉํด์ผ ํ๋ฉฐ ๋ฌด์์ ํจ์์ ์ธ์๋ก ์ ๋ฌํ๋์ง ์ ์๋ ์๋ค.
ํ์ง๋ง ์ฃผ์์ ๊ด๋ฆฌํ๊ธฐ ์ด๋ ต๋ค. ์ฃผ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฉํ๋ฐ์ดํฐ์ด๊ธฐ ๋๋ฌธ์ ์ฃผ์์ ๋ด์ฉ๊ณผ ํจ์์ ์ค์ ๋์์ด ์ผ์นํ๋ค๊ณ ๋ณด์ฅํ ์ ์๋ค.
์์๋ก ๋ณํ๋ ์๊ตฌ์ฌํญ์ ๋ฐ์ํ๋๋ผ ํจ์๊ฐ ์์ ๋ ๋ ์ฃผ์์ด ํจ๊ป ์์ ๋์ง ์์ ์๋ ์๋ค. ์คํ๋ ค ํ๋ ๊ฐ์ง์ ์๋ชป๋ ์ฃผ์์ผ๋ก ์ฝ๋๋ฅผ ์ดํดํ๋๋ฐ ํผ๋์ ์ผ๊ธฐํ ์ ์๋ค.
๋ํํ ์ฝ๊ธฐ ์ฌ์ด๋ฐ?
์ฝ๋๊ฐ ์ฝ๊ธฐ ์ฝ๋๋ก ์์ฑ๋์ด์ผ ํจ์ ๋๋ฌด๋๋ ๋ถ๋ช ํ๋ค. ํ์ง๋ง ๋ชจ๋ ๊ฐ๋ฐ์๊ฐ ๋์ผํ ๋ฐฐ๊ฒฝ์ง์์ ๊ฐ์ง ๊ฒ์ ์๋๋ค. ๊ฐ์ ๋ค๋ฅธ ํ๊ฒฝ์์ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์ฝ๊ธฐ ๋๋ฌธ์ ‘์ฝ๊ธฐ ์ฝ๋ค’๋ ๊ฒ์ ๊ฐ๊ฐ์ธ์๊ฒ ๋ค๋ฅด๊ฒ ๋ค๊ฐ๊ฐ๋ค.
๋ณ์๋ช ์ ์ ์ง๋๋ค๋ ๊ฒ๋, ์์ด๋ฅผ ๋ชจ๊ตญ์ด๋ก ์ฌ์ฉํ๊ณ ์์ง ์์ ์ฌ๋๋ค์๊ฒ ๋ค๋ฅด๊ฒ ๋ค๊ฐ๊ฐ๋ค. ์ด๋ค ๋๊ตฐ๊ฐ์๊ฒ ์ด์ํ ์์ด๋ก ์ง๋ ๋ณ์๋ช ์ด ์ ์ฝํ ์๋ ์๊ธฐ ๋๋ฌธ์ ์ ์ง์ ๋ณ์๋ช ๋ํ ๊ฐ์์ ๋ฐฐ๊ฒฝ์ง์์ ๋ฐ๋ผ ๊ธฐ์ค์ด ๋ชจํธํ๋ค.
๋ํ ์ฝ๋๋ฅผ ์์ฑํ๋ ์์ ์๋ ์์ฑํ ์ฝ๋์ ๋ํ ์ดํด๊ฐ 100%์ด๊ธฐ ๋๋ฌธ์ ์๋ฌด๋ฆฌ ‘์ฝ๊ธฐ ์ฝ๊ฒ’ ์์ฑํ๊ณ ์ ๋ ธ๋ ฅํด๋ ํ๊ณ๊ฐ ์์ ์๋ฐ์ ์๋ค.
์ฝ๊ธฐ ์ฌ์ฐ๋ฉด ๋์ธ๊ฐ?
์ฝ๊ธฐ๋ง ์ฌ์ฐ๋ฉด ๋ ๊น? ๋๋ฌด ์์ด์ ์ด๊ณ ๋น์ฐํ ์ด์ผ๊ธฐ์ด๊ธฐ์ ์ ๋ฟ์ง ์๋๋ค. ์ฝ๊ธฐ ์ฝ๋ค๋ ๊ฒ์ ๋จ์ํ ์ฝ๋๋ฅผ ์ฝ๋ ๊ฒ๋ง ์๋ฏธํ๋ ๊ฒ์ด ์๋๋ผ ์ดํดํ๋ ๊ฒ๊น์ง ํฌํจํ๊ธฐ ๋๋ฌธ์ ๋๋ฌด๋ฟ๋ง ์๋๋ผ ์ฒ์ ๋ณผ ๋๋ ์ฌ์์ผ ํ๋ค.
๊ทธ๋ณด๋ค ๋ ๊ทผ๋ณธ์ ์ธ ์ด์ , ์ข์ ์ฝ๋๊ฐ ์ฝ๊ธฐ ์ฌ์ด ์ฝ๋๋ผ๋ฉด ์ ์ฝ๊ธฐ ์ฝ๋๋ก ์์ฑํด์ผ ํ๋๊ฐ? ์ด๋ป๊ฒ ์ฝ๊ธฐ ์ฝ๋๋ก ์์ฑํ๋๊ฐ? ์ ๋ํ ๋ฌผ์์ผ๋ก ์ข์ ์ฝ๋์ ๋ํ ์ ์๋ฅผ ๋ค์ ํ๋ฒ ์๊ฐํด ๋ณผ ์ ์๋ค.
์ ์ฝ๊ธฐ ์ฌ์์ผ ํ์ง?
์ค๋ณต์ด ์๋ ์ฝ๋?
๊ฐ๋ฐ์๋ผ๋ฉด ๋๊ตฌ๋ A์ B์์ ๋์ผํ ๋ก์ง์ ์ํํ๋ ์ฝ๋๋ฅผ ๋ณด๋ ์๊ฐ, ๊ณตํต์ผ๋ก ์ถ์ถ(extraction)ํ๊ณ ์ถ์ด ํ๋ค. ๋์ผํ ๋ก์ง์ ์ํํ๋ ์ฝ๋๊ฐ ์ฌ๊ธฐ์๋ ์ ๊ธฐ์๋ ์๋ ๊ฒ์ ๊ต์ฅํ ๋ถํธํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ด ๋ถํธํจ์ ์ด๋์์ ์ค๋ ๊ฑธ๊น?
์ค๋์ ์ ์์ฑํด๋ ์ฝ๋์์ A๋ผ๋ ์ฝ๋ ์กฐ๊ฐ์ด ๋ ๊ตฐ๋ฐ์ ํผ์ ธ์๋ค๋ ๊ฒ์ ๊ธฐ์ตํ๊ธฐ ์ฝ์ง ์๋ค. ๋๋ฌธ์ ํ ๊ณณ์ A๋ง ์์ ๋์์ ๋ ๋ค๋ฅธ ํ ๊ณณ์์ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ๋ค. ์ด๋ฌํ ๊ฒฝํ์ ๊ธฐ๋ฐํ์ฌ ๋์ผํ ๋ก์ง์ ์ํํ๋ ์ฝ๋๋ ๋ณ๋์ ํจ์๋ก ๋นผ๋๊ณ ์ฌ์ฌ์ฉํ๋ ค๊ณ ํ๋ค.
๊ทธ ๋ ๊ฐ์์ง๋ง ์ง๊ธ์ ๊ฐ์ง ์์
ํ์ง๋ง ์ด๋ ๊ฒ ๊ณตํต์ผ๋ก ์ฌ์ฉํ๊ณ ์๋ ์ฝ๋๋ฅผ ์์ ํ๋ ๊ฑด ์ด๋ ต๋ค. ๋ถ๋ช A๋ผ๋ ์ฝ๋ ์กฐ๊ฐ์ ๋์ผํ ๋ก์ง์ ์ํํ์ฌ ๋ณ๋๋ก ์ถ์ถํ์ง๋ง, ์๊ฐ์ด ์ง๋๊ณ A์์ ์กฐ๊ธ ๋ค๋ฅธ A* ์ญํ ๋ก ์์ ์ด ํ์ํด์ก๋ค.
๊ทธ๋๋ ์ค๋ณต์ด์๋ ์ฝ๋ ์กฐ๊ฐ์ ํ์์ ์ํด ์ถ์ถํ์ง๋ง, ์ง๊ธ์ ์๋๋ผ์ ๋ค์ ํฉ์น๊ฑฐ๋ ์์ ํ๊ณ ์๋ค. ๋ณดํต ํ๋ ์ผ์ ๋์ผํ์ง๋ง, ๊ทธ ๋ชฉ์ ์ด ๋ค๋ฅธ ์ฝ๋๋ฅผ ์ถ์ถํ์ ๋, ๋ง์ด ๋ฐ์ํ๋๋ฐ ์ด๊ฒ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ์ํ๋ ๋ฐ ๋น์ฉ์ด ๋ค์ด๊ฐ๊ฒ ํ๋ค.
์ถ์ถ์ ์ด๋ค ‘๊ธฐ์ค’์ผ๋ก ํด์ผํ ๊น?
์ ์ข์ง ์์ ์ฝ๋๊ฐ ์์ฐ๋๋๊ฐ?
์ฌ์ค ์ฐ๋ฆฌ๋ ์ฝ๋๋ฅผ ์์ฑํ ์์ ์๋ ๋ชจ๋ ์ข์ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํด ๋ ธ๋ ฅํ๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ๋์น๋ ์์ ์ด ์กด์ฌํ๊ณ ์ข์ง ์์ ์ฝ๋๊ฐ ์์ฐ๋๋ ๊ฒ์ ์๋๊น.
์ด์ฉ๋ค๊ฐ ์ฝ๋๊ฐ ์ํ๊ฒ ๋๋๊ฑธ๊น?
์ฐ๋ฆฌ๋ ์ด๋ค ์ํฉ๋ค์ ๋ง์ฃผํ๊ฒ ๋๋๊ฐ?
๊ฐ๋ฐ์๋ ์๋ก์ด ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๊ธฐ๋ ํ์ง๋ง ๊ธฐ์กด์ ์ฝ๋๋ฅผ ์์ ํ๊ธฐ๋ ํ๊ณ ๋ค์ ๋ง๋ค๊ธฐ๋ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์๋กญ๊ฒ ๋ง๋ ํ๋ก์ ํธ๋ ์ธ์์ ๋น์ ๋ณด๊ธฐ๋ ์ ์ ์์ ๋ ๊ฐ๋ฅ์ฑ์ด (๋งค์ฐ) ๋ง๋ค.
- ์ด๋ฏธ ์ด์ ์ค์ธ ์๋น์ค์ CS ๋์ํ๋ฉฐ ์์ ํ๊ธฐ
- ๋ณ๊ฒฝ๋ ์๊ตฌ์ฌํญ, ์ธํฐํ์ด์ค๋ฅผ ๋ฐ์ํ๊ธฐ
- ์ด์ ๋๋ ๋ฐฉ๊ธ ์์ฑํ ์ฝ๋ ์์ ํ๊ธฐ
- …
์ฐ์ด์ง ์๋ ์ฝ๋
์ฐ์ง ์๊ฒ ๋ ์ฝ๋(Dead code)๊ฐ ์๋๋ฐ, ์ด ์ฝ๋๊ฐ ์ด๋์์ ์ฐ์ผ์ง๋ ๋ชจ๋ฅธ๋ค๋ ๋ถ์๊ฐ์ด ์๋ค๋ฉด ๊ฐํ ์ญ์ ํ์ง ๋ชปํ ๊ฒ์ด๊ณ ์ด ์ฝ๋๋ ๊นจ์ง ์ ๋ฆฌ์ฐฝ ์ค ํ๋๊ฐ ๋๋ค.
์ด ๋ถ์๊ฐ์ ์ด๋์์ ์ค๋ ๊ฒ์ผ๊น?
1. ๊ฑฐ๋ฆฌ
์ฝ๋๊ฐ ๋์ํ๋ ๊ณณ๊ณผ ์ฝ๋๊ฐ ์ ์๋ ๊ณณ ๊ฐ์ ๋ฌผ๋ฆฌ์ ๊ฑฐ๋ฆฌ๊ฐ ๋ฉ๋ฉด ํ์ ํ๊ธฐ ํ๋ค์ด์ง๋ค. ๋ณด๊ณ ์๋ ์ฝ๋๊ฐ ์ผ์ ๋ฒ์์์๋ง ์ฌ์ฉ๋๋ค๋ ํ์ ์ด ์๋ค๋ฉด ๊ทธ ๋ฒ์๋ง ํ์ธ ํ ์ฌ์ฉํ์ง ์๋ ์ฝ๋๋ผ๋ ํ์ ์ ์ป์ ์ ์๋ค.
2. ์์ํ์ง ์์ ํจ์
ํจ์ ์ธ๋ถ์ ์ด๋ค ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ ํจ์๋ ๊ทธ side effect๋ฅผ ์ ์ดํ๊ธฐ ์ด๋ ต๋ค. ํจ์์ ์ ์ถ๋ ฅ๋ง ํ์ธํ์ฌ ํจ์ ๋ด๋ถ๋ฅผ ์์ ํ ์ ์๋ค๋ฉด ์์ ํ๊ธฐ ๊น๋ค๋กญ๋ค.
public int getWage(name) {
return this.getMySalary(name) / this.getTotalTime(new Date())
}
getWage๋ ํจ์๋ name์ด๋ผ๋ ์ ๋ ฅ ์ธ์๋ getMySalary๋ผ๋ ์ ๋ ฅ์ผ๋ก ์ ์๋์ง ์์ ์ ๋ ฅ์ด ์กด์ฌํ๋ฉฐ new Date()๋ผ๋ ํญ์ ๋ณํ๋ ๊ฐ์ ์์กดํ๋ค.
์๊ธ์ฒ์น๋ฅผ ํ ์ฝ๋
์ค๋ณต์ผ๋ก ๋นผ๋์ง๋ง ์ฌ์ฉํ๋ ๊ณณ์์ ๋ค๋ฅธ ๋ก์ง์ ์ถ๊ฐํด์ค์ผ ํ ๋๋ฅผ ์ข ์ข ๋ง์ฃผํ๋ค. ์ด ๋ ์์ ์ผ๋ก ์ธํ Side effect๊ฐ ๋๋ ค์ ํจ์์ ์ ๋ ฅ์ ์ถ๊ฐํ๋๊ฐ ์ต์ ๊ฐ์ ์ถ๊ฐํ์ฌ ๋ด๋ถ์์ ์ต์ง๋ก ์ฒ๋ฆฌํ ๋ ๊ทธ ์ฝ๋๋ ์ข์ง ์์ ์ฝ๋๊ฐ ๋๋ค.
์ด๋ ๊ฒ ์๊ธ์ฒ์น๊ฐ ๋ช ๋ฒ ์ด๋ค์ง๋ฉด ๋๊ตฌ๋ ์์๋ณด๊ธฐ ์ด๋ ค์ด ํจ์๊ฐ ํ์ํ๋ค. ๋น์ฐํ ์ด๋ฐ ํจ์๋ ์ฐ๋ฆฌ๊ฐ ๊ณ ๋ฏผํ๋ ์ข์ ์ฝ๋๋ผ๊ณ ํ ์ ์๋ค.
๊ธฐ์ ๋ถ์ฑ
์๊ธ์ฒ์น๊ฐ ๋ฌด์กฐ๊ฑด ๋์๋ค๋ ๋ง์ด ์๋๋ค. ๋น์ฅ ๋ฌธ์ ํด๊ฒฐ์ ํ๋ ๋ฐ์ ์ด๋งํผ ๋น ๋ฅธ ๋์์ด ์๋ค. ํ์ฌ ์๋น์ค์์ ๋ฐ์ํ๋ ๋ฒ๊ทธ๋ฅผ ์ก์์ผ ํ๋๋ฐ, ์ ์ฒด์ ์ธ ๊ตฌ์กฐ ๋ฆฌํฉํ ๋ง์ ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ค๋ง ์ด๋ฐ ์๊ธ์ฒ์นํ ์ฝ๋๋ค์ ๋ถ์ฑ๊ฐ ๋๊ณ ์ํ์ ์๋ฌด๋ฅผ ์ ธ์ผ ํ๋ค.
์๊ธ์ด ํ์ํ์ฌ ์ํ์์ ๋์ถ์ ๋ฐ์๋ค๋ฉด ๋์ถ๋ฐ์ ๊ธ์ก์ ์ธ์ ๊ฐ ์ํํด์ผ ํ๋ ๊ฒ๊ณผ ๋์ผํ ์ด์น์ด๋ค. ์ ์ ํ ๋์ถ๋ก ์๊ธ์ ๋ณด๋ค ์ตํต์ฑ ์๊ฒ ์ฌ์ฉํ ์ ์๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ์ ์ ๊ธฐ์ ๋ถ์ฑ๋ฅผ ๋๊ณ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ๋ ์ค์ํ๋ค. ๊ณผ๋ํ ๋์ถ์ ์ด์์ ๋ถ๋ด์ด ์ฌํ ๊ฒ์ฒ๋ผ ๊ธฐ์ ๋ถ์ฑ๊ฐ ๋ง์์ง์๋ก ๊ทธ ์ฝ๋๋ฅผ ์ ์ง๋ณด์ ํ๋๋ฐ ๋ ํฐ ๋น์ฉ์ด ๋ค์ด๊ฐ๊ธฐ ๋๋ฌธ์ ์ ์ ์ ์ ์ฐพ๋ ๊ฒ ๋ํ ์ค์ํ๋ค.
์ข์ง ์์ ์ฝ๋๋ฅผ ์ค์ด๊ธฐ
์ข์ง ์๋ค๊ณ ์๊ฐ๋๋ ์ฝ๋๋ค์ ์ดํด๋ดค๋ค. ์ข์ ์ฝ๋๋ ์ข์ง ์์ ์ฝ๋๊ฐ ์๋ ์ฝ๋๋ฅผ ๋งํ๋ค. ์ข์ ์ฝ๋๋ฅผ ์์ฑํ๋ ค๊ณ ๋ ธ๋ ฅํ๋ ๋์ ์ข์ง ์์ ์ฝ๋๋ฅผ ์ค์ฌ๋ณด์. ๊ทธ๋ฆฌ๊ณ ๊ฒฉ๋ฆฌํด๋ณด์. ์์ฑ๋ ๋ชจ๋ ์ฝ๋๋ ๊ฒฐ๊ตญ ์ ์ง ๋ณด์ ๋น์ฉ์ด ํ์ํ๋ค. ๊ถ๊ทน์ ์ผ๋ก ์ฐ๋ฆฌ์ ์ฝ๋๋ ์ ์ง์ ์ผ๋ก ๊ฐ์ ์ด ๊ฐ๋ฅํด์ผ ํ๋ค.
์ถ์ถ์ด ์๋, ์ถ์ํ
์ถ์ถ๊ณผ ์ถ์ํ๋ ๋ฌด์์ด ๋ค๋ฅผ๊น?
์ถ์ถ(extraction)
‘์ถ์ถํ๋ค(extract)‘์ ์ด์์ ์ดํด๋ณด๋ฉด ex(๋ฐ์ผ๋ก)์ tract(๋์ด๋ด๊ธฐ)์ ํฉ์ฑ์ด์ด๋ค. ํน๋ณํ ๊ธฐ์ค์์ด ๋จ์ํ ๋ฐ์ผ๋ก ๋์ด๋ด๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ถ์ํ(abstraction)
‘์ถ์ํํ๋ค(abstract)‘์ ์ด์์ ์กฐ๊ธ ๋ค๋ฅด๋ค. ab(๋จผ ๊ฐ๋ )์ tract(์ด๋์ด๋ด๊ธฐ)์ ํฉ์ฑ์ด๋ก, ์ด๋ค ๋์์ ์ค์ํ ์์ ๋ค์ ์ฌํด์ํ์ฌ ์ ๋ฆฌํ ๊ฒ์ด๋ผ๊ณ ํด์ํ ์ ์๋ค.
์์กด์ฑ์ ๋๋ฌ๋ด๊ธฐ ์ํ ์ถ์ํ
์ฐ๋ฆฌ๊ฐ ๋ณ๋ ํจ์ ๋๋ ํ์ผ๋ก ์ถ์ถํ๋ ์ด์ ๋ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์๋ค. ๋ค๋ฅธ ๊ณณ์์ ์ฌ์ฌ์ฉํ๊ธฐ ์ํด ๋ถ๋ฆฌํ๊ณ ๋จ์ง ํ์ผ์ด ์ปค์ ธ์ ๋ถ๋ฆฌํ๋ค. ๋จ์ํ ์ค๋ณต๋ ์ฝ๋ ๋ฉ์ด๋ฆฌ(chunk)์ ๋ํด ์ถ์ถํ๋ฉด ์ฌ์ฌ์ฉํ๊ธฐ ์ด๋ ต๋ค. ์คํ๋ ค ํจ์ ๊ฐ ์์กด ๊ด๊ณ๋ฅผ ํ์ ํ๊ธฐ ์ํด ๋น์ฉ์ด ๋ค์ด๊ฐ๊ฒ ๋๋ค. ์๋ชป ์ถ์ถํ ๊ฒ์ด๋ค.
ํจ์๋ฅผ ๋ถ๋ฆฌํ ๋๋ ๊ทธ ํจ์์ ์ญํ ์ ์ธ์งํ๊ณ ํ๋์ ์ญํ ๋ง ํ๋๋ก ์ ์ํด์ผ ํ๋ค. ์ฆ ์์กด์ฑ์ ๋๋ฌ๋ด๊ธฐ ์ํจ์ด ์ถ์ถ์ ๋ชฉ์ ์ด ๋์ด์ผ ํ๋ค.
ํ ํ์ผ์ ์ฌ๋ฌ ๋ก์ง์ด ์ฝํ์์ ๋ ๊ฐ ์ฝ๋ ์กฐ๊ฐ ์ค ์๋ก ์์กด ๊ด๊ณ์ ์๋ ๊ฒ๋ค์ ์ถ์ถํด์ผ ํ๋ค. ์ด๋ ๊ฒ ์ถ์ํ๊ฐ ๋ ํจ์๋ ํ๋์ ๋ชฉ์ (์ญํ )์ ๊ฐ๊ฒ ๋๊ณ ์๋ฏธ ์๋ ์ถ์ถ(์ถ์ํ)์ด ์ด๋ฃจ์ด์ง๋ค.
์์กด ๊ด๊ณ๊ฐ ์๋ ๊ฒ๋ค๋ผ๋ฆฌ ์ถ์ํ๋ฅผ ํด๋ณด์.
Where
๋ฌด์์ ๋ถ๋ฆฌํ ์ง ์์๋ค๋ฉด ์ด์ ์ด๋์ ๋ถ๋ฆฌํ ์ง ๊ฒฐ์ ํด์ผ ํ๋ค.
๋จ์ํ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ๋ ํจ์ ์ปดํฌ๋ํธ์ผ ๊ฒฝ์ฐ, ์ด๋ ์ ๋์ ๋ ๋ฒจ๋ก ๊ณต์ ๋ ์ง์ ๋ฐ๋ผ ์ ์๋๋ ์์น๊ฐ ๋ฌ๋ผ์ง๋ค. ์ด๋ค ํจ์๋ ๋๋ฉ์ธ๊ณผ ๊ฐํ๊ฒ ๊ฒฐํฉํด ์์ด์ ํน์ ํ์ด์ง์์๋ง ์ฌ์ฌ์ฉ๋ ์ ์๊ณ ์ด๋ค ํจ์๋ ์์กด ๊ด๊ณ์์ด ์ด๋์์๋ ์ฌ์ฉํ ์ ์๋ค.
๋ชฉ์ ์ ๋ฐ๋ผ ๋ง๋ ์์น์ ์ ์ํด์ฃผ๋ ๊ฒ ๋ํ ์ค์ํ๋ค.
์ญ์ ํ๊ธฐ ์ฌ์ด ์ฝ๋์ ์ญ์ ํ๊ธฐ ์ด๋ ค์ด ์ฝ๋์ ๋ถ๋ฆฌ
์๋ฌด๋ฆฌ ๊น๋ํ ์ฝ๋๋ฅผ ์์ฑํด๋ ๋น์ฆ๋์ค ์๊ตฌ์ฌํญ์ ๋ง์ถ๋ค ๋ณด๋ฉด ์ด์ฉ ์ ์์ด ๋ณต์กํ ์ฝ๋๊ฐ ์์ฑ๋๋ค. ์ฌ์ฉํ๊ณ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๋ฐ์ํ ๋ฒ๊ทธ์ผ ์๋ ์๊ณ ์ฌ๋ฌ ๋ธ๋ผ์ฐ์ ์ ๋์ํ๋ค ํ์ํ ์ฝ๋์ผ ์ ์๋ค.
์ด๋ฐ ์ฝ๋๋ ์ 3์ ์ ์ฅ์์ ์ฝ๊ธฐ๋ ์ด๋ ต๊ณ ์ฃ๋ถ๋ฆฌ ์ญ์ ํ๊ธฐ๋ ์ด๋ ต๋ค. ๋ณต์กํ ์๊ตฌ ์ฌํญ์ ๋ด๊ณ ์๋ ์ฝ๋๋ ๋ณ๊ฒฝ์ ์ ์ฐํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ๋ณ๋๋ก ๋ถ๋ฆฌํด๋ฌ์ผ ํ๋ค.
์ข์ง ์์ ์ฝ๋๊ฐ ์์ฐ๋๋ ๊ฒ์ ์์ ํ ์ฐจ๋จํ ์ ์๋ค๋ฉด ์ ๋๋ก ๊ด๋ฆฌ๋ ์ ์๋๋ก ๊ฒฉ๋ฆฌํด์ผ ํ๋ค.
์์์ ์ฝ๋์ ๋งฅ๋ฝ์ ์ดํดํ๋ ๋ฐ ๋ฐฉํด๊ฐ ๋ ์ ์๋ ์์ ์ค ํ๋๋ก ์ฃผ์์ ์ด์ผ๊ธฐํ์ง๋ง, ์ด ๊ฒฝ์ฐ์ ์ฃผ์๊ณผ ํจ๊ป ๊ฒฉ๋ฆฌํด๋๋ฉด ๊ธฐ์กด ์ฝ๋์ ํ๋ฆ์ ๋์ง ์๊ณ ๋ณต์กํ ์ฝ๋๋ฅผ ์ดํดํ๋๋ฐ ๋์์ ์ค ์ ์๋ค.
@Component
public class CommitUtil {
private GitHub github;
@Value("${github.token}")
private String token;
}
ํ๋์ฝ๋ฉ์ด ๋ถ๊ฐํผํ ๊ฒฝ์ฐ, ๋น์ฆ๋์ค ์๊ตฌ์ฌํญ์ด ๋ณต์กํ์ฌ hackyํ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ๋ ๊ฒฝ์ฐ ๋ฑ ์ด์ฉ ์ ์์ด ์ข์ง ์๊ฒ ์์ฑ๋๋ ์ฝ๋๋ค์ ์ฃผ์๊ณผ ํจ๊ป ๊ฒฉ๋ฆฌ์์ผ ๊ด๋ฆฌํ ์ ์๋ค. ๋ํ ์ค์ ๊ฐ์ผ๋ก ๋ถ๋ฆฌํ์ฌ application.properties์์ ์ค์ ๊ฐ์ ๊ด๋ฆฌํ๊ณ ์๋ฐ ํ์ผ์ ์ฃผ์ ํ์ฌ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๊ณ ๋ คํ์.
์ผ๊ด์ฑ ์๋ ์ฝ๋
์ต์ํ์ ๊ฐ๋ ์ฑ์ ๋ณด์ฅํ๋ ๋ฐฉ๋ฒ์ ์ผ๊ด์ฑ ์๋ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ด๋ค. ์ผ๊ด์ฑ์ ํฉ์๋ ๊ท์น์ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ง๋ฉฐ ์ด ํฉ์๋ ๊ท์น์ ๊ฐ๊ฐ์ธ์๊ฒ ๋์ผํ๊ฒ ๋ค๊ฐ๊ฐ๋ค.
์ฝ๋์ ์ผ๊ด์ฑ์ด ์ง์ผ์ง๋ค๋ฉด ์์ธก์ด ๊ฐ๋ฅํ๋ค. ์์ธก์ด ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ์ด๋ ๊ณณ์ ์ด๋ค ์ฝ๋๊ฐ ์์นํ๋์ง ์์ํ ์ ์๋ค๋ ๊ฒ์ด๋ค. ํ๋ก์ ํธ ํ์ ๊ฐ์ ๊ทธ๋ผ์ด๋ ๋ฃฐ(Ground Rule)์ด ํ์ํ ์ด์ ์ด๋ค.
Naming
๋ณ์๋ช ๋ค์ด๋ฐ๋ ์ค์ํ์ง๋ง ์์ฑ๋๋ ์๋ง์ ํจ์์ ๋ค์ด๋ฐ์๋ ๊ท์น์ด ์์ผ๋ฉด ์ผ๊ด์ฑ์ ์งํฌ ์ ์๋ค.
// Case 1.
// prefix:
// action: Regist
// target: kyc
public Wallet RegistKyc(){
...
}
์์ ๊ฐ์ด prefix, action, target ์ด ์ผ๊ด๋ ๊ท์น์ผ๋ก ์์ฑ๋๋ฉด ํจ์๋ฅผ ํ์ ํ๋๋ฐ ํฐ ๋์์ด ๋๋ค.
Directory
๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ๋ ์์์ ๋งํ ‘์ด๋์ ๋ถ๋ฆฌํ ์ง’์ ๊ด๋ จ์ด ์๋ค.
์ฐ์ ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ์ ์ํคํ ์ฒ๋ ๋น๊ต ๋์์ด ์๋๋ค. (์ํคํ ์ฒ !== ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ) ์ผ๊ด๋ ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ๋ ์ ์ฒด์ ์ธ ๊ตฌ์กฐ๋ฅผ ํ์ ํ๋ ๋ฐ ํฐ ๋์์ด ๋๊ณ ์ปดํฌ๋ํธ ๊ฐ์ ๊ด๊ณ๋ฅผ ํ์ ํ๋๋ฐ์๋ ๋์์ ์ค๋ค.
Top Level์ directory ๊ตฌ์ฑ์ ๋ฐ๋ผ ์ด๋ ๊ณณ์ ์ด๋ค ๋ชจ๋ ๋๋ ์ปดํฌ๋ํธ๋ค์ด ์์นํ ์ง ์์ธก์ด ๋๋ค๋ฉด ์ฝ๋๋ฅผ ๋น ๋ฅด๊ฒ ์ดํดํ ์ ์๋ค.
ํ๋ก ํธ๋ฅผ ์๋ก ๋ค์๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ด๋ค.
src
โโโ api
โโโ components
โโโ hooks
โโโ model
โโโ pages
โ โโโ contract
โ โโโ docs
โโโ utils
components ๋๋ ํฐ๋ฆฌ๋ผ๋ฉด ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ๊ฐ ์ปดํฌ๋ํธ hierarchy๋ฅผ ๋๋ฌ๋ผ ์ ์๊ณ pages ๋๋ ํฐ๋ฆฌ๋ผ๋ฉด route path๋ฅผ ๋๋ฌ๋ผ ์ ์๋ค. ์ฝ๋๊ฐ ์ด๋ ๊ณณ์ ์์นํ๋์ง ์์ํ ์ ์๋๋ก ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ตฌ์ฑํ๋ฉด ์ฝ๋๋ฅผ ํ์ ํ๋๋ฐ ๋์์ด ๋๋ค.
์ค๋ฌด์์ ํฌ๊ฒ ๋๊ฐ์ง๋ก ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ๋ก ๋ง์ด ๋ํ๋๋ ๊ฒ ๊ฐ๋ค.
์ฒซ ๋ฒ์งธ ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ๋ ์ฝ๋๊ฐ ํ๋ ์ญํ ์ ๋ฐ๋ผ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ถ๋ฆฌํ๊ณ ๋ ๋ฒ์งธ ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ๋ ํ์ด์ง(๋๋ฉ์ธ ์์ญ)์ ๋ฐ๋ผ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ถ๋ฆฌํ๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ปค์ง๊ณ ๋ณต์กํด์ง๋ฉด ์ฒซ ๋ฒ์งธ ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ์ ๊ฒฝ์ฐ, ์ฝ๋๊ฐ ์ ์๋ ๊ณณ๊ณผ ์ฝ๋ ์ฌ์ฉ๋๋ ๊ณณ์ด ๋ฉ์ด์ง๋ ๋ฌธ์ ์ ์ด ๋ฐ์ํ๋ค.
๋ ๋ฒ์งธ ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ๋ Featured Based๋ผ๊ณ ํ ์ ์๋๋ฐ ์ด๋ ๊ฒ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ ธ๊ฐ๋ค๋ฉด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์์ ๊ณตํต์ผ๋ก ์ฌ์ฉ๋๋ ๊ฒ๋ค๋ง Top Level์ @shared ๋๋ ํฐ๋ฆฌ์์ ๊ด๋ฆฌํ๊ณ ๋๋จธ์ง๋ ์์ง๋ ๋๊ฒ ๊ฐ๊ฐ์ ๋๋ ํฐ๋ฆฌ์์ ๊ด๋ฆฌํ๋ ๊ฒ์ด๋ค.
์ด๋ฐ ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ์ ๋ํ ๊ณ ๋ฏผ์ด ์๋ ์์ค์ ์ํฌ์ข ๋์ ๊ธ - ์ง์ญ์ฑ์ ์์น์ ๊ณ ๋ คํ ํจํค์ง ๊ตฌ์กฐ: ๊ธฐ๋ฅ๋ณ๋ก ๋๋๊ธฐ์ ์ฝ์๋๋ฐ, ์ฐธ๊ณ ํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
ํ์ฅ์ฑ ์๋ ์ฝ๋
ํ์ฅ์ด ์ด๋ ค์ด ์ฝ๋๋ ๋ด๋ถ์์ ๋ง์ ๋ณ๊ฒฝ์ด ๋ฐ์ํ๋ฉฐ ์ด๊ฒ์ ์ฝ๋๋ฅผ ์ฝ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ ๋ค. ์์ฐ์ค๋ฝ๊ฒ ์์ฐ์ฑ๋ ๋จ์ด์ง๋ค.
ํ์ฅ์ ๋ซํ์๋ค๋ ๋ป์ ๊ฐ์ฒด์ ์๋ก์ด ๊ฐ์ ์ ๋ฌํ๊ธฐ ์ด๋ ค์ด ๊ตฌ์กฐ๋ผ๋ ๋ป์ด๋ค. ๊ฐ์ฒด์ ์ ํ์ ๋ฐ๋ผ ์๋ก์ด ์ฝ๋๋ฅผ ๋ฐ๋ณตํด์ ์์ฑํ๊ณ , ๋์ผํ ๋ก์ง์ ์ํํ๋ ๋นํจ์จ์ ์ธ ์ฝ๋๋ฅผ ๋ญ๋นํ๊ฒ ๋๋ค.
์ ์ง์ ์ผ๋ก ๊ฐ์ ์ด ๊ฐ๋ฅํ ์ฝ๋
์์ ์ฌ๋ฌ ๊ฐ์ง๋ฅผ ์ด์ผ๊ธฐ ํ์ง๋ง ๊ฒฐ๊ตญ, ์ฒ์๋ถํฐ ์๋ฒฝํ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์ด๋ ต๋ค๋ ๊ฒ์ ์ธ์ ํ๊ณ ๋์์์ด ๊ฐ์ ํ ์ ์๋ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์ค์ํ๋ค. ๊ฒฐ๊ตญ ๊ฐ์ ์ ๋น ๋ฅด๊ฒ ํ ์ ์๋ ์ฝ๋๋ ์ค์ํ์ง๋ง ๊ฐ์ ์ผ๋ก ์ธํด ๋ฐ์ํ๋ ๋ฌธ์ ๋ฅผ ์กฐ๊ธฐ์ ๊ฐ์งํ ์ ์๋ ์์คํ ์ด ํ์ํ๊ฒ ๋๋ค. ๋งค๋ฒ ์๋์ผ๋ก ํ์ธํ ์ ์์ผ๋ ์์ฐ์ค๋ฝ๊ฒ ‘์๋ํ ๋ ํ ์คํธ’๋ฅผ ์ฐพ๊ฒ ๋๋ค.
ํ ์คํธ
๊ฒฐ๊ตญ ํ ์คํธ๋ก ๊ท๊ฒฐ๋๋ค. ์์ ์ด์ผ๊ธฐ ํ ์ข์ ์ฝ๋๋ค์ ํน์ง์ ์ฌ์ค ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ์ ์ฉ์ดํ ์ฝ๋๋ค์ด๋ค. ์ธํฐํ์ด์ค๋ฅผ ํตํ ์ฐธ์กฐ, ๊ตฌํ์ ๋ถ๋ฆฌ, ํ๋์ ๊ธฐ๋ฅ์ ์ง์คํ๋ ๋ชจ๋ํ ๋ฑ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ค๋ณด๋ฉด ๊ฐ์ ํ๊ฒ ๋๋ ์ง์ ๋ค์ด๋ค. ํ ์คํธ๋ฅผ ์์ฑํ๋ค ๋ณด๋ฉด ์ฝ๋๋ฅผ ์์ฑํ๋ฉด์ ๋์น ๋ถ๋ถ๋ค์ด ๋ณด์ธ๋ค. ์๋ก์ด ๊ด์ ์ด ์๊ธฐ๊ฒ ๋๋๋ฐ ์ญ์ค์ ์ผ๋ก ์ด๋ฌํ ์ง์ ๋ค์ด ์ข์ ์ฝ๋๋ฅผ ๋ง๋ค์ด๋ด๊ณค ํ๋ค.
๊ฒฐ๋ก
So What?
์ข์ ์ฝ๋๋ฅผ ์ ์์ฑํด์ผ ํ๋์ง๋ถํฐ ๊ณ ๋ฏผํ๋ ๊ณผ์ ์ ๊ธ๋ก ์ ๋ฆฌํด๋ณด์๋ค.
- ์ฝ๋ ๊ฐ์ ์์กด์ฑ์ ๊ณ ๋ฏผํ์.
- ํฉ์๋ ๊ท์น์ผ๋ก ์ผ๊ด์ฑ์๊ฒ ์์ฑํ์.
- ์ ์ ํ๊ฒ ํ์ฅ ๊ฐ๋ฅํ๋๋ก ์ค๊ณํ์.
- ์ด์ฉ ์ ์๋ ์ฝ๋๋ ์ฃผ์๊ณผ ํจ๊ป ๊ฒฉ๋ฆฌํ์.
- ๋ต์ ํ ์คํธ ์ฝ๋ ๊ธฐ๋ฐ์ ์๋ํ ํ ์คํธ๋ค.
๋ชจ๋ ์ฝ๋๋ฅผ ํ ์คํธํด์ผ ํ๋๊ฐ?๋ผ๊ณ ๋ฌป๋๋ค๋ฉด ๋ต์ ์๋ค. ํ๋ ํ ๋ฒ์น์ ์ํ๋ฉด 80%์ ๋ฒ๊ทธ๋ 20% ์ฝ๋์์ ๋์จ๋ค. 20% ์ฝ๋ ์ง์ ์ ์ฐพ์ ์ด ๋ถ๋ถ๋ง ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ , ์๋กญ๊ฒ ์์ฑ๋๋ ์์ญ์๋ง ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ ์ ํ์ด๋ค.