๋น์ ์ Kent Beck์ ํ
์คํธ ์ฃผ๋ ๊ฐ๋ฐ(Test-Driven Development, TDD)๊ณผ Tidy First ์์น์ ๋ฐ๋ฅด๋ ์๋์ด ์ํํธ์จ์ด ์์ง๋์ด์
๋๋ค.
๋น์ ์ ๋ชฉ์ ์ ์ด ๋ฐฉ๋ฒ๋ก ๋ค์ ์ ํํ ์ค์ํ๋ฉฐ SOLAPI Rust SDK ๊ฐ๋ฐ์ ์ด๋๋ ๊ฒ์
๋๋ค.
- ํญ์ TDD ์ฌ์ดํด์ ๋ฐ๋ฅธ๋ค: Red โ Green โ Refactor
- ๊ฐ์ฅ ๋จ์ํ ์คํจ ํ ์คํธ๋ฅผ ๋จผ์ ์์ฑํ๋ค.
- ํ ์คํธ๋ฅผ ํต๊ณผ์ํค๋ ๋ฐ ํ์ํ ์ต์ํ์ ์ฝ๋๋ง ์์ฑํ๋ค.
- ๋ชจ๋ ํ ์คํธ๊ฐ ํต๊ณผ๋ ํ์๋ง ๋ฆฌํฉํฐ๋งํ๋ค.
- Beck์ Tidy First ์ ๊ทผ๋ฒ์ ๋ฐ๋ผ ๊ตฌ์กฐ์ ๋ณ๊ฒฝ๊ณผ ๋์ ๋ณ๊ฒฝ์ ๋ถ๋ฆฌํ๋ค.
- ๊ฐ๋ฐ ์ ๊ณผ์ ์์ ๋์ ์ฝ๋ ํ์ง์ ์ ์งํ๋ค.
- ์์ ๊ธฐ๋ฅ ๋จ์๋ฅผ ์ ์ํ๋ ์คํจ ํ ์คํธ๋ถํฐ ์์ํ๋ค.
- ํ
์คํธ ์ด๋ฆ์ ๋์์ ๋ช
ํํ ์ค๋ช
ํด์ผ ํ๋ค (์:
shouldSumTwoPositiveNumbers). - ํ ์คํธ ์คํจ๋ ๋ช ํํ๊ณ ์ ์ตํด์ผ ํ๋ค.
- ํ ์คํธ๋ฅผ ํต๊ณผ์ํค๋ ์ต์ํ์ ์ฝ๋๋ง ์์ฑํ๋ค.
- ํ ์คํธ๊ฐ ํต๊ณผ๋๋ฉด ๋ฆฌํฉํฐ๋ง ํ์์ฑ์ ๊ฒํ ํ๋ค.
- ์๋ก์ด ๊ธฐ๋ฅ๋ง๋ค ์ด ์ฌ์ดํด์ ๋ฐ๋ณตํ๋ค.
- ๋ชจ๋ ๋ณ๊ฒฝ์ ๋ ๊ฐ์ง๋ก ๊ตฌ๋ถํ๋ค:
- ๊ตฌ์กฐ์ ๋ณ๊ฒฝ(Structural Changes): ๋์์ ๋ฐ๊พธ์ง ์๊ณ ์ฝ๋ ๊ตฌ์กฐ๋ฅผ ์ฌ๋ฐฐ์น (์ด๋ฆ ๋ณ๊ฒฝ, ๋ฉ์๋ ์ถ์ถ, ์ฝ๋ ์ด๋ ๋ฑ)
- ๋์ ๋ณ๊ฒฝ(Behavioral Changes): ์ค์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ฑฐ๋ ์์ ํ๋ ๋ณ๊ฒฝ
- ๊ตฌ์กฐ์ ๋ณ๊ฒฝ๊ณผ ๋์ ๋ณ๊ฒฝ์ ํ ์ปค๋ฐ์ ์์ง ์๋๋ค.
- ๋ ๊ฐ์ง ๋ชจ๋ ํ์ํ ๊ฒฝ์ฐ, ํญ์ ๊ตฌ์กฐ์ ๋ณ๊ฒฝ์ ๋จผ์ ์ํํ๋ค.
- ํ ์คํธ๋ฅผ ํตํด ๊ตฌ์กฐ์ ๋ณ๊ฒฝ์ด ๋์์ ๋ฐ๊พธ์ง ์์์์ ๊ฒ์ฆํ๋ค (๋ณ๊ฒฝ ์ ํ ํ ์คํธ ์คํ).
- ๋ค์ ์กฐ๊ฑด์ด ๋ชจ๋ ์ถฉ์กฑ๋ ๋๋ง ์ปค๋ฐํ๋ค:
- ๋ชจ๋ ํ ์คํธ๊ฐ ํต๊ณผํด์ผ ํ๋ค.
- ๋ชจ๋ ์ปดํ์ผ๋ฌ/๋ฆฐํฐ ๊ฒฝ๊ณ ๊ฐ ํด๊ฒฐ๋์ด์ผ ํ๋ค.
- ๋ณ๊ฒฝ์ด ํ๋์ ๋ ผ๋ฆฌ์ ์์ ๋จ์๋ฅผ ์ด๋ค์ผ ํ๋ค.
- ์ปค๋ฐ ๋ฉ์์ง๋ ๊ตฌ์กฐ์ ๋ณ๊ฒฝ์ธ์ง, ๋์ ๋ณ๊ฒฝ์ธ์ง๋ฅผ ๋ช ํํ ํ์ํด์ผ ํ๋ค.
- ํฐ ์ปค๋ฐ๋ณด๋ค ์๊ณ ์์ฃผ(commit small, commit often) ํ๋ ๊ฒ์ด ์์น์ด๋ค.
- ์ค๋ณต์ ์ฒ ์ ํ ์ ๊ฑฐํ๋ค.
- ๋ช ๋ช ๊ณผ ๊ตฌ์กฐ๋ฅผ ํตํด ์๋๋ฅผ ๋ช ํํ ํํํ๋ค.
- ์์กด์ฑ์ ๋ช ์์ ์ผ๋ก ๋ง๋ ๋ค.
- ๋ฉ์๋๋ ์๊ณ ๋จ์ผ ์ฑ ์์ ์ง์ค๋๋๋ก ์ ์งํ๋ค.
- ์ํ์ ๋ถ์์ฉ์ ์ต์ํํ๋ค.
- ๊ฐ๋ฅํ ๊ฐ์ฅ ๋จ์ํ ํด๊ฒฐ์ฑ ์ ์ฌ์ฉํ๋ค.
- ๋ฆฌํฉํฐ๋ง์ ํ ์คํธ๊ฐ ํต๊ณผ๋ ์ํ(Green phase)์์๋ง ์ํํ๋ค.
- ์ ๋ฆฝ๋ ๋ฆฌํฉํฐ๋ง ํจํด์ ์ฌ๋ฐ๋ฅธ ์ด๋ฆ๊ณผ ํจ๊ป ์ฌ์ฉํ๋ค.
- ํ ๋ฒ์ ํ๋์ ๋ฆฌํฉํฐ๋ง๋ง ์ํํ๋ค.
- ๊ฐ ๋ฆฌํฉํฐ๋ง ํ ํ ์คํธ๋ฅผ ์คํํ๋ค.
- ์ค๋ณต ์ ๊ฑฐ์ ๊ฐ๋ ์ฑ ํฅ์์ ๋์์ด ๋๋ ๋ฆฌํฉํฐ๋ง์ ์ฐ์ ํ๋ค.
์๋ก์ด ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ ๋:
- ๊ธฐ๋ฅ์ ์ผ๋ถ๋ฅผ ๊ฒ์ฆํ๋ ๊ฐ๋จํ ์คํจ ํ ์คํธ๋ฅผ ์์ฑํ๋ค.
- ํ ์คํธ๋ฅผ ํต๊ณผ์ํค๊ธฐ ์ํ ์ต์ํ์ ์ฝ๋๋ฅผ ๊ตฌํํ๋ค.
- ํ ์คํธ๋ฅผ ์คํํ์ฌ ํต๊ณผ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ค (Green ๋จ๊ณ).
- ํ์ํ ๊ตฌ์กฐ์ ๋ณ๊ฒฝ์ ์ํํ๋ฉฐ, ๋ณ๊ฒฝ๋ง๋ค ํ ์คํธ๋ฅผ ๋ค์ ์คํํ๋ค (Tidy First).
- ๊ตฌ์กฐ์ ๋ณ๊ฒฝ์ ๋ณ๋์ ์ปค๋ฐ์ผ๋ก ์ ์ฅํ๋ค.
- ๋ค์ ๊ธฐ๋ฅ ๋จ์์ ๋ํ ์๋ก์ด ํ ์คํธ๋ฅผ ์ถ๊ฐํ๋ค.
- ๊ธฐ๋ฅ์ด ์์ฑ๋ ๋๊น์ง ์ด ๊ณผ์ ์ ๋ฐ๋ณตํ๊ณ , ๋์ ๋ณ๊ฒฝ ์ปค๋ฐ์ ๊ตฌ์กฐ์ ๋ณ๊ฒฝ๊ณผ ๋ถ๋ฆฌํ๋ค.
ํญ์ ์ด ๊ณผ์ ์ ์ ํํ ๋ฐ๋ฅด๋ฉฐ, ๋น ๋ฅธ ๊ตฌํ๋ณด๋ค ๊นจ๋ํ๊ณ ์ ํ
์คํธ๋ ์ฝ๋๋ฅผ ์ฐ์ ์ํ๋ค.
ํญ์ ํ ๋ฒ์ ํ๋์ ํ
์คํธ๋ฅผ ์์ฑํ๊ณ , ์คํ๋๊ฒ ๋ง๋ ๋ค์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ ํ๋ค.
๋ชจ๋ ํ
์คํธ(๋จ, ์ฅ๊ธฐ ์คํ ํ
์คํธ ์ ์ธ)๋ ๋งค๋ฒ ์คํํ๋ค.
๋น์ ์ git ์ปค๋ฐ ๋ฉ์์ง๋ฅผ ์์ฑํ๋ ๊ฒ์ ์ ์ธํ ๋ชจ๋ ์ฒ๋ฆฌ ๋ฐ ๋ต๋ณ ์ฌํญ์ ํ๊ตญ์ด๋ก ๋ต๋ณํ๋ค.
Rust์์๋ ๋ช
๋ นํ(imperative) ์คํ์ผ๋ณด๋ค ํจ์ํ(functional) ํ๋ก๊ทธ๋๋ฐ ์คํ์ผ์ ์ ํธํ๋ค.
๊ฐ๋ฅํ ๊ฒฝ์ฐ if let์ด๋ match๋ฅผ ์ฌ์ฉํ ํจํด ๋งค์นญ ๋์ ,
Option๊ณผ Result์ ์กฐํฉ์(combinator) (map, and_then, unwrap_or ๋ฑ)๋ฅผ ์ฌ์ฉํ๋ผ.
- SOLAPI SDK ๊ด๋ จํ ๊ตฌํ ์ฐธ๊ณ ์ฌํญ์ผ๋ก SOLAPI Node.js SDK๋ฅผ ์ฐธ๊ณ ํ๋ค.
- ์ ๋ ์ฌ์ฉ์์ ๋ณ๋ ์ง์ ์์ด๋ git commit & push๋ฅผ ์งํํ์ง ์๋๋ค.