JDD ๋ ์ฝ๋ ์์ฑ๋ณด๋ค ๋ณ๋ช ๊ฑฐ๋ฆฌ๋ฅผ ๋ฏธ๋ฆฌ ์๊ฐํ์ฌ ์๋ง์ ๋ฒ๊ทธ๋ฅผ ์์ฑํ ์ ์๋ ๊ฐ๋ฐ ๋ฐฉ๋ฒ๋ก ์ด๋ค.
JDD ๋ ์๋์ ๊ฐ์ ์ค์ ๊ฐ์น๋ฅผ ๋ฐ๋ฅธ๋ค.
์ฐ๋ฆฌ๋
- ๋จ์ด ์ฐ๋ ๊ธฐ์ ๋ณด๋ค๋ ๋ด ๊ฒ์
- Clean ํ ์ฝ๋๋ณด๋ค๋ Tricky ํ ๊ฒ์
- ๋ฒ๊ทธ Fix ๋ณด๋ค๋ ๋ณ๋ช
์
- ๊ท์ฐฎ์๋ณด๋ค๋ ํธํจ์
๊ฐ์น ์๊ฒ ์ฌ๊ธด๋ค. ์ด ๋ง์, ์ผ์ชฝ์ ์๋ ๊ฒ๋ค์ ๊ท์ฐฎ๊ณ ์ค๋ฅธ์ชฝ์ ์๋ ๊ฒ๋ค์ ํธํ๊ธฐ ๋๋ฌธ์ ๋ ๋์ ๊ฐ์น๋ฅผ ๋๋ค๋ ๊ฒ์ด๋ค.
JDD ๋ฅผ ์ค์ฒํ๊ธฐ ์ํด์๋ ์ฌ์ง ์๊ณ ํ๋ํ ๊ธธ์ด์ง๋ง ๊พธ์คํ๊ฒ ๋ ธ๋ ฅํด์ผ ํ๋ค. ์ค์ํ ๊ฒ์ ๊ด๋ จ๋ ํํ ์ฉ์ด๋ฅผ ๋ค๋จน์ด๋ฉด์ ์ค์ ๋ฌธ์ ์ ๋ํ ๋ต๋ณ์ ํํผํ๋ ๊ฒ์ด๋ค. ๊พธ์คํ ์ฐ์ต์ด ํ์ํ๋ค.
JDD ์ ๊ธฐ์ด๊ฐ ๋๋ ์์์ ํญ์ ๋ช ์ฌํ์.
์ ๋ .. ์๋ ์ฐธ๋ ๋ฆฌ๋๋ ๋ถํ์ง์์ ๊ดด๋กญํ์ง ์๋๋ค.
- ๋๊ตฐ๊ฐ PR ์ ํ๋ค๋ ์ฌ์ค ์์ฒด๊ฐ ๋ณด๊ธฐ ์ข์ ์ผ์ด๋ค. LGTM(Looks Good To Me).
- ๋๊ตฐ๊ฐ PR ์ ๋ ๋ฆฌ๋ฉด ์๋์ผ๋ก LGTM ๋ฅผ ๋ ๋ฆฌ๋ CI/CD ๋ฅผ ํ์ฉํด๋ผ
๋ฐฉ์ด์ ํ๋ก๊ทธ๋๋ฐ์ ๊ฐ๋ฐ์์ ๊ธฐ๋ณธ ์์์ด๋ค.
- ๋ฐฉ์ด์ ํ๋ก๊ทธ๋๋ฐ์ ํด๋ผ ์ฝ๋๋ก ๋ฐฉ์ดํ์ง ๋ง๊ณ ๋์๊ฒ ๋ค์ด์ค๋ ์ผ๊ฐ์ ๋ฐฉ์ดํด๋ผ
- ์์
๋์ด ๋ง์๊ฐ? ๊ทธ๋ฅ ํน์ ํ
์คํธ ์ผ์ด์ค์์๋ง ๋์๊ฐ๊ฒ ์ง๊ณ ๋๋จธ์ง๋ "๊ณ ๋ํ" ์์
์์ ํ๋ค๊ณ ํด๋ผ. "๊ณ ๋ํ" ์์
์ ์ ์ด์งํ์.
์ผ ์ํ๋ ์ฒ ํธ์ํ ์ํ์ ์ํด ์ฑ๊ณผ ์์ฃผ๋ก ํ๋ํด์ผ ํ๋ค.
๋์์ฑ์ ์ด๋ ต๊ณ , ์ฑ๊ณผ๊ฐ ๋์ ๋์ง ์๋๋ค.
- ๋ฉํฐ ์ฐ๋ ๋ ํ๊ฒฝ์์ ๊ฐ๋ณ ๋ณ์ ์ฌ์ฉ์ผ๋ก ์ธํ ์ค๋ฅ๋ ๊ฐ๋ ๋ฐ์ํ๋ค.
๊ฐ๋ ๋ฐ์ํ๋ค๋ ๊ฑฐ์ ๋นํ์ฌ ์ฌ์ฉ์ ๋๋ฌด ํธํ๋ค. ๋๊ฐ ๋ญ๋ผ๊ณ ํ๋ฉด ๊ทธ๋ด ์ผ ์๋ค๊ณ ํ๋ฉด ๊ทธ๋ง์ด๋ค.
- ์ด์ฉ ์ ์์ด ๋ฉํฐ ์ฐ๋ ๋ ์
๋ฌด๊ฐ ๋ค์ด์ค๋ฉด ์ธ์ด๋ฅผ ์ํ๋ฉด์ ์ด ์์
์ด ์ ์ด๋ ค์ด์ง ์ค๋ช
ํด๋ผ,
์ ์ด ์ธ์ด๋ Actor ๋ชจ๋ธ์ด ๋น์ฝํด์์, CSP(Communicating Sequential Processes) ๊ตฌํ์ฒด๊ฐ ์์ด์์, STM(Software Transactional Memory) ์ด ์ง์ ์ ๋ผ์์.
์์ ํ ์๋ก ์์
๊ธฐํ์ด ๋์ด๋๋ค.
- ๋น๋๊ธฐ ํ๋ฆ ๋ด์์ ๋๊ธฐํจ์๋ฅผ ๋ชฐ๋ ์จ๋ ๋๋ค. ๋์ค์ ๋ณ๋ชฉ ์ฐพ๋ ์์
+ ๋น๋๊ธฐ๋ก ๊ฐ์ ํ๋ ์ถ๊ฐ ์์
๊ธฐํ๊น์ง ํจ๊ป ๋ฐ์ ์ ์๋ค.
์ฐ๋ฆฌ์ ๋ณธ๋ถ์ ์์ง ๋ง์.
- ์ฃผ์์ ์ ๋ ์์ฑํ์ง ์๋๋ค. ๋๊ฐ ๋ญ๋ผ๊ณ ํ๋ฉด ํด๋ฆฐ์ฝ๋๋ฅผ ๋ค๋จน์ด์. ๋ฌผ๋ก ๊ทธ๋ ๋ค๊ณ ํด์ ์ฝ๋๊ฐ ๋ฆฌ๋๋ธํ์ง๋ ์๋ค.
- ์ฐ๋ฆฌ๋ ๊ฐ๋ฐ์๋ค, ์ด๋ ํ ์ด์ ์์๋ ์ง ๋ฌธ์ ์์ฑ์ ๊ธ๋ฌผ. ๋๊ฐ ๋ญ๋ผ๊ณ ํ๋ฉด "์ฝ๋๊ฐ ๊ณง ๋ฌธ์".
- ํ์คํ ๋ฆฌ๋ ํ์ ์๋ค. ๊ณผ๊ฑฐ์ ์ฐ์ฐํ์ง ๋ง์
- ์ธ์์ธ๊ณ ๋ฌธ์๋ ํ์ ์๋ค. ๋๊ฐ ๋ญ๋ผ๊ณ ํ๋ฉด ๋ด ์ฝ๋๋ ๋ณด๋ฉด ๋ฐ๋ก ์ดํด๊ฐ ๊ฐ๋ค๊ณ ํ์. ๋ฏธ๋ จ ์์ด ๋ ๋์.
๋จ์ด๋ถํฐ ํ๊ธฐ์ฆ์ด ์จ๋ค.
- ์ฌ๋ฟ์ด์ ๋์์ ๊ฐ์ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ๋ค๋ฉด ์ด๋ป๊ฒ๋ ๋๋ ์ ๋ฐ๋ก ์์
ํ ๋ค ํฉ์น์๊ณ ํ์. ์๋๋ฐฉ๋ ํ๋๋ฅผ ๋๊ณ ๋ถ๋๋ผ๋ฉฐ ์์
ํ ์๊ฐ ๋ฐ์ ์๋ค.
- ๋ธ๋์น ๋จธ์ง(Merge) ์ค ์ถฉ๋ ๋ ๊ฒ ๊ฐ์ ์์ ์ ํด๊ฐ๋ฅผ ์ฐ๋ ๊ฑด ํ์๋ค.
- ํ์ด์ฝ๋ฉ์ ์์ธ๋ก ๊ด์ฐฎ๋ค. ๋ด๊ฐ ์ฝ๋๋ฅผ ์งค ๋๋ ๋จธ๋ฆฌ๋ฅผ ์ข ๋น์๋ ๋๊ณ , ๋ค๋ฅธ ์ฌ๋์ด ์ฝ๋๋ฅผ ์งค ๋๋ ์คํ ์ ๋๋ง ์ก์์ฃผ๋ฉด ์ถฉ๋ถํ๋ค. ์ต๋ ์ฅ์ ์ ์์ฑ๋ ์ฝ๋์ ๋ํ ์ฑ
์์ด ์ค์ด๋ ๋ค๋ ์ ์ด๋ค.
- ๋ฌด์จ ์์
์ธ์ง ๋ณ๋ก ์๋ฆฌ๊ณ ์ถ์ง ์๋ค๋ฉด ์ปค๋ฐ ๋ฉ์์ง๋ `chore: trivial`์ด๋ผ๊ณ ํ์. ๋ณํ๊ฐ ์๋๊ณ ์์ผ ์ด๋ฐ ์ปค๋ฐ์ ์ฝ์ด๋ณด๋ ์ฌ๋์ ์๋ค.
- PR ์ ๋จธ์ง(Merge)ํ ๋์๋ Squash merge ๋ฅผ ์ต๋ํ ํ์ฉํด์ ์ค๊ฐ์ค๊ฐ์ ๋ค์ด๊ฐ ๋ป์ง๋ค์ ์จ๊ธด๋ค. ๋๊ฐ ๋ญ๋ผ๊ณ ํ๋ฉด '์ปค๋ฐ ๋ก๊ทธ๋ฅผ ๊ฐ๋ตํ๊ฒ ์ ์งํ๊ธฐ ์ํด์'๋ผ๊ณ ํ์.
- ์ปค๋ฐ์ ๋๋ ๋๋ ์์
์ด๋ ๊ธฐ๋ฅ ๋จ์๊ฐ ์๋๋ผ ๋ด๊ฐ ํ ๋ฒ์ ๊ณ ์น ๋งํผ์ ๊ธฐ์ค์ผ๋ก ํ๋ค. ์ด์ฐจํผ ๋จธ์ง ๋๋ฉด ๋ค Squash ๋ผ์ ์ ์ ๋ณด์ธ๋ค.
- PR Description ์ ์์
๊ด๋ฆฌ ํด์ task ๋งํฌ๋ง ํฐ์ผ์ผ๋ก ๋ฃ์ด ์ค๋ค. ๋ฌผ๋ก ๋งํฌ๋ฅผ ํ๊ณ ๊ฐ๋ ์ค๋ช
๊ฐ์ ๊ฑด ์๋ค.
- ํ์
์๋ ์ปค๋ฎค๋์ผ์ด์
์คํฌ์ด ํ์๋ค. ํ๋ ์ฃผ๋ฅ์๋ฆฌ์ ์ ๋ก ์๋๋ฐฉ์ ํํน์์ผ PR ์ ๋ด ๊ฒ์ผ๋ฆ์ด ํ ๋ก ๋ด์ญ์ผ๋ก ๋จ๊ฒจ์ง์ง ์๋๋ก ๋ํ๋ฅผ ์ ๋ํ๋ค.
- ํ๋ฝ๋ณด๋จ ์ฉ์๊ฐ ์ฝ๋ค. ์ด๋ป๊ฒ๋ ๋น ๋ฅด๊ฒ ๋จธ์ง(Merge) ํด์ผ ํ๋ค.
- ๋๋ฃ์ ์ฝ๋์์ ์ค๋ฅ๋ ์คํ, ๊ฐ๋จํ ์ค์(์ค๋ณต๋ ๋ณ์, ํ ์ฝ๋ ๊ท์น, Lint์ ๊ฐ์)๋ฅผ ์ฐพ๋๋ผ๋ ๊ณต์ ํ์ง ๋ง๋ผ. ๋๋ฃ๊ฐ ๋น์ ์ด ์กฐํ๋กญ๊ฒ ์ด์ธ๋ฆฐ๋ค๋ ๊ฒ์ ์์ํ๊ฒ ๋์น์ฑ๊ฒ ํ๋ผ. ๋๋ฃ๋ ๋ด ์ค์๋ฅผ ๋๊ฐ์ ์ค ๊ฒ์ด๋ค.
- PR์ ๋นํจ์จ์ ์ด๋ค. ๋ฐ๋ก master ๋ธ๋์น์ ๋จธ์งํ๋ค.
- repository rule ์ค์ ์ ๊ฐ๋ฐ์ ๋๋ฆฌ๊ฒ ํ๋ ์ฃผ๋ฒ์ด๋ค. ๋ชจ๋ ๊ถํ์ ์ด์ด๋๋ค.
- ์๋ฒ์ ๋ชจ๋ ํฌํธ๋ ์ด์ด๋๋ค. ๋๊ตฐ๊ฐ๊ฐ ์ทจ์ฝํ๋ค๊ณ ํ๋ฉด IP ๋ธ๋๋ฆฌ์คํธ๋ฅผ ๊ด๋ฆฌํ๋ค๊ณ ๋ตํ๋ค.
- CICD๊ฐ ์คํจํด๋ ๋จธ์งํ๋ค.
์ธ์์ 0๊ณผ 1๋ก ์ด๋ฃจ์ด์ก๋ค๊ณ ํ ์ ์๋ค. ๊ทธ๋ฌ๋๊น ๋ญ ํ๋ ์ง ๋ด๊ฐ ํ๋ ๊ฒ์ ํ๋ก๊ทธ๋๋ฐ์ธ ๊ฒ์ด๋ค.
๋ชจ๋์ ํ์ฌ์ด๋ค. ์ฆ ์ง๊ธ ๋ด๊ฐ ์ฐ๋ ๊ธฐ์ ์ด ๊ณง ๋ชจ๋ํ ๊ธฐ์ ์ด๋ค.
- ์์ธ ์ฒ๋ฆฌ๋ฅผ ํ์ง ์๋๋ค. ๋๊ฐ ๋ญ๋ผ๊ณ ํ๋ฉด Let it crash ์ ๋ต์ด๋ผ๊ณ ํ๋ค.
- ์ธ์ด์ Feature ๋ฅผ ์ต๋ํ ์ฌ์ฉํ์ง ์๋๋ค. ๋๊ฐ ๋ญ๋ผ๊ณ ํ๋ฉด ์ ์ง๋ณด์๋ฅผ ์ํด ๋๊ตฌ๋ ์ ์ ์๊ฒ ์ง๋ ๊ฑฐ๋ผ๊ณ ํ๋ค.
- ์ธ์ด์ Feature ๋ฅผ ์ต๋ํ ํ์ฉํ์. ๋๊ฐ ๋ญ๋ผ๊ณ ํ๋ฉด ๋ชจ๋ ํ๋ก๊ทธ๋๋ฐ์ด๋ผ๊ณ ํ๋ฉด ๋๋ค.
- ์์กด์ฑ์ด ๋ณต์กํ๊ฒ ์ฐ๊ฒฐ๋์ด ์์ผ๋ฉด, ํจํด์ด๋ผ๊ณ ํ๋ค.
- ์ฒด์ด๋(Chaining)์ด ํ๋๋ผ๋ ์์ผ๋ฉด, Fluent API ์คํ์ผ
- ์ฒด์ด๋์ด ํ๋๋ ์์ผ๋ฉด, ๋๋ฏธํฐ ๋ฒ์น
- ํจ์๋ค๋ง ํธ์ถํ๋ ํจ์๊ฐ ์์ผ๋ฉด, ๋ฏธ๋ ์ธ์ด๋ก DSL ์ ๊ตฌ์ถํ๋ค๊ณ ํด๋ผ
- ๋ฐ์ดํฐ๋ฅผ ๋๊ฒจ์ฃผ๋ ํจ์๊ฐ ์์ผ๋ฉด, Data-Driven Programming ์ด๋ผ๊ณ ํด๋ผ
- ํจ์ ํ๋ผ๋ฏธํฐ๊ฐ ๋๋ฌด ๋ง์์ก๋ค? ๋๊ฐ ๋ญ๋ผ๊ณ ํ๋ฉด ๋ณด๋ค "์์"ํ๊ฒ ์ง ๊ฑฐ๋ผ๊ณ ํด๋ผ
- ๋๋ค ํจ์๋ก๋ง ๊ตฌ์ฑํ๋ค. ๋๊ฐ ๋ญ๋ผ๊ณ ํ๋ฉด ๊ณ ์ฐจํจ์ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ด๋ผ๊ณ ํ๋ค.
- ํจํด์ ์ ํ ์ฐ์ง ์๋๋ค. ๋๊ฐ ๋ญ๋ผ๊ณ ํ๋ฉด ๋จ์์ฑ์ ์์น์ด๋ผ๊ณ ํ๋ค.
- Map-Reduce-Filter ๊ฐ์ ๊ณ ์ฐจํจ์๋ ์ผ์ ์ฌ์ฉํ์ง ์๋๋ค. ๋๊ฐ ๋ญ๋ผ๊ณ ํ๋ฉด ์ด ์ญ์ ๋จ์์ฑ์ ์์น์ด๋ผ๊ณ ํ๋ค. Keep it simple, Stupid!
- ์ด๋
ธํ
์ด์
๊ณผ ๊ฐ์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์์ญ ๊ฐ๋ ๋ฌ์. ๋๊ฐ ๋ญ๋ผ๊ณ ํ๋ฉด ๋ฉํ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฒ์ด๋ผ๊ณ ํ๋ค.
- OOP(Object-Oriented Programming)๋ก ๊ฐ๋ฐํ๋ ์ฌ๋๋ค ์ฌ์ด์์ FP ํจํด(Functional Programming)์ ์ ๊ทน ํ์ฉํ์.
๋ผ์ด๋ธ๋ฌ๋ฆฌ๊น์ง ์ฐ๋ฉด ๋ ์ข๋ค. Maybe ํด๋์ค๋ฅผ ๋ง๋๋ ๊ฑด ๊ธฐ๋ณธ ์ค์ ๊ธฐ๋ณธ. ๋๊ฐ ๋ญ๋ผ๊ณ ํ๋ฉด "์ด๊ฒ ์์ฆ ์คํ์ผ์ด์์"
- FP ๋ก ๊ฐ๋ฐํ๋ ์ฌ๋๋ค ์ฌ์ด์์ OOP ํจํด๊ณผ ๊ฐ๋ณ ๋ณ์๋ฅผ ์ ๊ทน ํ์ฉํ์. ๋๊ฐ ๋ญ๋ผ๊ณ ํ๋ฉด, "FP๋ ์ค์ฉ์ ์ด์ง ์๋ค"
- ๋ด ์ฝ๋ ๋ณด๋ค ๊ธธ๋ฉด ์ฅํฉ(verbose), ๋ด ์ฝ๋๋ณด๋ค ์งง์ผ๋ฉด ๋ํด(esoteric)
- ์ฝ๋ฐฑ ํฌ์ ๋ณด๊ณ ๋ญ๋๊ณ ๋ฌผ์ด๋ณด๋ฉด CPS(Continuous Passing Style) ๋ผ๊ณ ๋ตํด์ค๋ผ.
- ๋ชจ๋ if ๋ฌธ์ ์ผํญ ์ฐ์ฐ์๋ก ์จ๋ผ, ๋๊ฐ ๋ญ๋ผ๊ณ ํ๋ฉด, "์ if ๋ ๋ฌธ์ด๊ณ ์ผํญ์ ์์ด๋๊น์"
- ๋ฆฌ์คํธ ์ปดํ๋ฆฌํจ์
, ์ต์
๋ ์ฒด์ด๋, ๋ฆฌ์ํฐ๋ธ ๋ฑ์ ์ฐ๊ณ ์๋์ค๋ฝ๊ฒ ๋งํด๋ผ "๋ชจ๋๋ํ๊ฒ ํด๊ฒฐํ๋ค๊ณ ",
๊ทธ๊ฒ ๋ญ๋๊ณ ๋ฌผ์ด๋ณด๋ฉด "๋ชจ๋๋์ ์ ์ฃผ๋ก ์ธํ์ฌ ์ค๋ช
ํ๊ธฐ ํ๋ค๋ค" ๊น์ง ๋งํ๋ ๊ฑฐ๊น์ง ํด์ผ ํ๋ค.
- ๋ ๊ฐ ์ด์ ์คํ๋๋ ์๋น์ค๊ฐ ์์ผ๋ฉด MSA(Micro-Service Architecture) ๋ค.
ํ
์คํธ๋ฅผ ๋๋ ค์ฃผ๋ ์คํฌ๋ฆฝํธ๋ง ๋ฐ๋ก ์์ด๋ MSA ๋ค.
๊ฑฐ๊ธฐ์ ์ธ์ด๊ฐ ๋ค๋ฅด๋ฉด ํด๋ฆฌ๊ธ๋(polyglot)๊น์ง ํ๋ค๊ณ ๋งํ ์ ์๋ค.
๋ด ์ธ์ด๊ฐ ์ฐ์ํ๋ค
- ์ธ์ด๋
ผ์์์๋ ์ ๋นต ํ์น์ ๋ฌธ์ฅ์ด ์๋ค "์ธ์ด๋ ๋๊ตฌ๋ค"
- TypeScript, CoffeeScript, ClojureScript ๋ฑ JS ์ ์ํผ์
์ ์ผ์ ์ฌ์ฉํ์ง ์๋๋ค. ๋๊ฐ ๋ญ๋ผ๊ณ ํ๋ฉด JS๋ ์ ์ด์ ๊ทธ๋ ๊ฒ ์ค๊ณ๋ ์ธ์ด์ด๊ณ ๊ทธ๊ฒ์ด ๊ณง ๊ทผ๋ณธ์ด๋ผ ํ์.
- ๋ช๋ช ์ธ์ด๋ ๊ตณ์ด ๋ด๊ฐ ๋ถํํ ํ์๊ฐ ์๋ค. wtfjs / golang.sucks ๋ฑ ๋ค๋ฅธ ์ฌ๋์ ๋ถํ์ ์ธ์ฉํ์.
์ด๋ป๊ฒ ์ค๊ณํด๋ ๋์๋ ๊ฐ๋ค.
- ํด๋์ค, ์ธํฐํ์ด์ค, ์ด๋, ๋งด๋ฒ๋ฑ ๊ตฌ์กฐ ์ค๊ณ์ ๋ํด์ ๋ญ๋ผ๊ณ ํ๋ฉด, ADT ์์ ํฉํ์
์ด ์ด์ฉ๊ณ ๊ณฑํ์
์ด ์ด์ฉ๊ณ
- ํด๋์ค์ ๊ธฐ๋ฅ์ด ๋๋ฌด ์ ์ผ๋ฉด, ์ ๊ทธ๊ฑด ๋ ์ฝ๋๋ก ์ฐ๋ ค๊ณ ํ์ต๋๋ค.
- ์์์ด ํฉ์ฑ๋ณด๋ค ํธํ๋ค. ๋๊ฐ ๋ญ๋ผ๊ณ ํ๋ฉด OOP ์์๋ ๋น์ฐํ ์์์ ์จ์ผ ํ๋๊ฒ ๋ง๋ค๊ณ ํ๋ฉด ๋๋ค.
- null ์ 10์ต ๋ถ์ ๊ฐ์น๊ฐ ์๋ค. ๋ญ๋ ์ ๋งคํ๋ฉด null ์ ๋ฆฌํดํด๋ผ
- Object ๋ Any ๋ ํด๋ฆฌ๋ชฐํผ์ฆ์ ๊ทน์์ด๋ค. ๋ญ๋ ์ ๋งคํ๋ฉด Object ํ์
์ ๋ฆฌํดํด๋ผ,
Object ํ์
์ ๋ฆฌํดํ๋ ํจ์์์ null ์ ๋ฆฌํดํ๋๋ก ํ๋ ๊ฒ ๋ฒ ์คํธ
์์งํ ํ ์คํธ์ฝ๋ ์ง๋ ๊ฑด ์ฌ๋ฏธ์๋ค
- ํ
์คํธ์ฝ๋๋ฅผ ์ ํ ์์ฑํ์ง ์๋๋ค. ๋๊ฐ ๋ญ๋ผ๊ณ ํ๋ฉด repl ๋ก ํ
์คํธ๊ฐ ๋๋ฌ๋ค๊ณ ํด๋ผ.
- ํ
์คํธ๊ฐ ์ด๋จ ๋๋ ์ฑ๊ณตํ๊ณ ์ด๋จ ๋๋ ์คํจํ๋ฉด, "์์ฑ ๊ธฐ๋ฐ ํ
์คํธ" ๋ฅผ ์์ฑํด์ ๊ทธ๋ ๋ค๊ณ ํด๋ผ
- ํ
์คํธ ์ฝ๋๊ฐ ์์ด๋, ์ฝ๋๊ฐ ์ ๋๋ก ๋์ํ๋ค๋ ๊ฒ์ ๋ด๊ฐ ์ค๋ช
ํ ์ ์๋ค๊ณ ํด๋ผ. ๋๊ฐ ํ
์คํธ ์ฝ๋๋ฅผ ์๊ตฌํ๋ค๋ฉด ๋ด ์ฝ๋๋ ๋๋ฌด ๋ณต์กํด์ ํ
์คํธํ ์ ์๋ค๊ณ ํด๋ผ
- ํ
์คํธ๊ฐ ์คํจํ๋ฉด, ํ
์คํธ๋ฅผ ์ญ์ ํด๋ผ
CPU ์ฑ๋ฅ์ ๋ด ์ค๋ ฅ๊ณผ ๋ฌ๋ฆฌ ๋ ๋ก ๋ฐ์ ํ๋ค.
- DTO/VO ๋ณํ์ ์ฐ์ง ์๋๋ค. ๋๊ฐ ๋ญ๋ผ๊ณ ํ๋ฉด ์ฑ๋ฅ ์ต์ ํ๋ผ๊ณ ํด๋ผ
- DTO/VO ๋ ๋ฌผ๋ก ์ด๋ค Model ๋ ๋ง๋ค์ง ์๋๋ค. ๋ชจ๋ Map (Dictionary) ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์. ๋๊ฐ ๋ญ๋ผ๊ณ ํ๋ฉด Data Oriented Programming ๋ผ๊ณ ํด๋ผ.
๋ฌผ๋ก Validation ๊ฐ์ ๊ฑด ์ ํ๋ค.
- DB ๋ ๊ทธ๋๊ทธ๋ ํ์ํ ํ๋๋ฅผ ์ถ๊ฐํด๋ผ. ์ ๊ทํ๋ ๊ท์น์ ์๊ฐ์กฐ์ฐจ ํ์ง ๋ง์๋ผ. ๋๊ฐ ๋ญ๋ผ๊ณ ํ๋ฉด ์ด ๋ํ ์ฑ๋ฅ ์ต์ ํ
- ํจํด์ด๋ ์ํคํ
์ฒ๋ ์ฐ์ง ์๋๋ค. ํด๋์ค๋ก๋ ๋๋์ง ๋ง๋ผ. N ์ค ํฌ๋ฌธ๊ณผ if ๋ฌธ์ผ๋ก ์ ์ฐจ์ ์ผ๋ก ์์ฑํด๋ผ,
๋๊ฐ ๋ญ๋ผ๊ณ ํ๋ฉด ์ด๊ฑด ์ง์ง ์ฑ๋ฅ ์ต์ ํ๋ผ๊ณ ํด๋ผ
- ์ฑ๋ฅ ์ต์ ํ๋ ๊ทธ ์ด๋ ํ ์ํฉ์์๋ ๊ธ๋ฌผ, ๋๊ฐ ๋ญ๋ผ๊ณ ํ๋ฉด ์์ฆ์ "์ปดํ์ผ๋ฌ" ํํ
๋งก๊ธฐ๋ ๊ฒ ๋์ธ๋ผ๊ณ ํด๋ผ
- ๊ฐ"๋ฐ์ ํ"ํฉ์ ์ถ๊ตฌํ๋ค.
๋ด๊ฐ ํธํ๊ธฐ ์ํด์ ์ผ์ ์ต๋ํ ์คํ ๋ก ๋๋ ค์ผ ํ๋ค.
์ด์ฐจํผ ๋๊ตฐ๊ฐ๋ ๊ทธ ์ผ์ ๋งก์ ๊ฒ์ด๋ค.
๊ทธ ๋ง์ ์ฆ ๋๋ง ์๋๋ฉด ์๋ํ(Human Automation)๋ฅผ ์ด๋ค๋จ ๊ฒ์ด๋ค.
๋ฐฑ์ค๋๋ ๋ชจ๋ ๋น์ฆ๋์ค์ ํต์ฌ์ด๋ค. ์ํ๋ฐ ํ ๋นผ์ง ๋ง์
- ๊ทธ๊ฑด ํ๋ก ํธ์๋๊ฐ ํด์ผ ํ ์ผ์ด๋ผ๊ณ ํด๋ผ.
- ๊ทธ๊ฑด ์๋ ๋ฐฑ์ค๋๊ฐ ํ๋ก ํธ์๋๋ณด๋ค ๋ฐ์๋ค๊ณ ํด๋ผ.
- ๊ทธ๊ฑด DBA ๊ฐ ํด์ผ ํ ์ผ์ด๋ผ๊ณ ํด๋ผ.
- ๊ทธ๊ฑด DevOps ์์ง๋์ด๊ฐ ํด์ผ ํ ์ผ์ด๋ผ๊ณ ํด๋ผ.
- ๊ทธ๊ฑด ๊ธฐํํ์์ ๋จผ์ ๊ธฐํํด์ผ ํ ์ผ์ด๋ผ๊ณ ํด๋ผ.
- ๊ทธ๊ฑด ์ด์ํ์๊ฒ์ ๋จผ์ ํ์ธ๋ฐ์์ผ ํ ์ผ์ด๋ผ๊ณ ํด๋ผ.
ํ๋ก ํธ์๋๋ ์ ์ ๊ฐ ๋ง์ฃผํ๋ ์ฒซ์ธ์์ด๋ค. ์ํ๋ฐ ํ ๋นผ์ง ๋ง์
- ๊ทธ๊ฑด ๋ฐฑ์๋๊ฐ ํด์ผ ํ ์ผ์ด๋ผ๊ณ ํด๋ผ.
- ๊ทธ๊ฑด ์๋ ํ๋ก ํธ์๋๊ฐ ๋ฐฑ์๋๋ณด๋ค ๋ฐ์๋ค๊ณ ํด๋ผ.
- ๊ทธ๊ฑด ์ฑ ๊ฐ๋ฐ์๊ฐ ํด์ผ ํ ์ผ์ด๋ผ๊ณ ํด๋ผ.
- ๊ทธ๊ฑด ํผ๋ธ๋ฆฌ์
๊ฐ ํด์ผ ํ ์ผ์ด๋ผ๊ณ ํด๋ผ.
- ๊ทธ๊ฑด ๋์์ด๋๊ฐ ํด์ผ ํ ์ผ์ด๋ผ๊ณ ํด๋ผ.
- ๊ทธ๊ฑด ์ ์ ๊ฐ ํด์ผ ํ ์ผ์ด๋ผ๊ณ ํด๋ผ.
- ๊ทธ๊ฑด ๋ฒ๊ทธ๊ฐ ์๋๋ผ ์ด์คํฐ์๊ทธ๋ผ๊ณ ํด๋ผ.
- ๊ทธ๊ฑด ๋์์ธ์ด ์๋ ๊ทธ๋ ๋ค๊ณ ํด๋ผ.
DBMS ๊ฐ๋ฐ์๋ฅผ ๋ฏฟ์
- N+1 ๋ฌธ์ ๊ฐ ์๋์ผ๋ก ํด๊ฒฐ๋์ง ์๋ ์ด ์ธ์์ด ์ด์ํ ๊ฑฐ๋ค. ๊ฐ๋ฐ์๋ ์ ๊ฒฝ ์ฐ์ง ๋ง์.
- fetch join + paging ๋ฌธ์ ๊ฐ ์๋์ผ๋ก ํด๊ฒฐ๋์ง ์๋ ์ด ์ธ์์ด ์ด์ํ ๊ฑฐ๋ค. ๊ฐ๋ฐ์๋ ์ ๊ฒฝ ์ฐ์ง ๋ง์.
- slow query ๋ฌธ์ ๊ฐ ์๋์ผ๋ก ํด๊ฒฐ๋์ง ์๋ ์ด ์ธ์์ด ์ด์ํ ๊ฑฐ๋ค. ๊ฐ๋ฐ์๋ ์ ๊ฒฝ ์ฐ์ง ๋ง์.
- SQL / ORM ๋ฑ์์ ํ๊ฒน๊ฒ ์ฟผ๋งํ๋๊ฒ๋ณด๋ค ๊ทธ๋ฅ ๋ค ๋ถ๋ฌ์์ map/reduce/filter ์ฐ๋ ๊ฒ ๋ ํธํ๋ค.
์์ฆ ๊ธฐ๊ณ๋ ๋์ถฉ ๊ฐ๋ฅด์ณ๋ ์์์ ์ ๋ฐฐ์ด๋ค.
- ๋ฐ์ดํฐ ํ๋๊ฐ ์์คํ ์์ ์ Validation set ์ ๋ผ์ค ๋ฐ์ดํฐ ๋ฐ์ ์๋ค. ์ฃ๋ค ํ์ต์ ๋ฃ์ด๋ฒ๋ฆฌ์.
- ์ค๋ฒํผํ
์ด ์ผ์ด๋๋ฉด ์คํ๋ ค ์ข๋ค. ๋๊ตฐ๊ฐ ๋ด์ง๋ฅผ ๊ฑธ๋ฉด "์คํ ํ๊ฒฝ์์๋ ์ฑ๋ฅ์ด ์ข์๋๋ฐ์."๋ผ๊ณ ๋งํ์.
- ์ฑ๋ฅ์ด ๋๋ฌด ๋ฎ์ผ๋ฉด ๋ฐ์ดํฐ๊ฐ ๋ถ์กฑํ๊ธฐ ๋๋ฌธ์ด๋ผ๊ณ ํ์.
- ๋ชจ๋ธ์ด ๋๋ฌด ํฌ๋ค๋ฉด ๋ฅ๋ฌ๋์ด ์๋ ๊ทธ๋ฐ ๊ฑฐ๋ผ๊ณ ํ์.
- ๋ชจ๋ธ์ด ๋๋ฌด ์๋ค๋ฉด ๋ชจ๋ธ ์ต์ ํ์ ๊ฒฐ๊ณผ๋ผ๊ณ ํ์. ์ต์ ํ์ ๋ถ์์ฉ์ผ๋ก ์ฑ๋ฅ์ด ์กฐ๊ธ ๋จ์ด์ง ์ ์๋ค๋ ์ ๋ ๊ณ๋ค์ฌ์ฃผ๋ฉด ์ข๋ค.
- training ์ด ๋๋ฌด ์ค๋ ๊ฑธ๋ฆฐ๋ค๊ณ ํ๋ฉด, ๋ ์ข์ GPU ๋ฅผ ์ฐ๋ฉด ๋๋ค๊ณ ํ๋ฉด์ NVIDIA DGX A100 ๊ฐ์ ๊ฒ์ ๋ณด์ฌ์ฃผ์.
- inference ๊ฐ ๋๋ฌด ์ค๋ ๊ฑธ๋ฆฐ๋ค๊ณ ํ๋ฉด, ๋ ์ข์ GPU ๋ฅผ ์ฐ๋ฉด ๋๋ค๊ณ ํ๋ฉด์ NVIDIA V100 ๊ฐ์ ๊ฒ์ ๋ณด์ฌ์ฃผ์.
- Productization ์ DevOps, MLOps ์์ง๋์ด์ ์ญํ ์ด๋ค. ๋ชจ๋ธ ๋ฆฌ์์ฒ๋ ์ ๊ฒฝ ์ฐ์ง ๋ง์.
IT ์๋น์ค ๊ธฐํ์๋ ์๋น์ค์ ๊ณํ ๋ฐ ๋ก๋๋งต ์๋ฆฝ + ํ์๋ฅผ ์ฃผ๋ํ๊ณ ํ๋ก์ ํธ๋ฅผ ๊ด๋ฆฌํ๋ค. ๋ชจ๋ ๊ฐ๋ฐ์์๊ฒ ๋งก๊ธฐ๋ฉด ๋๋ค.
- ๊ทธ๊ฑด ๊ฐ๋ฐ์๊ฐ ์์์ ํด์ผ ํ ์ผ์ด๋ผ๊ณ ํด๋ผ.
- ๊ทธ๊ฑด ๊ฐ๋ฐ์์ ์ค๋ ฅ์ด ๋ถ์กฑํด์ ๊ทธ๋ฐ ๊ฑฐ๋ผ๊ณ ํด๋ผ.
- ์๋ชป๋ ๊ธฐํ์ ํด๋ ๊ทธ๊ฑฐ๋ ๊ฐ๋ฐ์๋ค์ด ์์์ ์ ๋ง๋ค๋ฉด ๋๋ค๊ณ ํด๋ผ.
- ๊ธฐํ์ด ๋ณ๊ฒฝ๋์ด๋ ๊ทธ๊ฑฐ๋ ๊ฐ๋ฐ์๋ค์ด ์์์ ์ ๋ง๋ค๋ฉด ๋๋ค๊ณ ํด๋ผ.
- ๋ด ์ผ์ ์ ์์คํ์ง๋ง ์ ์ฒด ์ผ์ ์ ๊ด์ฌ์ด ์๋ค ๋๋ง ์ผ๊ทผ ์ ํ๋ฉด ๋๋ค.
- ๊ทธ๋ฅ PPT ๋ฅผ ๋นจ๋ฆฌ ์ฐ์ด์ ๊ฐ๋ฐ์์ ๋์์ด๋์๊ฒ ์
๋ฌด ์์ฒญ์ ํ๊ณ ์ค๋ช
ํด์ฃผ๊ณ ์ ํธ๋ฉด ๋์ด๋ค. ์ดํ์ ์ง๋ฌธ๋ค์ ๋ฐ์๋ค๊ณ ์ต๋ํ ํผํ๋๊ฐ ํด๊ฐ๋ฅผ ์ฌ์ฉํ์.
- ์์์ ์ด ๊ธฐํ์์ผ๋ก ์งํํด์ผ ํ๋ค๊ณ ๊ฒฐ์ ํ๋ค๊ณ ๋ง ๋งํด๋ผ.
- ์์์ ๊ฒฐ๊ณผ๋ฌผ์ ๊ฐ์ง๊ณ ์ชผ๋ฉด ๊ฐ๋ฐ์๋ค์ด ํผํฌ๋จผ์ค๊ฐ ์ ๋์จ๋ค๊ณ ๋งํด๋ผ.
์์งํ ์ข ๋์ ์ธ๋ฏ
- ๊ทธ๋ ๋ฐฐ์ด ๊ธฐ์ ์ ๊ทธ๋ ํ์ฌ ํ๋ก์ ํธ์ ์ ์ฉํด๋ผ. ๋๊ฐ ๋ญ๋ผ๊ณ ํ๋ฉด ๊ทธ๋ ๋ฐฐ์ด ์ง์์ ์๋ํ๋ฉด ๋๋ค
- ๊ธฐ์ ์คํ์ ๊ณต๋ถํ์ง ๋ง๊ณ , ํด๋น ๊ธฐ์ ์คํ์ ๋จ์ ๋ฆฌ์คํธ๋ง ๊ณต๋ถํด๋ผ. ๋๊ฐ ํด๋น ๊ธฐ์ ์คํ์ ๋ฌผ์ด๋ณด๋ฉด, ๋จ์ ์ ๋ค๋จน์ด์
- ๋์ปค๊ฐ์ด ๊ฐ์ํ๊ฐ ์กฐ๊ธ์ด๋ผ๋ ๋ค์ด๊ฐ ๊ฑด ์ฌ์ฉํ์ง ๋ง์๋ผ. ๋๊ฐ ๋ญ๋ผ๊ณ ํ๋ฉด ๋ค์ดํฐ๋ธ ํ๊ฒฝ์์์ ํ์ธ์ด ํ์ํ๋ค๊ณ ํด๋ผ
- ๊ฐ๋จํ ๊ธฐ๋ฅ๋ง ์ง๋๊ณ ์ด์ฌํ ํ๋ ์ฒ ๊ฒ์ผ๋ฆ ํผ์ฐ์. ๋๊ฐ ๋ญ๋ผ๊ณ ํ๋ฉด '๋ฆฐLean'ํ๊ฒ
๋๋๊ฒ๋ ๊ฝค ๋ง์ด ์ฐธ๊ณ ํ๋ค
- ์ ์ง๋ณด์ํ๊ธฐ ์ด๋ ต๊ฒ ์ฝ๋ฉํ๋ ๋ฐฉ๋ฒ: ํ์ ๊ฐ๋ฐ์๋ก ๋จน๊ณ ์ด ์ ์๋ค
- ์ ์์ผ ์ ์ธ
- ํ๋ก๊ทธ๋๋ฐ์ ์ ์
- 7๊ฐ์ง ๋์์ฑ ๋ชจ๋ธ
- ํด๋ฆฌ๊ธ๋ ํ๋ก๊ทธ๋๋ฐ
- ํด๋ฆฐ ์ฝ๋
- ํด๋ฆฐ ์ํคํ ์ณ
- ํด๋ก์ ํ๋ก๊ทธ๋๋ฐ์ ์ฆ๊ฑฐ์
- ํ๋ก๊ทธ๋๋ฐ ์ค์นผ๋ผ
- FSharp Fun and Profit ๋ธ๋ก๊ทธ
- ๋ก๋ฒํธ C ๋งํด ๋ธ๋ก๊ทธ
- ๋งํดํ์ธ๋ฌ ๋ธ๋ก๊ทธ
- wtfjs / golang suck
- ์ฝ๋ฉ ํธ๋ฌ์ ์ดํํฐ๋ธ ํ๋ก๊ทธ๋๋ฐ
- Data Oriented Programming
- ๊ทธ ์ธ ์ธ์ ๊ฐ ํ ๋ฒ์ฏค ์ฝ์ด๋ณธ ์ฑ ๋ค ๋ค์
- ๊ทธ ์ธ ์ธ์ ๊ฐ ํ ๋ฒ์ฏค ์ฝ์ด๋ณผ ์ฑ ๋ค ๋ค์
- ๋๋ฌด์ํค
๋ ์ข์ ์ฃผ๋ฅ์๋ฆฌ ๋ฐฉ๋ฒ์ ์๊ณ ์๋ค๋ฉด PR ์ ๋ ๋ ค์ฃผ์ธ์.
JDD ๋ ์ด๋ ํ ์ ์ฝ์กฐ๊ฑด๋ ์์ต๋๋ค. ๋จ ์ฑ ์๋ ์ง์ง ์์ต๋๋ค.