ํ๋์ ์ปดํจํฐ์์ ๋์ด์ ์๋ก ์์ํ๋ฉด์ ๋ฒ๊ฐ์๊ฐ๋ฉฐ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ ๋ฐฉ๋ฒ.
Contents
1. Pair Programming Approach ¶
PairProgramming ์ ์ ์ฉํด๋ณด๋ ๋ฐฉ๋ฒ, ์คํ์ผ ๋ฑ๋ฑ
- Pair Refactoring - ๊ผญ ์์ค ์ฝ๋๊ฐ ์๋๋๋ผ๋ ์ํค ํ์ด์ง์ ๋ํ ๋ฌธ์๊ตฌ์กฐ์กฐ์ ์ ํ๋ ๊ฒฝ์ฐ์๋ ์ ์ฉํ ์ ์๋ค. ํนํ, ํด๋น ํ ๋ก ์ด ๋ฒ์ด์ง๋ค ์๋ก ์ผ๋ก ๋๋์ด์ก์ ๊ฒฝ์ฐ, ๊ฐ ์๊ฒฌ ์ง์ง์๋ค์ด Pair ๋ก ๋ฌธ์๊ตฌ์กฐ์กฐ์ ์ ํ ๋ ์ด์ฉํ ์ ์๋ค.
- 5๋ถ Pair-Change - ์ฅ๊ณผ ๋จ์ด ์กด์ฌํ๊ธด ํ๋๋ฐ. ์ฅ์ ์ผ๋ก ๋ณธ๋ค๋ฉด, ์์ ์ ํ๋ก๊ทธ๋๋ฐ ์ฐจ๋ก๊ฐ ๋นจ๋ฆฌ ๋์์ค๋ฉด์ Pair ๋ผ๋ฆฌ์ Feedback ์ด ๋น ๋ฅด๋ค๋ ์ ์์ ์ง์ค๋๊ฐ ๋๋ค๋ ์ ์ด ์๋ค. ๋จ, Junior ์ ๊ฒฝ์ฐ ์์ ์ ์ฌ๊ณ ๊ฐ ์ฑ์ํด์ง ์๊ฐ์ ๋ฐฉํดํ ์ ์๋ค. ์ด ๊ฒฝ์ฐ 5๋ถ์ผ๋ก ์์, ์ ์ฐจ์ ์ผ๋ก Change ์ ๊ธฐ๊ฐ์ ๋๋ ค์ฃผ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
2. ํจ๊ณผ ¶
- ์ฝ๋ ์๋ฌ์จ์ ๊ฐ์ - ๋ด๊ฐ ๊ฐ๊ณผํ๊ณ ๋์ด๊ฐ๊ธฐ ์ฌ์ด ์๋ฌ๋ค์ ๋ํด์ ์ง์ ์ด ๋น ๋ฅด๋ค.
- Protocol Analysis, ์ง์์ ์ ๋ฌ -
CognitivePsychology์ฐธ์กฐ. ๋ค๋ฅธ ์ฌ๋์ ์ฌ๊ณ ๊ณผ์ ์ ๊ด์ฐฐํ๊ณ , ๋ํ ์์ ์ ์ฌ๊ณ ๊ณผ์ ์ ๋ค๋ฅธ ์ฌ๋์ผ๋ก ํ์ฌ๊ธ ๊ด์ฐฐํ ์ ์๊ฒ ํด์ค๋ค. ์ด๋ ์์ ์ ํ๋ก๊ทธ๋๋ฐ ๊ณผ์ ์ค ์๋ชป๋ ๋ถ๋ถ์ ๊ณ ์น๋๋ฐ ๋์์ ์ค๋ค.
- Communication
- ํด๋น ์๊ฐ ๋ด ์ง์ค๋์ ์์น, Pair Pressure - ํ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ ๊ฒ(ํ๋ก๊ทธ๋๋ฐ ์ค ์์
๋ฃ๊ธฐ, ์ธ๋ฐ์๋ ์น์ํ, ๋ฉ์ผ ์ฝ๊ธฐ)์ ๋ํ ์ก์์ ์์ค๋ค. ์์
์์ฒด์๋ง ๋ชฐ๋ํ๊ฒ ํด์ค๋ค. TestDrivenDevelopment ์ ์ํธ์์ฉ์ด ๋น ๋ฅธ ์ธ์ด(Python ๋ฑ..)๋ฅผ ์ด์ฉํ๋ฉด Feedback ์ด ๋น ๋ฅด๋ฏ๋ก ์ง์ค๋๊ฐ ๋ ๋์์ง๋ค.
3. Pair Programming ์ ๋ํ ์คํด? ¶
- Pair ์ค Expert๋ Junior์๊ฒ ๋ง์ ์ค๋ช
์ ํด์ค์ผ ํ๋ค? - ์ด๋ Junior ์ Feedback ์ ๋ณด๊ณ ๊ฒฐ์ ํ๋ ๊ฒ์ด ์ข๋ค. ์ฒ์๋ถํฐ Expert ๊ฐ ๊ผญ '์ ์๋'์ด ๋ ํ์๋ ์๋ค.
- Junior : Expert ๊ฐ ๊ฒฉ์ฐจ์ ๋ฐ๋ฅธ ํจ์จ์ฑ์ ๋ฌธ์ - PairProgramming
- Junior : Junior Pair ๋ ์๋ฏธ๊ฐ ์๋ค? - ๊ฒฐ๊ณผ๋ฌผ์ ์๊ดํ์ง ์๋ ํ์ต์ ๊ฒฝ์ฐ ๊ทธ ์๋ฏธ๊ฐ ์๋ค. Junior ์ ์ค๋ ฅ ํ๊ณ ๋ด์์์ Output ์ผ๋ก๋ ์๋ฏธ๊ฐ ์๋ค. ์ฒ์ ํ๋ก๊ทธ๋๋ฐ์ ์ตํ๋ ์ฌ๋์๊ฒ Pair ๋ฅผ ํ๋ ๊ฒ ์์ฒด๊ฐ ์๋ก์ด ํ์ต๊ฒฝํ์ด ๋๋ค.
4. PairProgramming ๊ฒฝํ๊ธฐ ¶
4.1. ๋๋ฌธ์๋ฒ ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ์ค ¶
์งํํ ์ฌ๋ : ๊ฐ์์ฒ, ์ค์ํ
๋๋ฌธ์๋ฒ ํ๋ก๊ทธ๋๋ฐ ํ์ ์ธ์์ธ๊ณ์ฉ์ผ๋ก ์ด์ฉ๋์์๋ค. PP๋ฅผ ์ฃผ๋ก ํ๊ณ ํ๋๋ฒ์ VPP๋ฅผ ํ๋ค. ํด๋น ์์ค๋ฅผ ๊ฐ์ด ๋ง๋ค์ด๊ฐ๋ฉด์ ๊ธฐ์กด์ ํ๋ก๊ทธ๋จ์ ์ค๋ช ํ๋ค.
๋๋ฌธ์๋ฒ ํ๋ก๊ทธ๋๋ฐ ํ์ ์ธ์์ธ๊ณ์ฉ์ผ๋ก ์ด์ฉ๋์์๋ค. PP๋ฅผ ์ฃผ๋ก ํ๊ณ ํ๋๋ฒ์ VPP๋ฅผ ํ๋ค. ํด๋น ์์ค๋ฅผ ๊ฐ์ด ๋ง๋ค์ด๊ฐ๋ฉด์ ๊ธฐ์กด์ ํ๋ก๊ทธ๋จ์ ์ค๋ช ํ๋ค.
4.1.1. ์ ๊ธฐ๋ ๋ฌธ์ ์ & ํด๊ฒฐ๋ฒ ¶
Expert : Junior . ์ฆ, ํด๋น ๋ถ์ผ์ ๋ํ ์ ๋ฌธ๊ฐ : ์ด์ฌ์ ์ ๋ฌธ์ ์ด๋ค. ์ด ๊ฒฝ์ฐ ๊ทธ ์งํ์ด ๋ฆ์ด์ง ์ ์๋ค. (Expert : Expert๋ ์ต๊ณ ์ ํจ์จ์ฑ์ ๊ฐ์ง๋ค. ๋ฌผ๋ก ์ด๊ฒ๋ ์ด๋ฆฐ ๋ง์์ ๋ฐํ์ผ๋ก ํ๋ค. Junior : Junior ๋ ๋๋ฆ๋๋ก(?) ๋นจ๋ฆฌ ์์ง์ธ๋ค. (์ ๋๋ก ์์ง์ธ๋ค๋ ๋ณด์ฅ์ ๋ชปํ๋ค. -_-;)) ๊ทธ๋ฆฌ๊ณ Expert๊ฐ ํด๋น ํ๋ก๊ทธ๋๋ฐ์ ๋ํ ๋ต (์ฝ๋)์ ์ด๋ฏธ ์๊ณ ์๋ ๊ฒฝ์ฐ Expert์ ์ง์ค๋์ ๊ธด์ฅ๊ฐ์ ํด์น๊ฒ ๋๋ค.
์ด ๋์๋ Expert๋ ๋์ง๋ง๊ณ (-_-;) Observer์ ์ญํ ์ ์ถฉ์คํ๋ค. Junior ์ ํ๋ฐํ๋ ๋ถ๋ถ์ ๋ณด๋ฉด์ ์ ์ฒด ํ๋ก๊ทธ๋จ ๋ด์ ๊ด๊ณ์ ๋น๊ตํด๋ณด๊ฑฐ๋, '์์ ์ด๋ผ๋ฉด ์ด๋ป๊ฒ ํด๊ฒฐํ ๊น?' ๋ฑ ๋ฌธ์ ๋ฅผ ์ ๊ธฐํด๋ณด๊ฑฐ๋, reference, ๊ด๋ จ ์์ค๋ฅผ ์ค๋นํด์ฃผ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
์ด ๋์๋ Expert๋ ๋์ง๋ง๊ณ (-_-;) Observer์ ์ญํ ์ ์ถฉ์คํ๋ค. Junior ์ ํ๋ฐํ๋ ๋ถ๋ถ์ ๋ณด๋ฉด์ ์ ์ฒด ํ๋ก๊ทธ๋จ ๋ด์ ๊ด๊ณ์ ๋น๊ตํด๋ณด๊ฑฐ๋, '์์ ์ด๋ผ๋ฉด ์ด๋ป๊ฒ ํด๊ฒฐํ ๊น?' ๋ฑ ๋ฌธ์ ๋ฅผ ์ ๊ธฐํด๋ณด๊ฑฐ๋, reference, ๊ด๋ จ ์์ค๋ฅผ ์ค๋นํด์ฃผ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
๋ ํ๋์ ๋ฌธ์ ์ ์ผ๋ก ์ ๊ธฐ๋ ๊ฒ์, Junior ๊ฐ Expert์ ๊ถ์์ ๋๋ฆด ์ ์๋ค๋ ๊ฒ์ด๋ค. Junior ๋ ์ง๋ฌธ์ ์ฉ๊ฐํด์ผ ํ๋ค. Expert๋ ๋ต๋ณ์ ์ธ์ํด์๋ ์๋๋ค. ์ด๋ฆฐ ๋ง์์ด ํ์ํ ์ผ์ด๋ค. (Communication ๊ณผ Courge ๋ XP ์ ๋๋ชฉ์ด๋ค. ^^)
4.1.2. ๋ฐ๊ฒฌ๋ ์ฅ์ ¶
์ ๋ฌธ๊ฐ๋ผ ํ๋๋ผ๋ ํ๋ก๊ทธ๋๋ฐ์ ์ค๋ ฅ๊ณผ ๋ค๋ฅธ์ฌ๋์๊ฒ ๋ต๋ณํด์ฃผ๋ ๋ฅ๋ ฅ์ ๋ค๋ฅด๋ค. ์ปค๋ฎค๋์ผ์ด์
๋ฅ๋ ฅ์ ์ค์ ๋๋ฉ์ธ์ ๋ํ ์ง์๊ณผ๋ ๋ค๋ฅผ ์ ์๋ค. Expert ๋ Junior ์๊ฒ ์ค๋ช
์ ํด์ค์ผ๋ก์ ๊ธฐ์กด์ ์ง์์ ๋ํ ์ ๋ฆฌ๋ฅผ ํด ๋๊ฐ ์ ์๋ค. Junior ๋ ํผ์์ ์ฝ์งํ๋ ๊ฒ๋ณด๋ค ๋ ๋นจ๋ฆฌ ํ์ํ ์ง์์ ๋ํด ์ ๊ทผํ ์ ์๋ค.
4.2. TFP ์ฐ์ต์ค ¶
์งํํ ์ฌ๋ : ๊ฐ์์ฒ, ๋ฐ์งํ
๊ฐ๋จํ ์๋ ๋ก๊ทธ ์๊ณ๋ฅผ ๋ง๋๋ ํ๋ก๊ทธ๋จ์ด์๋ค. MFC + CppUnit ๋ก ์์ ํ๋ค.
๊ฐ๋จํ ์๋ ๋ก๊ทธ ์๊ณ๋ฅผ ๋ง๋๋ ํ๋ก๊ทธ๋จ์ด์๋ค. MFC + CppUnit ๋ก ์์ ํ๋ค.
4.2.1. ์ ๊ธฐ๋ ๋ฌธ์ ์ & ํด๊ฒฐ๋ฒ ¶
- Pair ์ ์งํ์ ์ด๋์ด๊ฐ๋ ๊ฒ - ํ๋ก๊ทธ๋๋ฐ์ ํ๋ฆ์ด๋ผ๊ณ ํด์ผ ํ ๊น. ๋์์ธ์ ์ด๋์ ๋ ์ ์ ๋๋ก ๋ง์ถ๊ณ ์ด๋ ํ ๋ฌธ์ ๋ฅผ ํ ๊ฒ์ธ๊ฐ์ ๋ํ ์ฝ๊ฐ์ ์ ์ด ํ์ํ ๊ฒ ๊ฐ๋ค. ์ด ๊ฒฝ์ฐ์๋ ์ด๋ฐ ๋์์ธ์ด ํ์ ํ์๋ค๋ ์ฝ์ ์ด ์์๋ค. '์ ์ฒด์ ์ธ ๊ด์ ์์ ๋ฌด์๋ฌด์์ ํ๋ฉด ํ๋ก๊ทธ๋จ์ด ์์ฑ๋ ๊ฒ์ด๋ค' ๋ผ๋ ๊ฒ. UserStory ๋ง ์๊ฐํ๊ณ EnginneringTask ๋ฅผ ๊ฐ๊ณผํ ๊ฒ์ด ํฐ ๋ฌธ์ ์๋ค. (๊ทธ๋ EnginneringTask ์ ๋ํ ๊ฐ๋
์ด ์์์๋ค๋. ์ด๋์ ํจ๋ถ๋ก ์ฃผ์๋ง ์ง์. --; ์ฌ๊ณ ๋ฅผ ํ์ ์ฌ๊ณ ๋ฅผ. -_-)
- ExtremeProgrammingPlanning ์ด๋ผ๋ ์ฑ
์ ๋ณด๋ฉด ํด๊ฒฐ์ฑ
์ ๊ตฌํ ์ ์์ ๊ฒ ๊ฐ๋ค. (Xp ์ฑ
๋ค์ ์ฅ์ ์ด์ ๋จ์ ์ด๋ผ๋ฉด ์์ ๋๊ป์ ๋ถ์ฑ
์ด๋ ค๋.. --a)
- ExtremeProgrammingPlanning ์ด๋ผ๋ ์ฑ
์ ๋ณด๋ฉด ํด๊ฒฐ์ฑ
์ ๊ตฌํ ์ ์์ ๊ฒ ๊ฐ๋ค. (Xp ์ฑ
๋ค์ ์ฅ์ ์ด์ ๋จ์ ์ด๋ผ๋ฉด ์์ ๋๊ป์ ๋ถ์ฑ
์ด๋ ค๋.. --a)
- Pair ์ ๋ถ๋ฐฐ - TFP๋ฅผ ๊ณต๋ถํ๋๋๊ณ ์์ํ ๊ฒ์ด์๋์ง๋ผ, ์๋์ ์ผ๋ก CppUnit ์ ์ต์ํ์ง ์์ ์ฌ๋์๊ฒ ์ฝ๋ฉ์ ์ฃผ๋ํ๊ฒ ํ๋ค. ํ 1์ฃผ์ผ์ ๋ ๋๋ ํ๋ก์ ํธ๋ผ๋ฉด Junior๋ก ํ์ฌ๊ธ ๊ฒฝํ์ ์๊ฒ ํจ์ผ๋ก์จ ์คํ๋ ค ์ฅ์ ์ผ๋ก ์์ฉํ ์๋ ์์ ๊ฒ ๊ฐ๋ค. ํ์ง๋ง, ์ญ์ ์ ์ ํ๊ฒ ๋ถ๋ฐฐ๋ฅผ ํ์์ด์ผ ํ ๊ฒ ๊ฐ๋ค.
- ์ง๋จ ์ฝ์ง. --; - ์ด๊ฒ์ ํคํ๋์ด๋ผ๊ณ ๋ณด๋ ๊ฒ์ด. -_-;; Test Code ์์ ๋์ด ๋ผ๋์ ๊ตฌํ๋ ๊ณต์์ ๊ฑฐ๊พธ๋ก ์ฐ๊ณ '์ ๊ฐ์ด ํ๋ฆฌ๋ค๊ณ ํ๋๊ฑฐ์ผ!' ํ๋ฉฐ 1์๊ฐ์ ์ฝ์งํ๋ค๋ ํ๋ฌธ์ด ์๋ค๋. --;
- ํ์ง๋ง UnitTest๋ ๊ทธ๋ ๋ฏ์ด, ๋ง์ ์ฅ์ ์ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์๋ฒฝํ์ง ์๋ค๋ ์ด์ ๋ก ์ฌ์ฉํ์ง ์๋๋ค๋ ๊ฒ์ ์์ฌ์ด ์ผ์ผ ๊ฒ์ด๋ค.
- ํ์ง๋ง UnitTest๋ ๊ทธ๋ ๋ฏ์ด, ๋ง์ ์ฅ์ ์ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์๋ฒฝํ์ง ์๋ค๋ ์ด์ ๋ก ์ฌ์ฉํ์ง ์๋๋ค๋ ๊ฒ์ ์์ฌ์ด ์ผ์ผ ๊ฒ์ด๋ค.
- ์์ง์ ํจ์จ์ฑ์ด.. - ์ผ์ข
์ Learning Time ์ด๋ผ๊ณ ํด์ผ ํ ๊น? ๋๋ถ๋ถ ์คํ์์ ๋๋๋ค๋ ์ . ํฝ ํ๊ณ ์ฒ์๋ถํฐ ํจ์จ์ฑ์ ๊ทน๋ํ ํ ์ ์์ ๊ฒ์ด๋ค. ์ฐธ๊ณ ๋ก ์ด๋๋ ์๋ ๋ก๊ทธ ์๊ณ ๋ง๋๋๋ฐ ๊ฑฐ์ 3์๊ฐ์ด ๊ฑธ๋ ธ๋ค. Man-Hour ๋ก ์น๋ฉด 6์๊ฐ์ด ๋๋ค.
4.2.2. ๋ฐ๊ฒฌ๋ ์ฅ์ ¶
์ง์ค๋๋ ๊ฑฐ์ ์ต๊ณ ๋ผ๋ ์ ! (์ด ์ ์์ ๋์ด ์๋ก ๋์๋ฅผ ํ๋ค.) ํ์ ํผ์ ํ๋ก๊ทธ๋๋ฐํ ๋๋ ์ค๊ฐ์ ์น์ํ์ ํ๋ ๋ฑ ์ฃผ์๊ฐ ์ฐ๋งํด์ง๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ค. ํ์ง๋ง ์ด Pair ์ค์๋ ์ฌ๋๋ค์ด ํ๋ก๊ทธ๋๋ฐ๊ณผ ํ ๋ก ์๋ง ์ ๋
ํ ์ ์์๋ค. (์คํ๋ ค ์ค๊ฐ์ค๊ฐ ์ผ๋ถ๋ฌ 10๋ถ ํด์์ ๋์ด์ผ ํ๋ค.)
TestFirstProgramming ๊ณผ PairProgramming ์ ์ง์ค๋์ ๊ดํด์๋ ๊ฐ์ฅ ํ๋ฅญํ ์ ํ์ธ ๊ฒ ๊ฐ๋ค. (๋จ, Pair์์ ๋ดํฉํ์๊ฐ ์ด๋ฃจ์ด์ง๋ฉด ๊ณค๋ํ๊ฒ ๋ค. -_-;)
4.3. bioinfomatix ํ๋ก์ ํธ์ค ¶
์งํํ ์ฌ๋ : ๊ฐ์์ฒ, bioinfomatix ์์ ์ผํ์๋ ๋ถ๋ค
ํ์ต๋ชฉ์ ์ด ์๋ ์ค์ง์ ์ธ ๊ฐ๋ฐ์ ์ํ PairProgramming ์ผ๋ก๋ ์ฒ์์ธ๋ฏ ํ๋ค. 2์ฃผ๊ฐ ๊ฒฉ์ผ๋ก ์ผ์ ํ์๋๋ฐ, XP ์คํ์ผ๋ก ํ๋ก์ ํธ๋ฅผ ์งํํ์๋ค.
ํ์ต๋ชฉ์ ์ด ์๋ ์ค์ง์ ์ธ ๊ฐ๋ฐ์ ์ํ PairProgramming ์ผ๋ก๋ ์ฒ์์ธ๋ฏ ํ๋ค. 2์ฃผ๊ฐ ๊ฒฉ์ผ๋ก ์ผ์ ํ์๋๋ฐ, XP ์คํ์ผ๋ก ํ๋ก์ ํธ๋ฅผ ์งํํ์๋ค.
4.3.1. ์ ๊ธฐ๋ ๋ฌธ์ ์ & ํด๊ฒฐ๋ฒ ¶
* Junior ๋ก์์ ์ค์ - ๊ธฐ์กด ์์์์ ๊ฒฝํ์์๋ ์๋์ ์ผ๋ก ๋ด๊ฐ Expert ์ ์์น์์ ์์
์ ํ์๋ค. ์ด๋ฒ์๋ Junior ์ ์
์ฅ์ ์๊ฒ ๋์๋๋ฐ, ๊ธฐ์กด์ Junior ์ ์์น์ ์์๋ ์ฌ๋๋ค์ ์ค์๋ฅผ ๋ด๊ฐ ํ๊ฒ ๋์๋ค. ์ด๋ ค์ด ๋ถ๋ถ์ ๋ํด์๋ ์ดํด๋ฅผ ์ ๋๋ก ํ์ง ๋ชปํ์์๋ ๋ถ๊ตฌํ๊ณ Expert์ ์๋๋ฅผ ์ ํดํ ์ง๋ ๋ชจ๋ฅธ๋ค๋ ์๊ฐ์ ํ๋ฉฐ ๋๊ฐ ๋์ด๊ฐ์๋ค. (๋ค๋ฅธ Junior ์ ๊ฒฝ์ฐ๋ PP์์ ์ด๋ ค์์ ๊ฒช๋ ๋ถ๋ถ์ค ํ๋๊ฐ ์ด๊ฒ์ผ์ง๋ ๋ชจ๋ฅธ๋ค. ํนํ ์ ํ๋ฐฐ ๊ด๊ณ์ ๊ฒฝ์ฐ) ํ์ง๋ง, ์ด๋ ์คํ๋ ค ์ฌํ๋ฅผ ์
ํ์ํฌ ์ ์๋ค. ํ๋ก๊ทธ๋๋ฐ ์์
์ ๊ณ์ Expert์๊ฒ๋ง ์์กดํ๊ฒ ๋๊ธฐ ๋๋ฌธ์ด๋ค. ํ์คํ๊ฒ ๊ฐ๋
์ ๊ณต์ ํด์ผ Observer ์ ์ญํ ๊ณผ Driver ์ ์ญํ ๋ ๋ค ์ํ ์ ์๋ค. (์ฌ์ด ์ผ์ ์๋๋ค. ํ์คํ)
- ๋ณดํต ์ฝ๋ฉ์ ์ฃผ๋ํ๋์ชฝ์ด ๋นจ๋ฆฌ ์ง์น๋ฉฐ ์ง์ค๋ ฅ๋ ๋จ์ด์ง๊ฒ ๋๋ค. ํนํ PairProgramming ์ ๊ฒฝ์ฐ๋ ์๋ํธ Pair์ ๋ํ ๋ฐฐ๋ ค์ ํด๋น ์๊ฐ์ ์์
์ด์ธ์ ๋ค๋ฅธ ์ผ์ ๊ฑฐ์ ํ์ง ์๋๋ค. (ํ์ฅ์ค๋ ์์ฃผ ์๊ฐ๋ค;;)
- ์ํฉ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์ง๋ง, Driver / Observer ์ ๊ต์ฒด์๊ฐ์ ๋๋ ๊ฒ์ด ์ข์ ๊ฒ ๊ฐ๋ค. ์์ ์ด์ ์์.
- ์ํฉ์ ๋ฐ๋ผ์๋ ๋ง๋ก ํ๋ ๊ฒ ๋ณด๋ค ์ฝ๋๋ก์ ์ด์ผ๊ธฐํ๋ ๊ฒ์ด ๋ ์ง๊ด์ ์ผ ๋๊ฐ ๋ง๋ค. ์ฝ๋๋ก ์ด์ผ๊ธฐ ํ๊ณ , ๋ค์ ์๊ฒฌ์ ๋ฃ๊ณ ์์ ํ๊ฑฐ๋ ํค๋ณด๋๋ฅผ ๋๊ฒจ์ ๋ฆฌํํ ๋ง ํ๋ ์์ผ๋ก ๋ํํ ์ ์๊ฒ ๋ค.
- ์์กด์ฌ๋ฌธ์ ? - Pair๋ฅผ ์์ํด์์ฌ์์ธ์ง ์๋์ ์ผ๋ก Library Reference๋ Tutorial Source ๋ฅผ ์ ์๋ณด๋ ค๊ณ ํ๋ ๊ฒฝํฅ์ด ์๊ธฐ๋ ํ๋ค. ํด๋น ๋ถ๋ถ์ ๋ํด์ ๋ฏธ๋ฆฌ ๊ฐ์ธ์ ๋๋ Pair๋ก SpikeSolution ๋จ๊ณ๋ฅผ ๋จผ์ ์ก๊ณ ๊ฐ๋ฒผ์ด ๋ง์์ผ๋ก ์์ํด๋ณด๋ ๊ฒ์ ์ด๋จ๊น ํ๋ค.
4.3.2. ๋ฐ๊ฒฌ๋ ์ฅ์ ¶
- On-Side Customer ์์ PairProgramming - ํ๋ก์ ํธ ์ค๊ฐ์ ์ฐธ์ฌํด์ ๊ฑฑ์ ํ์๋๋ฐ, ํด๋น ์ผํ์๋ ๋ถ๊ณผ ์ง์ Pair๋ฅผ ํ๊ณ ์ง๋ฌธ์ ํด ๋๊ฐ๋ฉด์ ์ ์ฒด ํ๋ก๊ทธ๋จ์ ์ดํดํ ์ ์์๋ค. ํนํ ๋ด๊ฐ BioInfomatics ์ ๋ํ ์ง์์ด ์์๋๋ฐ, ํด๋น ๋๋ฉ์ธ ์ ๋ฌธ๊ฐ์์ Pair๋ก์ ์๋ก ์ํธ๋ณด์๊ด๊ณ๋ฅผ ๊ฐ์ง ์ ์์๋ค.
- Junior ์ ์์น์์ ๋ฐ๋ผ๋ณธ ํ์ต ํจ๊ณผ - ์ด์ ์ ์๊ฒฝ์ดํ์ด ์ฑํ
ํ๋ก๊ทธ๋จ ๋ง๋๋ ๋ฒ์ ์ง์ ๋ณด์ฌ์คฌ์๋๊ฐ ์๊ฐ์ด ๋๋ค. (๊ทธ๋ '์. 15๋ถ๋์ ํ๋ ๋ง๋ค์ด์ค๊ป~' ํ๋ฉด์ ํ๋ค๋ค๋ฅ MFC๋ก ์๋ฒ/ํด๋ผ์ด์ธํธ ์์ ๋ฅผ ๋ฐ๋ก ๋ณด์ฌ์ฃผ๋ ๋ชจ์ต์ ์ํ์ง์ง ์๋๋ค;) Junior ์ ์
์ฅ์์ Expert ํ๋ ํ๋ํ๋๋ Check Point ์ด๋ค. ์ข์ ์ต๊ด๊ณผ ํ๋ก๊ทธ๋๋ฐ ์คํ์ผ, ๋๋ฒ๊น
ํ๋ ๋ชจ์ต์ ์ง์ ๋์ผ๋ก ํ์ธํ ์ ์์๋ค.
4.4. IPSC ์ค ¶
์งํํ ์ฌ๋ : ๊ฐ์์ฒ, ๋ฅ์๋ฏผ
ProgrammingContest ์ ์๋ K-In-A-Row ๋ฌธ์ ๋ฅผ ํธ๋ ์ผ์ ํ๋ค.
ProgrammingContest ์ ์๋ K-In-A-Row ๋ฌธ์ ๋ฅผ ํธ๋ ์ผ์ ํ๋ค.
4.4.1. ์ ๊ธฐ๋ ๋ฌธ์ ์ ¶
- ์์ฝ๋ค๋ฉด.. ํ๋ํฐ; ํ;;; ๋ต์ด ์๋์๋ค. --;
- ๋ํ - ์๋๋ฐฉ์ด '์๊ณ ์์ ๊ฒ์ด๋ค' ๋ผ๋ ์ ๋ ์ค์ ๋ ๋ชจ๋ฅด๊ณ ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค๋ผ๋ ์๊ฐ์ ํด๋ณธ๋ค. ์นํ์น๊ตฌ ์ด๋๋ผ๋, ์๋๋ฐฉ์ ์ ์๋ค๋ผ๊ณ ์๊ฐํ๋๋ผ๋, ์๋๋ก๋ถํฐ ์ฝ์ง ๋ชปํ ์ ๋ณด๋ ๋๋ฌด๋ ๋ง๊ธฐ์.
- ๋ณด๊ฐ๋ฒ์ ์ค์ฐจ๋ฅผ ์ค์ด๋ ค๋ฉด Control Point ๋ฅผ ๋๋ฆฌ๊ณ , ๊ฐ๊ฒฉ์ ์ขํ์ผ ํ ๊ฒ์ด๋ค. ์ฆ์ ๋ํ๋ ๊ทธ ์์ฒด๊ฐ ๋ถํ์ผ์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง, ๋ํ ์คํด๋ฅผ ์ค์ผ๊ฒ์ด๋ค.
- ๋ณด๊ฐ๋ฒ์ ์ค์ฐจ๋ฅผ ์ค์ด๋ ค๋ฉด Control Point ๋ฅผ ๋๋ฆฌ๊ณ , ๊ฐ๊ฒฉ์ ์ขํ์ผ ํ ๊ฒ์ด๋ค. ์ฆ์ ๋ํ๋ ๊ทธ ์์ฒด๊ฐ ๋ถํ์ผ์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง, ๋ํ ์คํด๋ฅผ ์ค์ผ๊ฒ์ด๋ค.
4.4.2. ๋ฐ๊ฒฌ๋ ์ฅ์ ¶
- ํ๋ - ์ด๋ฒ๊ฒฝ์ฐ๋ ๋น๊ต์ ํ๋์ด ์ ๋ ๊ฒฝ์ฐ๋ผ๊ณ ์๊ฐํ๋ค. Python ์ผ๋ก ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํ ํ๋ก๊ทธ๋๋ฐ์ ํ๋๋ฐ๋ ์์ฒ์ด, Idea ์ ์ค๊ฐ์ ๋ฐ์ดํฐ ํธ์ง์ ํ๋๋ฐ์๋ ์ ๊ทํํ์์ ์ ์ด์ฉํ๋ ์๋ฏผ์ด๊ฐ ํฐ ๋์์ ์ฃผ์๋ค. ์ ์ ํ ๋์ ์ ์ ํ๊ฒ ์ฃผ๋ํ๋ ์ฌ๋์ด ์ ํ๋์๋ ๊ฒ์ผ๋ก ๊ธฐ์ต.
- ์ง์ค - ์ด๋ฒ ๊ฒฝ์ฐ์๋ '์๊ฐ์ ํ' ์ด๋ผ๋ ๊ฒ๊น์ง ์์ด์์ธ์ง; ์์ฒ์ ๋๋์ฑ ํ๋ก๊ทธ๋๋ฐ ์์ฒด์ ์ง์คํ๋ค. (์คํฌ๋ฆฝํธ ์ธ์ด ์คํ์ผ์ ์ ๊ทผ๋ฐฉ๋ฒ๊ณผ ์ด์ ์ TDD ์ฐ์ต๋ ํ๋ชซ ๊ฑฐ๋ ๋ฏ. ์กฐ๊ธ์ฉ ๋ง๋ค๊ณ ๊ฒฐ๊ณผ ํ์ธํด๋ณด๊ณ ์กฐ๊ธ ๋ ๋ง๋ค์ด๋ณด๊ณ ๊ฒฐ๊ณผ ํ์ธ์ ํ๋ค. ๋จ, ์ด๋ฒ์ Test Code ๋ฅผ ์๋ง๋ค์ด์, ๋ค์๊ฐ์ ๋ฒ๊ทธ๊ฐ ๋ฌ์๋ ๋์ฒด๋ฅผ ๋ชปํ๋ค๋.-_-; ์๋ ๋๋ ๋ฌธ์ ๊ฐ ์๋๋ค. ์ ์๋ ๋, ๋ฌธ์ ์ํฉ์ ๋ํ ๋์ฒ๊ฐ ์ค์ํ๋ค๊ณ ์๊ฐ.)
5. VPP : Virtual Pair Programming ¶
์ฅ์์ ์๊ฐ ๋ฑ์ ๋ฌธ์ ๋ก PairProgramming๋ฅผ ์งํํ์ง ๋ชปํ ๋์๋ Virtual PairProgramming ์ ์๋ ํ ์ ์๋ค.
๋ท๋ฏธํ , VNC ๋ฑ์ ๊ฐ๋ฐ ํ๋ก๊ทธ๋จ์ ๊ณต์ ํ ์ ์๋ ํ๋ก๊ทธ๋จ๊ณผ ์์ฑ์ฑํ ๋ฑ์ผ๋ก Virtual PairProgramming์ ํ ์ ์๋ค. (์ค.. ์ข์์ง ์ธ์~) ๋จ,PairProgramming ์ ๋นํด ์์ฌ์ด์ ๋ค์ด ์๋ค. (๊ด๋ จ ์ฑ ๋ค์ ์ฐพ์์ ๋ณด์ฌ์ฃผ์ง ๋ชปํ๋ค๋ ๊ฒ ๋ฑ๋ฑ) ๋์ค์๋ PC์นด๋ฉ๋ผ์ ์ค์บ๋ ๋ฑ๋ฑ ์ด์ฉํ ์ ์์ง ์์๊น.
1002๋ VNC์ ๋ท๋ฏธํ
(๊ทธ๋ ๋ท๋ฏธํ
ํ๋ฉด๊ณต์ ์ XP๊ฐ ๋ป์๋ ๊ด๊ณ๋ก. -_-;) ์ ์ด์ฉ, Python์ ๊ณต์ ํด์ ๋ค๋ฅธ ๊ณณ์ ์๋ ์ฌ๋๊ณผ SpikeSolution ์ VPP๋ก ์๋ํ ์ ์ด ์๋ค. VNC๊ฐ ํ๋ฉด refresh๊ฐ ๋๋ฆฌ๋ค๋ ๋จ์ ๋นผ๊ณ ๋ ๋ณ๋ค๋ฅธ ์ง์ฅ์ด ์์๋ค. ๋ชจ๋ฅด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ Pair ํ๋ ์ฌ๋์ด ๋ค์ด๋ฐ์์ฃผ๊ณ , ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํ๊ณ . ๋ชจ๋ฅด๋ ๊ฒ์ Pair ์๊ฒ ๋ฌผ์ด๋ณด๊ณ , ์ด๋ป๊ฒ ๋ง๋ค๊น ํ ๋ก ํ๋ ๊ฒฝํ์ด ์ข์๋ค.
๋์ธ๊ด๊ณ์ ๋ํด ์๊ทน์ ์ธ(?) ์ฌ๋๋ค์ ์คํ๋ ค ๋ง์ด ๋ง์์ง ์๋ ์๋ ๋ฐฉ๋ฒ์ผ๋ฏ ํ๋ค๋. -_-a (ํ์ง๋ง, ์ผ๊ตด ์๋ณด์ด๋ ์ฌ๋์ด๋ผ ํ๋๋ผ๋ ์งํฌ ๊ฒ์ ์งํค์.!)
๋ท๋ฏธํ , VNC ๋ฑ์ ๊ฐ๋ฐ ํ๋ก๊ทธ๋จ์ ๊ณต์ ํ ์ ์๋ ํ๋ก๊ทธ๋จ๊ณผ ์์ฑ์ฑํ ๋ฑ์ผ๋ก Virtual PairProgramming์ ํ ์ ์๋ค. (์ค.. ์ข์์ง ์ธ์~) ๋จ,PairProgramming ์ ๋นํด ์์ฌ์ด์ ๋ค์ด ์๋ค. (๊ด๋ จ ์ฑ ๋ค์ ์ฐพ์์ ๋ณด์ฌ์ฃผ์ง ๋ชปํ๋ค๋ ๊ฒ ๋ฑ๋ฑ) ๋์ค์๋ PC์นด๋ฉ๋ผ์ ์ค์บ๋ ๋ฑ๋ฑ ์ด์ฉํ ์ ์์ง ์์๊น.

