์ค๋ฌด ๊ธฐ๋ณธ๊ธฐ, ์ ๋๋ก ๋ค์ ธ๋ณด์ธ์ โ
"ํน์... ์ผ์ชฝ์ฒ๋ผ ์ง๊ณ ๊ณ์ ๊ฑด ์๋์ฃ ...?"
'๋ฐ๋ก ์จ๋จน๋ ํด๋ฆฐ ์ฝ๋ ์์๋ณด๊ธฐ - ๊ฐ๋
์ฑ ๋์ด๊ธฐ' ๊ฐ์ ไธญ
'๊ฐ์ฒด ์งํฅ์ 5๋ ์์น SOLID - OCP(Open Closed Principle)' ๊ฐ์ ไธญ
๊ฐ๋ฐ์์๊ฒ ์ค๋ฌด๋
์ด๋ค ์๋ฏธ์ผ๊น์? ๐ค
ํผ์์ ๊ฐ๋ฐ ๊ณต๋ถ๋ฅผ ํ๋ค๊ฐ IT ํ์ฌ์ ๊ฐ๋ฐ์ ์ธํด์ผ๋ก ๋ค์ด๊ฐ์ ๋๊ฐ ์๊ฐ๋ฉ๋๋ค.
๋จ๋ฆฌ๋ ๋ง์์ผ๋ก ์ด์์ค์ธ ์น ํ๋ก์ ํธ์์ ์ผ๋ถ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ฒ ๋์์ต๋๋ค. ํผ์ ๊ฐ๋ฐํ์ ๋ ์ฒ๋ผ ๋น ๋ฅด๊ฒ ๊ฐ๋ฐํ๊ธฐ ์ํด์ ํ๋์ ํจ์๋ ํด๋์ค์ ์ฝ๋๋ฅผ ๋ชจ์๋๊ณ ํ
์คํธ ์ฝ๋๋ ๋ฐ๋ก ์์ฑํ์ง ์์์์ฃ . ๊ทธ๋ฌ๋ ๋์ค์ ๋ง์ ์์ ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ๊ณ ๋์ ์ค๋ฌด์์ ์ฝ๋๋ฅผ ์งค ๋ ์ ๊ฒฝ์ธ ๊ฒ๋ค์ด ๋ง๋ค๋ ๊ฑธ ๋ผ์ ๋ฆฌ๊ฒ ๋๋ผ๊ฒ ๋์์ต๋๋ค.
์, ์ด๋ ๊ฒ ๋ง์ ๊ฑธ ๋์น๊ณ ์์๋ค๋!
์ง๊ธ์ ํ์ฌ์์ ํ๋ก์ ํธ๋ฅผ ๊ฐ๋ฐํ ๋, ์๊ตฌ์ฌํญ์ ๋ง๊ฒ ์ปดํฌ๋ํธ์ ์ฑ
์์ ์ ๋ถ๋ฆฌํ๊ณ ์ฃผ์ ๋ก์ง์ ํ
์คํธ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค. ๊ทธ๋ ๊ฒ ๋๋ฉด ์ํํธ์จ์ด๋ฅผ ๋ ์์ ํ๊ฒ ์ด์ & ์ ์ง๋ณด์ํ ์ ์์ผ๋ฉฐ ๋ค๋ฅธ ๊ฐ๋ฐ์๋ค๋ ์ฝ๋๋ฅผ ์ฝ๋ ์๊ฐ์ด ์ค์ด๋ค ์ ์๊ธฐ ๋๋ฌธ์ด์ฃ . ๋๋ฌธ์ ํ์ฌ์์๋ ์ฌ๋ฌ ๋ช
์ ๊ฐ๋ฐ์๋ค์ด ํจ๊ป ํ์
์ ํด์ผ ํ๊ณ , ์๋น์ค๋ฅผ ์์ ์ ์ผ๋ก ์ด์ํ ์ ์๋ ์ง์ ๊ฐ๋ฅํ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ ๊ธฐ๋ณธ๊ธฐ๊ฐ ์ค์ํ๊ฒ ์ฌ๊ฒจ์ง๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ค๋ฌด์์ ํ์๋ก ํ๋ ๊ฐ๋ฐ์์ ๊ธฐ๋ณธ๊ธฐ๋ ๋ฌด์์ด ์์๊น์? ๋ฌผ๋ก ๊ฐ๋ฐ ๋ถ์ผ์ ๋ง๋ ํ๋ ์์ํฌ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๋ค๋ฃจ๋ ์คํฌ๋ ์ค์ํ๊ฒ ์ง๋ง, ํ
์คํธ ์ฝ๋ ์์ฑ์ด๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ฒ๋ผ ์ง์๊ฐ๋ฅํ ์ํํธ์จ์ด๋ฅผ ํจ๊ป ๊ฐ๋ฐํ ์ ์๋๋ก ๋๋ ์ญ๋์ด ์ค์ํฉ๋๋ค.
์ค๋ฌด์ ๊ผญ ํ์ํ
๊ธฐ๋ณธ๊ธฐ๋ฅผ ๋ฐฐ์ธ ์ ์๋๋ก ๐ช
๋ฑ๋ฑํ ์ด๋ก ์ค์ฌ์ด ์๋ ์ฝ๋์ ์ค์ต์ด ์ค์ฌ์ด ๋์ด ๊ฐ์๊ฐ ์งํ๋ฉ๋๋ค. ๐จโ๐ป
'ํ
์คํธ ์ฝ๋ ์์ฑ์ ์ํ ๊ธฐ๋ณธ๊ธฐ ๋ค์ง๊ธฐ - ํ
์คํธ ๋๋ธ ์ข
๋ฅ ์์๋ณด๊ธฐ' ๊ฐ์ ์๋ฃ ไธญ
'ํ์ฌ์์ ์๊ณ ์์ด์ผ ํ ๊ธฐ๋ณธ ๊ฐ๋ฐ ์ง์๋ค - ๋ฉํฐ ์ค๋ ๋์ ๋ฉํฐ ํ๋ก์ธ์ค' ๊ฐ์ ์๋ฃ ไธญ
SOLID, ๋์์ฑ, ํ
์คํธ Mock ๋ฑ ๊ตฌ๊ธ๋ง ํด๋ณด๋ฉด ์ด๋ก ์ค์ฌ + ์ด๋ ค์ด ์ฉ์ด๋ก ์์ฑ๋ ๊ธ๋ค์ด ๋ง์ต๋๋ค. ๋ณธ ๊ฐ์์์๋ ๋ณธ ๊ฐ๋
์ ์ฝ๊ฒ ์ดํดํ ์ ์๋๋ก ์ ์ ํ ์์์ ์ฝ๋ ์ค์ฌ์ผ๋ก ์์
์ ์งํํฉ๋๋ค.
- โ
๊ฐ๋
์ ์ฝ๊ฒ ์ดํดํ ์ ์๋๋ก ๋๋ถ๋ถ์ ์์
์๋ฃ๋ ์ฝ๋ ์ค์ฌ์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
- โ
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ, ํ
์คํธ ์ฝ๋, ์ํํธ์จ์ด ์ํคํ
์ฒ ํจํด์ ๊ฒฝ์ฐ 3๊ฐ์ ํ๋ก์ ํธ๋ฅผ ํตํด ์ค์ต์ ์งํํ ์ ์์ต๋๋ค.
๊ฐ์๋ฅผ ๋ฃ๊ณ ๋๋ฉด
ํ ๋จ๊ณ ์์๊ฐ ์ ์์ด์ ๐ฉ
Before & After๋ฅผ ํ์ธํด์ฃผ์ธ์!
์ด๋ฐ ๊ธฐ๋ณธ๊ธฐ๋ค์ ์ฌ์ค ํ์ฌ์์ ์ผ์ ํ๋ค๊ณ ์์ฐ์ค๋ฝ๊ฒ ์๊ธฐ๋ ๊ฒ์ ์๋๋๋ค. ๋ณธ์ธ์ ์ฝ๋๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํด ๋์์์ด ๋
ธ๋ ฅํ๊ณ ํ์ตํ ์๊ฐ์ด ํ์ํฉ๋๋ค. ์ด ๊ฐ์๋ ์์ผ๋ก์ ์ฌ๋ฌ๋ถ์ ์ฑ์ฅ์ ์ํ ์ด์์ ๋ค์ง๋ ๋ฐ ๋์์ด ๋ ๊ฒ์ด๋ผ ๋ฏฟ์ต๋๋ค. ๐
์ปค๋ฆฌํ๋ผ์
ํ์ธํด๋ณด์ธ์! ๐
#1.
๋ฐ๋ก ์จ๋จน๋
ํด๋ฆฐ์ฝ๋ ์์๋ณด๊ธฐ
ํด๋ฆฐ์ฝ๋ ์ค ๋น ๋ฅด๊ฒ ์ ์ฉํด๋ณผ ์ ์๋ ๋ด์ฉ์ ์ฝ๋ ์์์ ํจ๊ป ์์๋ด
๋๋ค.
- ๋ค์ด๋ฐ, ์ฃผ์ & ํฌ๋งทํ
- ํจ์ & ํด๋์ค
- ์๋ฌ ํธ๋ค๋ง
- ๊ฐ๋
์ฑ ๋์ด๊ธฐ
#2.
๊ฐ์ฒด ์งํฅ
ํ๋ก๊ทธ๋๋ฐ
ํต์ฌ ๋ค์ง๊ธฐ
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ 4๊ฐ์ง ํน์ฑ๊ณผ ํต์ฌ ๊ฐ๋
(์์กด์ฑ, ์์ง๋, ๊ฒฐํฉ๋ ๋ฑ)์ ์ฝ๋ ์์์ ํจ๊ป ์์๋ด
๋๋ค.
- ์ ์ฐจ ์งํฅ, ๊ฐ์ฒด ์งํฅ, ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์๋์ ํ๋ฆ ๋ฐ ์ฐจ์ด์
- ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ํ ํต์ฌ ๊ฐ๋
๋ค ์ตํ๊ธฐ
- ๊ฐ์ฒด ์งํฅ์ 5๋ ์์น SOLID๋ฅผ Before&After๋ก ์์๋ณด๊ธฐ
- (์ค์ต) ๋ ๊ฑฐ์ ์ฝ๋๋ฅผ ๋ฆฌํฉํ ๋ง ํ๋ฉด์ ๊ฐ์ฒด ์งํฅ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ
#3.
ํ
์คํธ ์ฝ๋
์์ฑ์ ์ํ
๊ธฐ๋ณธ๊ธฐ ๋ค์ง๊ธฐ
์ค๋ฌด์์ ๊ผญ ์์์ผ ํ ํ
์คํธ ์ฝ๋ ์์ฑ์ ์ํ ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋
๋ค์ ์ฝ๋์ ํจ๊ป ์ตํ๋ด
๋๋ค.
- ํ
์คํธ ๊ธฐ๋ณธ ์ดํดํ๊ธฐ
- ํ
์คํธ ์ข
๋ฅ(Unit, Integration, E2E)
- ์ธ๋ถ ์์กด์ฑ์ ๋์ฒดํ๋ ํ
์คํธ ๋๋ธ
- (์ค์ต) ์ ๋ ํ
์คํธ, ํตํฉ ํ
์คํธ๋ฅผ ์ง์ ์์ฑํ๊ณ ์ธ๋ถ ์์กด์ฑ ๋์ฒดํ๊ธฐ
#4.
๋ ๋์ ์ฝ๋
์ค๊ณ๋ฅผ ์ํด,
์ํํธ์จ์ด ์ํคํ
์ฒ
๊ธฐ์ด์ ํจํด ์ดํดํ๊ธฐ
๋ ๋์ ์ฝ๋ ์ค๊ณ๋ฅผ ์ํด ์ํํธ์จ์ด ์ํคํ
์ฒ๊ฐ ํ์ํ ์ด์ ์ ๋ํ์ ์ธ ์ํคํ
์ฒ ํจํด์ ์์๋ด
๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ์ด์ด๋ฅผ ๋ถ๋ฆฌํ๊ณ ์์กด์ฑ ๋ฐฉํฅ์ ๊ณ ๋ คํ์ฌ ํจ๊ป ํ๋ก์ ํธ๋ฅผ ์ค๊ณํด ๋ด
๋๋ค.
- ์ํํธ์จ์ด ์ํคํ
์ฒ๊ฐ ํ์ํ ์ด์
- ๋ํ์ ์ธ ์ํํธ์จ์ด ์ํคํ
์ฒ ํจํด - ๋ ์ด์ด๋ ์ํคํ
์ฒ, ํฅ์ฌ๊ณ ๋ ์ํคํ
์ฒ, ํด๋ฆฐ ์ํคํ
์ฒ
- (์ค์ต) ํด๋ฆฐ ์ํคํ
์ฒ์ ํ
์คํธ ์ฝ๋๋ฅผ ์ ์ฉํ ํ๋ก์ ํธ ๊ตฌ์ถํ๊ธฐ
#5.
ํ์ฌ์์
์๊ณ ์์ด์ผ ํ
๊ฐ๋ฐ ์ง์๋ค
ํ์ฌ์์ ์๊ณ ์์ผ๋ฉด ์ข์ ๊ฐ๋ฐ ์ง์๋ค์ ์์๋ด
๋๋ค.
- ํจ์จ์ ์ผ๋ก ํ๋ก๊ทธ๋จ ์ด์ํ๊ธฐ(๋ณ๋ ฌ์ฑ๊ณผ ๋์์ฑ, ๋๊ธฐ์ ๋น๋๊ธฐ ๋ฑ)
- ์ฝ๊ณ ๋น ๋ฅด๊ฒ ํ๋ก๊ทธ๋จ ๋ฐฐํฌํ๊ธฐ(๊ฐ์ํ ๊ธฐ์ , CI/CD ๋ฑ)
- ์๋น์ค์ ํต์ฌ ์์, ํ์๊ฐ์
๊ณผ ๋ก๊ทธ์ธ ์ดํดํ๊ธฐ(์ฟ ํค์ ์ธ์
, ์ธ์ฆ ๋ฑ)
#6.
ํ์
์ ํ์ Git,
์ค์ ์์ ์์ฃผ
์ฌ์ฉ๋๋ ๋ช
๋ น์ด
Git์ ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋
๊ณผ ์ค์ ์์ ์์ฃผ ์ฌ์ฉ๋๋ ์ปค๋งจ๋๋ค์ ํจ๊ป ์์๋ด
๋๋ค.
- Git์ ์์
๊ณต๊ฐ๊ณผ ๋ธ๋์น ์ดํดํ๊ธฐ
- ์ค์ ์์ ์์ฃผ ์ฌ์ฉ๋๋ ๋ช
๋ น์ด ์์๋ณด๊ธฐ(rebase, squash merge, reflog ๋ฑ)
- merge conflict ๋ค๋ฃจ๊ธฐ
์ด ๊ฐ์๋ง์ ํน๋ณํ ์ฅ์ โ๏ธ
ํ๋, ํ์ํ ์ด์ ๋ฅผ ๋ช
ํํ๊ฒ ์๋ ค์ฃผ๊ณ , ์ฝ๊ฒ ์ดํดํ ์ ์๋๋ก ์ค๋ช
ํฉ๋๋ค.
-
- ๋ฐฐ์ฐ๋ ๊ฐ๋
๋ค์ด ํ์ํ ์ํฉ&์ด์ ๋ฅผ ๋ช
ํํ๊ฒ ์ ์ํ๊ณ ์์ํฉ๋๋ค.
- ํ์
์์ ์ด๋ป๊ฒ ๊ฐ๋
๋ค์ด ์ฌ์ฉ๋๋์ง ํจ๊ป ์ค๋ช
ํฉ๋๋ค.
- ๋๋ถ๋ถ์ ์ฝ๋๊ฐ ์ค์ฌ์ด ๋์ด ๊ฐ๋
์ ์ค๋ช
ํ๋ฉฐ ์ดํดํ๊ธฐ ์ฝ๋๋ก ํ์ด ์ค๋ช
ํฉ๋๋ค.
๋, ์ง๊ด์ ์ด๊ณ ์ฝ๊ฒ ์ดํดํ ์ ์๋ ์ธ์ด ํ์ด์ฌ(Python)์ผ๋ก ์์
ํฉ๋๋ค.
-
- ํ์ด์ฌ์ ๋ชจ๋ฅด๋๋ผ๋ ์ฝ๊ฒ ์ดํดํ ์ ์๋๋ก ์์
์ ๊ตฌ์ฑํ์ต๋๋ค.
- ๊ฐ๋
์ ์๋ ค์ฃผ๊ธฐ ์ํด์ ์์์ผ ํ ์ต์ํ์ ํ์ด์ฌ ๋ฌธ๋ฒ๋ง ํ์ฉํฉ๋๋ค. ๋ฐ๋ผ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ํ๋๋ฅผ ์ต์ํ๊ฒ ๋ค๋ฃฐ ์๋ง ์๋ค๋ฉด ์์
์ ๋ฃ๋๋ฐ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
์
, ๋ชจ๋ ๊ฐ์์ ์ค์ฌ์ด ๋๋, ์์ธํ ์ค๋ช
๊ณผ ์ฝ๋ ์์๊ฐ ๋ด๊ธด ์๋ฃ์ง์ ์ ๊ณตํฉ๋๋ค.
๋ ์์ธํ ๋ด์ฉ์ ๊ฐ์์์ ์ง์ ํ์ธํด ๋ณด์ธ์ ๐
์ง์๊ณต์ ์ ๊ทธ๋ฉ์
ํน๋ณํ ์๊ฐํ ๐
์ง๋ ๊ฐ์, ๋น์ ๊ณต์๋ฅผ ์ํ ์ง์ง ์
๋ฌธ ์ฌ์ธ์ ๊ฐ๋ฐ ํด๋์ค์ IT ํ์ฌ์์ ์ด์๋จ๊ธฐ ์ํ ๋ชจ๋ ๊ฐ๋ฐ ์ง์ A to Z์ ๋จ๊ฒจ์ฃผ์ ์๊ฐํ์
๋๋ค.
์์ฃผ ๋ฌป๋ ์ง๋ฌธ์ด
๊ถ๊ธํ๋ค๋ฉด? ๐ฌ
Q. ๊ฐ๋ฐ์ ์ฒ์ ๋ฐฐ์ฐ๋๋ฐ ์ด๊ฑธ ๋ค์ด๋ ๋๋์?
์์ฝ์ง๋ง ๋ณธ ๊ฐ์์ ์๊ฐ ๋์์ ํ๋์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ต์ํ๊ฒ ์ฌ์ฉํ ์ ์์ด์ผ ํฉ๋๋ค. ๋ํ ํด๋์ค(class)๋ฅผ ํ์ฉํ์ฌ ํ๋ ์ด์์ ํ ์ด ํ๋ก์ ํธ๋ฅผ ์งํํด๋ณธ ๊ฒฝํ์ด ์๋ ๋ถ์๊ฒ ์ถ์ฒํฉ๋๋ค.
Q. ์ ๊ฐ ํ์ด์ฌ์ ์ ๋ชจ๋ฅด๋๋ฐ ๊ด์ฐฎ์๊น์?
๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋๋ผ๋ ์ต์ํ๊ฒ ์ฌ์ฉํ ์ ์๋ค๋ฉด ์ถฉ๋ถํฉ๋๋ค.
๋ณธ ๊ฐ์๋ฅผ ์ดฌ์ํ ๋ ํ์ด์ฌ์ ๊ฐ์๋ฅผ ์ํ ํ๋์ ๋๊ตฌ๋ผ๊ณ ์๊ฐํ์ต๋๋ค. ๊ทธ๋์ ํ์ด์ฌ ๋ฌธ๋ฒ์ ์ต์ํ๋ง ํ์ฉํด์ ๊ฐ๋
์ ์ค๋ช
ํ์์ต๋๋ค.. ๋ํ ์ด๋ฐ์ ์ด๋ค ๋ฌธ๋ฒ๋ค์ ์ตํ์ผ ํ๋์ง ๋น ๋ฅด๊ฒ ๊ฐ์ด๋ํด๋๋ฆฌ๊ณ ์์ต๋๋ค.