์์์ค ์ฃผ์ฐฝ์ค ํ๋์ธ eXtreme Programming์ ๋ํด ์์๋ณด์.
eXtreme Programming (XP)
- Agile ๊ฐ๋ฐ๋ก ์ ์ผ๋ถ
Pair Programming
- ์ง ํ๋ก๊ทธ๋๋ฐ
- 90๋ ๋ ๋ง, 2000๋ ๋์ด ํฅํ๋ ์ ํ์ด
- 2๋ช ์ด์ ํํ์ผ๋ก ์งํ
- ๋ฆฌ๋ทฐ / ์ฝ๋ ๋๋ ์ ์งํํ๋ค๊ฐ ์ค์์นญ ํด์ ๋ค์ ์งํ
- ์ฃผ์ฅ: ๋์ ํ๋๋ณด๋ค ๋ซ๋ค. ๋์ ํ์ง์ ๊ฐ์ ธ์จ๋ค.
- ๊ทผ๋ฐ ์ค์ง์ ์ผ๋ก ์ธ๊ฑด๋น 2๋ฐฐ > ํ์ง 2๋ฐฐ?
- ์ค์ ํจ๊ณผ๋ฅผ ์ธก์ ํด๋ณด๋ ๊ฐ์ฑ๋น๊ฐ ์ ๋ง๋ค.
- ๋ฆฌ์์น์ ๋ฐ๋ฅด๋ฉด ํ์ด ํ๋ก๊ทธ๋๋ฐ ์ดํ ๋ฌธ์ ๊ฐ 15% ์ค์๋ค.
- ์ฆ, ํจ๊ณผ๊ฐ ์ ๋ง๋๋ค.
- ๋ค๋ง ์ฝ๋ ๋ฆฌ๋ทฐ ํ๋ก์ธ์ค๋ ๋จ์์ ์ ๊ณ์ ๋์์ด ๋๊ณ ์๋ค.
์ง์์ ํตํฉ (CI)
- ์๋๋ Grady Booch(index ์ฐฝ์์)๊ฐ ์ฃผ์ฐฝํ ๋ฐฉ๋ฒ
- ๊ทธ๋ฅ ๊ฐ์ ธ๋ค๊ฐ ์๊ธฐ๊ฐ ์์กฐ๋ผ ๋งํ๊ณ ์๋ ๊ผด
- Code merge์ ๋ฌธ์ ๊ฐ ๋ง์ด ๋ฐ์ํจ
- ๊ทธ๋์ ์ง์์ ์ผ๋ก ์ฝ๋๋ฅผ ๋ณํฉํด์ผ ํจ์ ๋งํจ
- ๊ทผ๋ฐ ์ฌ๊ธฐ์ ์ค์๊ฐ ๋ง์ด ๋ฐ์ํจ
- ๊ฐ์ ๋ธ๋์น์์ ์ค๋ซ๋์ ์์ ์ ์งํํ์ง ๋ง์!
- ๊ต์ฅํ ์ข์ ๋ฐฉ์์
- ํ์ง๋ง XP๊ฐ ์ฃผ์ฐฝํ CI๊ฐ ์๋
XP์ CI
- ํฉ์น๋ ํ์๋ ๋ฐ๋์ ํ๋ฃจ์ ์ฌ๋ฌ๋ฒ์ด์ด์ผ ํ๋ค.
- ์ธ์ ๋ ์ต์ ๋ฒ์ !
- ๊ทผ๋ฐ ๋๋ฌด ๋น๋ฒํ๋ฉด ํจ๊ณผ์ ์ด์ง ์์ ์ ์์
- ํ ์คํ ์์ ๋ฌธ์ ๊ฐ ์ข ๋ง์
- ๋ฒ๊ทธ์ ์ด์ ๋ ๋ณดํต ๊ตฌํ์๊ฐ ์๊ตฌ์ฌํญ์ ์๋ชป ์ดํดํด์ ๋ฐ์ํจ
- ๊ทธ๋์ ๊ตฌํ์๊ฐ ์์์ฐจ๋ฆฌ๊ธฐ ์ด๋ ค์, ๊ทธ๋์ ์ ๋ฌธ ํ ์คํฐ๊ฐ ์กด์ฌํ๋ ๊ฒ
Test-Driven Development
- ๊ฐ๋ฐ ๊ณผ์ ์ ํ ์คํธ ์ฐ์ ์ผ๋ก ๋ฐ๊ฟ
- ๊ธฐ๋ฅ ๊ตฌํ ์ด์ ์ ๋ฐ๋์ ํ ์คํธ ํ๋ ์ฝ๋๋ถํฐ ๋ง๋ค์ด์ผ ํจ
- ๊ธฐ๋ฅ๋ถํฐ ๋ง๋ค๋ ๊ธฐ์กด์ ๋ฐฉ๋ฒ๊ณผ ๋ฐ๋
- ํ ์คํธ ์ฝ๋์์ฑ์ == ๊ตฌํ์
๋ฐฉ๋ฒ
- ์ด๋ค ๊ธฐ๋ฅ์ ๋ง๋ค์ด์ผ ํ๋์ง ์์ง
- ๊ทธ ๊ธฐ๋ฅ์ด ์ ๋๋ก ๋์ํ๋์ง ํ
์คํธํ ์ฝ๋๋ฅผ ๋ง๋ฆ
- ํด๋น ๊ธฐ๋ฅ์ ์์ง ๊ตฌํํ์ง ์์์
- ๋จ์ํ ์คํธ ์ฌ์ฉ
- ๊ธฐ๋ฅ ๊ตฌํ
- 2์์์ ํ
์คํธ ์คํ
- ์ฑ๊ณต
- ์คํจ: 3์ผ๋ก ๋์๊ฐ
- ์ ์ฅ์์ ์๋ ๋ค๋ฅธ ๋จ์ํ
์คํธ๋ฅผ ๋ชจ๋ ์คํ
- ์ฑ๊ณต
- ์คํจ: ๋จ์ฝ๋ ๋ง๊ฐํธ๋ฆฐ ๊ฒ. 3๋ฒ์ผ๋ก ๋์๊ฐ
- ๊ตฌํ, ํ ์คํธ ์ฝ๋๋ฅผ ์ ์ฅ์์ ์ถ๊ฐ
์ฃผ์ฅ
- TDDํ๋ฉด ๊ทน๋จ์ CI๋ ๋ฌธ์ ์์
- ํ๋ฃจ์ ์ฌ๋ฌ๋ฒ ๋ธ๋์น ํฉ์ณ๋ ์๋์ผ๋ก ํ ์คํธ ๋จ
- ๋จ, ๋ชจ๋ ํจ์์ ๋ํด ๋จ์ํ
์คํธ๋ฅผ ๋ง๋ค์ด์ผ ํจ
- ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง 100%
- ์ธ์ ๋ ๋ชจ๋ ์ฝ๋๋ฅผ ํ ์คํธํ๋ ํ์ง์ด ๋์์ง
TDD์ ๊ฒฝ์ ๋ ผ๋ฆฌ
- ์ด๋ ๊ฒ ํ๋ฉด ๋น์ฐํ ํ์ง์ด ๋์์ง๋ค.
- ๋ค๋ฅธ ์กฐ๊ฑด์ด ๋์ผํ๋ค๋ฉด
- ๊ฐ์ฑ๋น๊ฐ ์๋๊ฐ?
- ์ ์ ๊ณ์์ ํฌ๊ธฐํ์๊น?
- ๊ณผ์ฐ ์ ๋๋ก๋ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋๊ฐ?
- ๋จ์ ํ ์คํธ ์์ฑ > ์์ ํจ์ > ๋ชจ๋ํ, ์ ์ฐ์ฑ ์ธก๋ฉด์์ ์ข์์ง
- ๊ทธ๋ฐ๋ฐ ์? ๊ตณ์ด?
- ์ ์ฐํ ์ค๊ณ๋ ์ ๋์ ์ผ๋ก ์ข์ ๊ฐ์น๊ฐ ์๋๋ค.
- ์ ๋นํ ํฌ๊ธฐ๊ฐ ์ข์ ๊ฒ.
๊ฒฝ์ ๋ ผ๋ฆฌ์ ์์
- ๋ฒ๊ทธ๊ฐ ์๋ ํ๋ก๊ทธ๋จ์ ๋ง๋ค๊ณ ์ถ์ ๊ฒ์ ์ธ์
- ํ์ง๋ง ๊ฒฝ์ ๋
ผ๋ฆฌ๋ฅผ ๋ฐฐ์ ํ๊ณ ์๊ฐํ ์ ์์
- ๊ฐ๋ฐ๋น๋ฅผ ์๋ผ๋ ค ์ฌ์ฉ์์๊ฒ ํ ์คํธ๋ฅผ ๋ฏธ๋ฃธ
- ์ฐจ๋ผ๋ฆฌ ๋ถ์์ ํ ์ ํ์ ์ฃผ๊ณ ํ ์ธ์ ํ๋๊ฒ ๋์ ์ ์์
- ๋จ, ์ธ๊ฐ์ ์๋ช
์ ์ง๊ฒฐ๋๋ ๊ฒฝ์ฐ์๋ ๊ฒฝ์ ๋
ผ๋ฆฌ๋ ์ค์ํ์ง ์์
- ์์ ๋ง์ง, ์์ ๊ณ์(๊ธฐ๊ณ๊ณตํ)
ํจ๊ณผ์ ์ธ ํ ์คํธ
- ์ต์ข ํ ์คํธ
- ๋ถํ ํ ์คํธ
- ๋์ค ํ๋๋ง ํ๋ค๋ฉด? ๋น์ฐํ ์ต์ข ํ ์คํธ
- ์ ํ ๊ท๋ชจ๊ฐ ์ปค์ง๋ฉด ์ต์ข ์ ํ๋ง ํ ์คํธํ ์๋ ์๋ค.
- ์ ๋นํ ํฌ๊ธฐ๋ก ๋ถ๋ฆฌํ๊ณ ๊ฐ ๋ถ๋ถ ๋์ ํ ์คํธ๊ฐ ๋ ํจ๊ณผ์ ์
- ํ ์คํธ๋ ์ ๋ฌธ๊ฐ์๊ฒ ๋งก๊ธฐ์.
- mock ๊ฐ์ฒด๋ง๋๋ ๋น์ฉ๋ ๋๋ฌด ๋์, api ํต์ ์ ํด์ผํ ์๋ ์์
๋จ์ ํ ์คํธ์ ์ฉ๋
- ์์ ์ด ์ค์ํ๋ค๋ฉด ๊ณ ๋ คํ์.
- ๊ผผ๊ผผํ ํ ์คํธํ๊ธฐ ์ํด ๊ฐ์ฑ๋น ์ข์ง ์์ TDD๊น์ง ์ถ๊ฐํ์.
- ๋ค๋ง ์ด ๊ฒฐ์ ์ ํ๋ก์ ํธ ๊ด๋ฆฌ์๊ฐ ํด์ผํจ(์ฑ ์์)
- ์ ๋ฌธ ํ
์คํธ ์ธ๋ ฅ์ด ์๋ ๊ฒฝ์ฐ
- ํ ์คํฐ ๋์ ํ๋ก๊ทธ๋๋จธ์๊ฒ ํ๋๊ฑด ๊ฐ์ฑ๋น๊ฐ ์๋ง์
- ์คํ ์์ค ํ๋ก์ ํธ์ธ ๊ฒฝ์ฐ ์งํ
๋จ์ ํ ์คํธ๊ฐ ๋์ ๊ฒ์ ์๋
- ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๊ด๋ จ ์๋ ์๊ณ ๋ฆฌ์ฆ ๊ด๋ จ์ด๋ผ๋ฉด ์ฝ๊ฒ ์ฌ์ฉ๊ฐ๋ฅ
- ๋งค๊ฐ๋ณ์ ๋ง์ผ๋ก ํจ์์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ ๊ฐ๋ฅํ ๊ฒฝ์ฐ
- ๋ ๋ฆฝ์ ์ธ ๋ชจ๋๋ก ๋ง๋ค๊ฒ ๋๋ ๊ฒฝํฅ์ด ์์
๋จ์ ํ ์คํธ๋ฅผ ์ํ ๋คํ์ฑ
- Mock ๊ฐ์ฒด๊ฐ ํ์ํด?
- ๋ชจ๋ ๊ฑธ ์ธํฐํ์ด์ค๋ก ๋ง๋ค์ด์ผ ํ๋ ์ด์ ๊ฐ ๋์๋ค!
- ์ฆ, ๋จ์ํ ์คํธ mock๊ฐ์ฒด๋ฅผ ์ํด ์ธํฐํ์ด์ค๋ก ๋ง๋ค์ด์ผ ํ๋ค๊ณ ์ฃผ์ฅ
- ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ๋ ์ ํ๊ณผ ์๊ด์์ด ์ธํฐํ์ด์ค๋ฅผ?
๋์ ํ์ ๊ณผ TDD
- ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง 100%๋ ์ค์ํ๋ค.
- ๊ทธ๋์ผ ๋์ ํ์ ์ธ์ด๋ฅผ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ?
- ์ ํ ๋ง๋ค๋ ๋์ ํ์ ์ธ์ด๋ ์คํ๋ ค ํผํด์ผ ํจ
- ์ค์๊ฐ ๋ง์ด ๋์ด
- pythonโฆ
- javascriptโฆ โ Typescript
์ ๋ฆฌ
- ๋ฌด์กฐ๊ฑด, ๋ชจ๋ ๊ณผ ๊ฐ์ ๋จ์ด๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์กฐ์ฌํ์.
- ๊ถ์์ ํธ์ํ๋ ์ฃผ์ฅ์ ๊ฒฝ๊ณํ์.
- ๊ฒฝ์ ๋ ผ๋ฆฌ์์ ๋ฒ์ด๋ ๊ฒ์ ํ์ค์ ์ผ๋ก ๋ง์ด ์๋๋ค.
- ๊ฒฝ์ ๋ ผ๋ฆฌ ๊ธฐ๋ฐ์์ ์ ํ์ ๋ง๋ค์ด๋ด๋ ๊ฒ์ด ์์ง๋์ด์ ์ญ๋์ด๋ค.
- ์ ํ์ ํน์ฑ, ๋น์ฆ๋์ค ์ํฉ, ์ฐ๊ตฌ, ์์ฐ๋ฑ์ ์ํฉ์ ๋ฐ๋ผ ๋ฐฉ๋ฒ๋ก ์ ๋ฌ๋ผ์ง๋ค.