6. PP ๊ฒฝํํ๊ธฐ ¶
- ์ธ์ด : PHP
- ํํธ๋ : ์ง์ฅ๋๋ฃ
- ๋๋ผ์ด๋ฒ : Benghun
- ๊ตฌํ๊ณผ์ : ๋ฐ์ดํ๋ฒ ์ด์ค ํด๋์ค(Database.inc)
๋๋ .NET์ System.Data์ ๊ตฌ์กฐ๋ฅผ ๋ณด๊ณ ์ฆ์ PHP์ ์ ์ฉ์ํค๊ณ ์ถ์ด์ก๋ค. ASP.NET์๋ SqlConnection , OdbcConnection , OleDbConnection์ ์ ๊ณตํด ์ค๋ค. ์ด ํด๋์ค๋ค์ ์ ์ฌ์ฉํ๋ฉด DataTier์ ์ข ๋ฅ๊ฐ ๋ฐ๋์ด๋ ์ฝ๋์ ์์ ์ ์ต์ํ ์ํฌ ์ ์๋ค. PHP๋ ์ฌ๋ฌ๊ฐ์ง ์ข ๋ฅ์ ๋ฐ์ดํ๋ฒ ์ด์ค ๊ด๋ จํจ์๋ฅผ ์ ๊ณตํด์ค๋ค. ์ด๋ ํ ๋ฐ์ดํ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋๋์ ๋ฐ๋ผ ๋์ผํ ๊ธฐ๋ฅ์ ํ๋ ๋ค๋ฅธ ์ด๋ฆ์ ํจ์๋ฅผ ํธ์ถํด์ผ๋ง ํ๋ค.
~cpp class IConnection { function Connect(){} function Execute(){} function Close(){} ... } class OdbcConnection : IConnection { function Connect(){ odbc_connect(); } function Execute(){ odbc_do(); } function Close(){ odbc_close(); } } class MySqlConnection : IConnection { function Connect(){ mysql_connect(); } function Execute(){ mysql_query(); } function Close(){ mysql_close(); } }
ํ๋์ ํด๋์ค๋ฅผ ๊ตฌํํ๊ณ ๊ตฌํ๋ ํ๋์ ํด๋์ค์์ switch๋ก ํธ์ถ๋์ด์ผ ํ๋ ํจ์๋ฅผ ๊ฒฐ์ ํ๋ฉด ๋๋ค๋ ๊ฒ์ด์๋ค.
~cpp class Connection { function Connect() { switch(UsingDatabase){ case Odbc: odbc_connect(); case MySql: mysql_connect(); ... } } function Execute() { swtich(UsingDatabase){ case Odbc: odbc_do(); case MySql: mysql_query(); ... } } }๋๋ ์ผ์ฐจ์ ์ผ๋ก switch์ฝ๋๋ฅผ ์์จ ์ ์๋ค๋ ์ ์ ์ค๋ช ํ๋ค. ์ฐ๋ฆฌ๋ Connectionํด๋์ค๊ฐ ๊ทธ๋ค์ง ํฌ๊ฒ ๋ฐ๋์ง ์์ ๊ฒ์ด๋ผ๋ ๊ฒ์ ๋ํด ๋์ํ์๊ณ ์ด ์ ์ ๊ทผ๊ฑฐ๋ก switch๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ์ง๋ณด์๋ฅผ ํ๋ค๊ฒ ํ๋๊ฐ์ ๋ํด ์ง๋ฌธํ๋ค. ์์งํ ์ด์ ๋ ์ฝ๋๋ผ๋ฉด ๋๊ตฌ๋ ์์ ํ ์ ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ ๊ฒ ๋ง์ ์๊ฐ์ ํ์๋ก ํ๋ ์์ ๋ ์๋๋ผ๊ณ ์๊ฐํ๋ค. ํํธ๋๋ Connection์ ์์ฑํ๋ ๋ถ๋ถ์ include ํ์ผ๋ก ๊ด๋ฆฌํ๊ณ ๊ทธ๊ณณ์ ํ๋ฒ๋ง define๋ฌธ์ ์์ฑํ๋ฉด ๋ฌธ์ ๊ฐ ์๋ค๊ณ ์ฃผ์ฅํ๋ค.
~cpp // in GetConnectionObject.inc file define("UsingDatabase", Odbc); function GetConnectionObject() { return new Connection(); }
See Also
- http://pairprogramming.com - ๊ด๋ จ ์ฌ์ดํธ
- http://www.objectmentor.com/publications/xpepisode.htm - Robert C.Martin ๊ณผ Robert S Koss ์ด ๋ํํ๋ฉด์ Pair๋ฅผ ํ๋ ์์ .
- http://c2.com/cgi/wiki?PairProgramming - 'PairProgramming Pattern' ์ด๋ผ๊ณ ์จ๋์ ๊ฒ์ด ์ฌ๋ฏธ์๋ค. ์ด๋์ 'ํจํดํ' ^^;
- PairProgrammingํ ๋ก , PairProgrammingForGroupStudy
PairProgramming,
PairProgramming,
PairProgramming
- http://no-smok.net/nsmk/PairProgramming