E D R , A S I H C RSS

Pair Programming


•˜๋‚˜˜ ปด“จ„—„œ ๋‘˜ด„œ „œ๋กœ ƒ˜•˜๋ฉด„œ ๋ฒˆ๊ฐˆ•„๊ฐ€๋ฉฐ ”„๋กœ๊ทธ๋ž˜๋ฐ„ •˜๋Š” ๋ฐฉ๋ฒ•.


1. Pair Programming Approach

PairProgramming „  šฉ•ด๋ณด๋Š” ๋ฐฉ๋ฒ•, Šคƒ€ผ ๋“๋“
  • Pair Refactoring - ๊ผญ †ŒŠค ฝ”๋“œ๊ฐ€ •„๋‹ˆ๋”๋ผ๋„ œ„‚ค Ž˜ดง€— ๋Œ€•œ ๋ฌธ„œ๊ตฌกฐกฐ • „ •˜๋Š” ๊ฒฝšฐ—๋„  šฉ•  ˆ˜ žˆ๋‹ค. Šนžˆ, •ด๋‹น † ๋ก ด ๋ฒŒ–ด„๋’ค –‘๋ก œผ๋กœ ๋‚˜๋ˆ„–ดกŒ„ ๊ฒฝšฐ, ๊ฐ ˜๊ฒฌ ง€ง€ž๋“คด Pair ๋กœ ๋ฌธ„œ๊ตฌกฐกฐ •„ • ๋•Œ ดšฉ•  ˆ˜ žˆ๋‹ค.
  • 5๋ถ„ Pair-Change - žฅ๊ณผ ๋‹จด กดžฌ•˜๊ธด •˜๋Š”๋ฐ. žฅ œผ๋กœ ๋ณธ๋‹ค๋ฉด, ž‹ ˜ ”„๋กœ๊ทธ๋ž˜๋ฐ ฐจ๋ก€๊ฐ€ ๋นจ๋ฆฌ ๋Œ•„˜ค๋ฉด„œ Pair ๋ผ๋ฆฌ˜ Feedback ด ๋น ๋ฅด๋‹ค๋Š”  —„œ ง‘ค‘๋„๊ฐ€ ๋†’๋‹ค๋Š”  ด žˆ๋‹ค. ๋‹จ, Junior ˜ ๊ฒฝšฐ ž‹ ˜ ‚ฌ๊ณ ๊ฐ€ „ˆ™•ดˆ ‹œ๊ฐ„„ ๋ฐฉ•ด•  ˆ˜ žˆ๋‹ค. ด ๊ฒฝšฐ 5๋ถ„œผ๋กœ ‹œž‘,  ฐจ œผ๋กœ Change ˜ ๊ธฐ๊ฐ„„ ๋Š˜๋ คฃผ๋Š” ๋ฐฉ๋ฒ•ด žˆ๋‹ค.

2. šจ๊ณผ

  • ฝ”๋“œ —๋Ÿฌœจ˜ ๊ฐ†Œ - ๋‚ด๊ฐ€ ๊ฐ„๊ณผ•˜๊ณ  ๋„˜–ด๊ฐ€๊ธฐ ‰ฌšด —๋Ÿฌ๋“ค— ๋Œ€•ด„œ ง€ ด ๋น ๋ฅด๋‹ค.
  • Protocol Analysis, ง€‹˜  „๋‹ฌ - Seminar: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 ๋ฅผ •˜๋Š” ๊ฒƒ žฒด๊ฐ€ ƒˆ๋กœšด •™Šต๊ฒฝ—˜ด ๋œ๋‹ค.


PairProgramming ˜ ๋‹ค๋ฅธ  šฉ ˜ˆ๋กœ„œ PairSynchronization ด žˆ๋‹ค.


4. PairProgramming ๊ฒฝ—˜๊ธฐ

4.1. ๋™๋ฌธ„œ๋ฒ„ ”„๋กœ๊ทธ๋žจ ๊ฐœ๋ฐœค‘

„–‰•œ ‚ฌ๋žŒ : ๊ฐ•„ฒœ, œคƒ˜

๋™๋ฌธ„œ๋ฒ„ ”„๋กœ๊ทธ๋ž˜๋ฐ Œ€˜ ธˆ˜ธ๊ณ„šฉœผ๋กœ ดšฉ๋˜—ˆ—ˆ๋‹ค. PP๋ฅผ ฃผ๋กœ •˜๊ณ  •œ๋‘๋ฒˆ˜ VPP๋ฅผ –ˆ๋‹ค. •ด๋‹น †ŒŠค๋ฅผ ๊ฐ™ด ๋งŒ๋“ค–ด๊ฐ€๋ฉด„œ ๊ธฐกด˜ ”„๋กœ๊ทธ๋žจ„ „ค๋ช…–ˆ๋‹ค.

4.1.1.  œ๊ธฐ๋œ ๋ฌธ œ  & •ด๊ฒฐ๋ฒ•

Expert : Junior . ฆ‰, •ด๋‹น ๋ถ„•ผ— ๋Œ€•œ  „๋ฌธ๊ฐ€ : ˆ‹ฌž ˜ ๋ฌธ œด๋‹ค. ด ๊ฒฝšฐ ๊ทธ „–‰ด ๋Šฆ–ดˆ ˆ˜ žˆ๋‹ค. (Expert : Expert๋Š” ตœ๊ณ ˜ šจœจ„„ ๊ฐ€„๋‹ค. ๋ฌผ๋ก  ด๊ฒƒ๋„ —ด๋ฆฐ ๋งˆŒ„ ๋ฐ”ƒ•œผ๋กœ •œ๋‹ค. Junior : Junior ๋„ ๋‚˜๋ฆ„๋Œ€๋กœ(?) ๋นจ๋ฆฌ ›€งธ๋‹ค. ( œ๋Œ€๋กœ ›€งธ๋‹ค๋Š” ๋ณดžฅ€ ๋ชป•œ๋‹ค. -_-;)) ๊ทธ๋ฆฌ๊ณ  Expert๊ฐ€ •ด๋‹น ”„๋กœ๊ทธ๋ž˜๋ฐ— ๋Œ€•œ ๋‹ต (ฝ”๋“œ)„ ด๋ฏธ •Œ๊ณ  žˆ๋Š” ๊ฒฝšฐ Expert˜ ง‘ค‘๋„™€ ๊ธดžฅ๊ฐ„ •ดน˜๊ฒŒ ๋œ๋‹ค.
ด ๋•Œ—๋Š” Expert๋Š” ๋†€ง€๋ง๊ณ  (-_-;) Observer˜ —ญ• — ถฉ‹ค•œ๋‹ค. Junior ˜ ”Œ๋ฐ•˜๋Š” ๋ถ€๋ถ„„ ๋ณด๋ฉด„œ  „ฒด ”„๋กœ๊ทธ๋žจ ๋‚ด˜ ๊ด€๊ณ„™€ ๋น„๊ต•ด๋ณด๊ฐ๋‚˜, 'ž‹ ด๋ผ๋ฉด –ด๋–ป๊ฒŒ •ด๊ฒฐ• ๊นŒ?' ๋“ ๋ฌธ œ๋ฅผ  œ๊ธฐ•ด๋ณด๊ฐ๋‚˜, reference, ๊ด€๋ จ †ŒŠค๋ฅผ ค€๋น„•ดฃผ๋Š” ๋ฐฉ๋ฒ•ด žˆ๋‹ค.

๋˜ •˜๋‚˜˜ ๋ฌธ œ œผ๋กœ  œ๊ธฐ๋œ ๊ฒƒ€, Junior ๊ฐ€ Expert˜ ๊ถŒœ„— ๋ˆŒ๋ฆด ˆ˜ žˆ๋‹ค๋Š” ๊ฒƒด๋‹ค. Junior ๋Š” ˆ๋ฌธ— šฉ๊ฐ•ด•ผ •œ๋‹ค. Expert๋Š” ๋‹ต๋ณ€— ธƒ‰•ด„œ๋Š” •ˆ๋œ๋‹ค. —ด๋ฆฐ ๋งˆŒด •„š”•œ ผด๋‹ค. (Communication ๊ณผ Courge ๋Š” XP ˜ ๋•๋ชฉด๋‹ค. ^^)

4.1.2. ๋ฐœ๊ฒฌ๋œ žฅ 

 „๋ฌธ๊ฐ€๋ผ •˜๋”๋ผ๋„ ”„๋กœ๊ทธ๋ž˜๋ฐ˜ ‹ค๋ ฅ๊ณผ ๋‹ค๋ฅธ‚ฌ๋žŒ—๊ฒŒ ๋‹ต๋ณ€•ดฃผ๋Š” ๋Šฅ๋ ฅ€ ๋‹ค๋ฅด๋‹ค. ปค๋ฎค๋‹ˆผ€ด…˜ ๋Šฅ๋ ฅ€ ‹ค œ ๋„๋ฉ”ธ— ๋Œ€•œ ง€‹๊ณผ๋Š” ๋‹ค๋ฅผ ˆ˜ žˆ๋‹ค. Expert ๋Š” Junior —๊ฒŒ „ค๋ช…„ •ดคŒœผ๋กœ„œ ๊ธฐกด˜ ง€‹— ๋Œ€•œ  •๋ฆฌ๋ฅผ •ด ๋‚˜๊ฐˆ ˆ˜ žˆ๋‹ค. Junior ๋Š” ˜ผž„œ ‚ฝˆ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋นจ๋ฆฌ •„š”•œ ง€‹— ๋Œ€•ด  ‘๊ทผ•  ˆ˜ žˆ๋‹ค.

4.2. TFP —ฐŠตค‘

„–‰•œ ‚ฌ๋žŒ : ๊ฐ•„ฒœ, ๋ฐ•ง€™˜

๊ฐ„๋‹จ•œ •„๋‚ ๋กœ๊ทธ ‹œ๊ณ„๋ฅผ ๋งŒ๋“œ๋Š” ”„๋กœ๊ทธ๋žจด˜€๋‹ค. MFC + CppUnit ๋กœ ž‘—…–ˆ๋‹ค.

4.2.1.  œ๊ธฐ๋œ ๋ฌธ œ  & •ด๊ฒฐ๋ฒ•

  • Pair ˜ „–‰„ ด๋Œ–ด๊ฐ€๋Š” ๊ฒƒ - ”„๋กœ๊ทธ๋ž˜๋ฐ˜ ๋ฆ„ด๋ผ๊ณ  •ด•ผ • ๊นŒ. ๋””žธ„ –ด๋А •๋„ „  •๋„๋กœ ๋งžถ”๊ณ  –ด๋– •œ ๋ฌธ œ๋ฅผ ’€ ๊ฒƒธ๊ฐ€— ๋Œ€•œ •ฝ๊ฐ„˜ „ ด •„𔕠 ๊ฒƒ ๊ฐ™๋‹ค. ด ๊ฒฝšฐ—๋Š” ˆ๋ฐ˜ ๋””žธด —ˆˆ –ˆ—ˆ๋‹ค๋Š” •ฝ ด žˆ—ˆ๋‹ค. ' „ฒด ธ ๊ด€ —„œ ๋ฌด—‡๋ฌด—‡„ •˜๋ฉด ”„๋กœ๊ทธ๋žจด ™„„๋  ๊ฒƒด๋‹ค' ๋ผ๋Š” ๊ฒƒ. UserStory ๋งŒ ƒ๊ฐ•˜๊ณ  EnginneringTask ๋ฅผ ๊ฐ„๊ณผ•œ ๊ฒƒด ฐ ๋ฌธ œ˜€๋‹ค. (๊ทธ๋•Œ EnginneringTask — ๋Œ€•œ ๊ฐœ๋…ด —†—ˆ—ˆ๋‹ค๋Š”. –ด๋””„œ •จ๋ถ€๋กœ ฃผ›Œ๋งŒ ง€‹. --; ‚ฌ๊ณ ๋ฅผ •˜ž ‚ฌ๊ณ ๋ฅผ. -_-)
    • ExtremeProgrammingPlanning ด๋ผ๋Š” …„ ๋ณด๋ฉด •ด๊ฒฐ…„ ๊ตฌ•  ˆ˜ žˆ„ ๊ฒƒ ๊ฐ™๋‹ค. (Xp …๋“ค˜ žฅ ดž ๋‹จ ด๋ผ๋ฉด –‡€ ๋‘๊ป˜˜ ๋ถ„…ด๋ ค๋‚˜.. --a)
  • Pair ˜ ๋ถ„๋ฐฐ - TFP๋ฅผ ๊ณต๋ถ€•˜๋А๋ƒ๊ณ  ‹œž‘•œ ๊ฒƒด˜€๋˜ง€๋ผ, ƒ๋Œ€ œผ๋กœ CppUnit — ตˆ™•˜ง€ •Š€ ‚ฌ๋žŒ—๊ฒŒ ฝ”๋”ฉ„ ฃผ๋„•˜๊ฒŒ –ˆ๋‹ค. •œ 1ฃผผ •๋„ ๋˜๋Š” ”„๋กœ Šธ๋ผ๋ฉด Junior๋กœ •˜—ฌ๊ธˆ ๊ฒฝ—˜„ Œ“๊ฒŒ •จœผ๋กœจ ˜คžˆ๋ ค žฅ œผ๋กœ ž‘šฉ•  ˆ˜๋„ žˆ„ ๊ฒƒ ๊ฐ™๋‹ค. •˜ง€๋งŒ, —ญ‹œ   ˆ•˜๊ฒŒ ๋ถ„๋ฐฐ๋ฅผ –ˆ—ˆ–ด•ผ •  ๊ฒƒ ๊ฐ™๋‹ค.
  • ง‘๋‹จ ‚ฝˆ. --; - ด๊ฒƒ€ —ค”„๋‹ด๋ผ๊ณ  ๋ณด๋Š” ๊ฒƒด. -_-;; Test Code —„œ ๋‘˜ด ๋ผ๋””•ˆ ๊ตฌ•˜๋Š” ๊ณต‹„ฐ๊พธ๋กœ “ฐ๊ณ  '™œ ๊ฐ’ด ‹€๋ฆฌ๋‹ค๊ณ  •˜๋Š”๊•ผ!' •˜๋ฉฐ 1‹œ๊ฐ„„ ‚ฝˆ–ˆ๋‹ค๋Š” ›„๋ฌธด žˆ๋‹ค๋Š”. --;
    • •˜ง€๋งŒ UnitTest๋„ ๊ทธ๋ ‡๋“ฏด, ๋งŽ€ žฅ „ ๊ฐ€„ ๋ฐฉ๋ฒ•„ ™„๋ฒฝ•˜ง€ •Š๋‹ค๋Š” ดœ ๋กœ ‚ฌšฉ•˜ง€ •Š๋Š”๋‹ค๋Š” ๊ฒƒ€ •„‰ฌšด ผผ ๊ฒƒด๋‹ค.
  • •„ง€ šจœจ„ด.. - ผข…˜ Learning Time ด๋ผ๊ณ  •ด•ผ • ๊นŒ? ๋Œ€๋ถ€๋ถ„ ‹ค—˜—„œ ๋๋‚œ๋‹ค๋Š”  . ฝ •˜๊ณ  ฒ˜Œ๋ถ€„šจœจ„„ ๊ทน๋Œ€™” •  ˆœ —†„ ๊ฒƒด๋‹ค. ฐธ๊ณ ๋กœ ด๋•Œ๋Š” •„๋‚ ๋กœ๊ทธ ‹œ๊ณ„ ๋งŒ๋“œ๋Š”๋ฐ ๊˜ 3‹œ๊ฐ„ด ๊ธ๋ ธ๋‹ค. Man-Hour ๋กœ น˜๋ฉด 6‹œ๊ฐ„ด ๋œ๋‹ค.

4.2.2. ๋ฐœ๊ฒฌ๋œ žฅ 

ง‘ค‘๋„๋Š” ๊˜ ตœ๊ณ ๋ผ๋Š”  ! (ด  —„œ ๋‘˜ด „œ๋กœ ๋™˜๋ฅผ –ˆ๋‹ค.) ‰†Œ ˜ผž ”„๋กœ๊ทธ๋ž˜๋ฐ• ๋•Œ๋Š” ค‘๊ฐ„— ›„œ•‘„ •˜๋Š” ๋“ ฃผœ„๊ฐ€ ‚ฐ๋งŒ•ดง€๋Š” ๊ฒฝšฐ๊ฐ€ ๋งŽ•˜๋‹ค. •˜ง€๋งŒ ด Pair ค‘—๋Š” ‚ฌ๋žŒ๋“คด ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ † ๋ก —๋งŒ  „๋…•  ˆ˜ žˆ—ˆ๋‹ค. (˜คžˆ๋ ค ค‘๊ฐ„ค‘๊ฐ„ ผ๋ถ€๋Ÿฌ 10๋ถ„ œด‹„ ๋‘–ด•ผ –ˆ๋‹ค.)

TestFirstProgramming ๊ณผ PairProgramming € ง‘ค‘๋„— ๊ด€•ด„œ๋Š” ๊ฐ€žฅ ›Œ๋ฅญ•œ „ ƒธ ๊ฒƒ ๊ฐ™๋‹ค. (๋‹จ, Pair™€˜ ๋‹ด•ฉ–‰œ„๊ฐ€ ด๋ฃจ–ดง€๋ฉด ๊ณค๋ž€•˜๊ฒ ๋‹ค. -_-;)

4.3. bioinfomatix ”„๋กœ Šธค‘

„–‰•œ ‚ฌ๋žŒ : ๊ฐ•„ฒœ, bioinfomatix —„œ ผ•˜‹œ๋Š” ๋ถ„๋“ค

•™Šต๋ชฉ ด •„๋‹Œ ‹คˆ ธ ๊ฐœ๋ฐœ„ œ„•œ 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 ๋ฌธ œ๋ฅผ ‘ธ๋Š” ผ„ –ˆ๋‹ค.

4.4.1.  œ๊ธฐ๋œ ๋ฌธ œ 

  • •„‰ฝ๋‹ค๋ฉด.. Ž˜๋„‹ฐ; ‘;;; ๋‹ตด •ˆ๋‚˜™”๋‹ค. --;
  • ๋Œ€™” - ƒ๋Œ€๋ฐฉด '•Œ๊ณ  žˆ„ ๊ฒƒด๋‹ค' ๋ผ๋Š”  ๋„ ‹ค œ๋Š” ๋ชจ๋ฅด๊ณ  žˆ๋Š” ๊ฒฝšฐ๊ฐ€ ๋งŽ๋‹ค๋ผ๋Š” ƒ๊ฐ„ •ด๋ณธ๋‹ค. นœ•œนœ๊ตฌ ด๋”๋ผ๋„, ƒ๋Œ€๋ฐฉ„ ž˜ •ˆ๋‹ค๋ผ๊ณ  ƒ๊ฐ•˜๋”๋ผ๋„, ƒ๋Œ€๋กœ๋ถ€„ฝง€ ๋ชป•œ  •๋ณด๋Š” ๋„ˆ๋ฌด๋‚˜ ๋งŽ๊ธฐ—.
    • ๋ณด๊ฐ„๋ฒ•˜ ˜คฐจ๋ฅผ „ด๋ ค๋ฉด 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 (•˜ง€๋งŒ, –ผ๊ตด •ˆ๋ณดด๋Š” ‚ฌ๋žŒด๋ผ •˜๋”๋ผ๋„ ง€‚ฌ ๊ฒƒ€ ง€‚คž.!)

6. PP ๊ฒฝ—˜›„๊ธฐ

  • –ธ–ด : PHP
  • ŒŒŠธ๋„ˆ : งžฅ๋™๋ฃŒ
  • ๋“œ๋ผด๋ฒ„ : Benghun
  • ๊ตฌ˜„๊ณผ œ : ๋ฐดƒ€๋ฒ ดŠค ด๋ž˜Šค(Database.inc)
ฐธ๊ณ ‚ฌ•ญ : ๋ช‡๋ช‡ •จˆ˜— ๋Œ€•ด„œ๋งŒ TDD๋ฅผ  šฉ‹œผฐ๋‹ค.
๋‚˜๋Š” .NET˜ System.Data˜ ๊ตฌกฐ๋ฅผ ๋ณด๊ณ  ฆ‰‹œ PHP—  šฉ‹œ‚ค๊ณ  ‹ถ–ดกŒ๋‹ค. ASP.NET—๋Š” SqlConnection , OdbcConnection , OleDbConnection„  œ๊ณต•ด ค€๋‹ค. ด ด๋ž˜Šค๋“ค„ ž˜ ‚ฌšฉ•˜๋ฉด DataTier˜ ข…๋ฅ˜๊ฐ€ ๋ฐ”๋€Œ–ด๋„ ฝ”๋“œ˜ ˆ˜ •„ ตœ†Œ™” ‹œ‚ฌ ˆ˜ žˆ๋‹ค. PHP๋Š” —ฌ๋Ÿฌ๊ฐ€ง€ ข…๋ฅ˜˜ ๋ฐดƒ€๋ฒ ดŠค ๊ด€๋ จ•จˆ˜๋ฅผ  œ๊ณต•ดค€๋‹ค. –ด๋– •œ ๋ฐดƒ€๋ฒ ดŠค๋ฅผ ‚ฌšฉ•˜๋А๋ƒ— ๋”ฐ๋ผ ๋™ผ•œ ๊ธฐ๋Šฅ„ •˜๋Š” ๋‹ค๋ฅธ ด๋ฆ„˜ •จˆ˜๋ฅผ ˜ธถœ•ด•ผ๋งŒ •œ๋‹ค.

IConnection„ ดšฉ•ด ๊ฐ๊ฐ˜ Connection— ๋Œ€•ด ๋‹จผ˜ ธ„Ž˜ดŠค๋ฅผ  œ๊ณต•˜๊ณ  IConnection„ ๊ตฌ˜„•˜๋Š” MySqlConnection , SqlConnection , OciConnection„ ๋งŒ๋“คž๋Š” ๊ฒƒด ๋‚˜˜ ƒ๊ฐด—ˆ๋‹ค. ŒŒŠธ๋„ˆ๋Š” switch๊ตฌ๋ฌธ„ ดšฉ•ด ด๋ž˜Šค˜ ƒ† ๊ตฌกฐ๋ฅผ —†• ๋Š” ๊ฒƒ๊ณผ ๋น„๊ต•ด„œ –ด๋– •œ ด ด žˆ๋Š”๊ฐ€— ๋Œ€•ด ˆ๋ฌธ–ˆ๋‹ค. ด๊ฒƒ€ žฅ‹œ๊ฐ„˜ † ๋ก œผ๋กœ ด–ดกŒ๋‹ค.

๋‚˜˜ ƒ๊ฐ€ ๋‹คŒ๊ณผ ๊ฐ™•˜๋‹ค.
~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(); 
}

๋‚˜๋Š” ด— ๋Œ€•ด •˜๋‚˜˜ ”„๋กœ Šธ—„œ —ฌ๋Ÿฌ๊ฐœ˜ ๋ฐดƒ€๋ฒ ดŠค๋ฅผ ‚ฌšฉ•˜๊ฒŒ ๋  ๊ฒฝšฐ —ฌ๋Ÿฌ๊ฐœ˜ ถ”๊ฐ€ ธ ŒŒผ๋“ค„ ๊ด€๋ฆฌ•ด•ผ ๋ ง€๋„ ๋ชจ๋ฅธ๋‹ค๊ณ  –ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  new SqlConnection(); , new MySqlConnection()๊ณผ ๊ฐ™€ ๋ฐฉ‹œผ๋กœ ‚ฌšฉ•˜๋Š” ๊ฒƒด ๋” ง๊ด€ ธ ๊ฒƒ ๊ฐ™๋‹ค๊ณ  „ค๋ช…–ˆ๋‹ค.

ถ”๊ฐ€ œผ๋กœ † ๋ก –ˆ๋˜ ‚ฌ•ญ : Connection ด๋ž˜Šค˜ ƒ„ž— ๋งค๊ฐœ๋ณ€ˆ˜๋กœ ๋ฐดƒ€๋ฒ ดŠค ƒ€ž…„„˜๊ฒจฃผ๋ฉด ๋œ๋‹ค๋Š” ๊ฒƒ๊ณผ ŒŒƒ๋œ ด๋ž˜Šค๋ฅผ ƒ„•˜๋Š” ๊ฒƒ

๊ธด † ๋ก  ๋— ŒŒŠธ๋„ˆ๋Š” ๋‚˜˜ ˜๊ฒฌ— ๋™˜–ˆง€๋งŒ ๋งŒ•ฝ ๊ณ„† ด๋Ÿฐ †๋„๋กœ ž‘—…ด „–‰๋œ๋‹ค๋ฉด šŒ‚ฌ—„œ ๊ฐ€๋งŒžˆง€ •Š„ ๊ฒƒด๋‹ค. (–ด œ๋„ TDD๋ฅผ ‚ฌšฉ–ˆ—ˆ๋Š”๋ฐ ๊ธฐกด˜ ฝ”๋”ฉ‹œ๊ฐ„— ๋น„•ด 3๋ฐฐ •๋„ ๋” ๋Šฆ–ดกŒ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹ค ๋๋‚ดง€๋„ ๋ชป–ˆ๊ณ  ๋ฌด—‡„ ๋จผ € …ŒŠคŠธ •ด•ผ• ง€ ๊ฐˆŒกˆŒก–ˆ—ˆ๋‹ค. ฒ˜Œ๋ถ€„•จˆ˜๋‹จœ„ …ŒŠคŠธ๋งŒ ‹œ๋„•ด•ผ๊ฒ ๋‹ค๋Š” ƒ๊ฐด ›ธ๊ฐ™๋‹ค.)

PP˜ žฅ € † ๋ก „ ๋งŽด•  ˆ˜ žˆ๋‹ค๋Š” ๊ฒƒ(˜‚ฌ†Œ†ต + ง€‹๊ณตœ ?)๊ณผ ง‘ค‘๋ ฅด ๋†’•„„๋‹ค๋Š” ๊ฒƒด—ˆ๋‹ค. ฒ˜Œด๋ผ ๊ทธ๋Ÿฐง€ ฝ”๋”ฉ‹œ๊ฐ„๋ณด๋‹ค † ๋ก ‹œ๊ฐ„ด ๋” ๊ธธ—ˆ๋‹ค. ๊ธฐกด˜ ๋ฐฉ‹๋Œ€๋กœ ˜ผž ฝ”๋”ฉ•˜๋ฉด PP๋ฅผ •˜๋Š” ๊ฒƒ ๋ณด๋‹ค ๋” ๋งŽ€ ฝ”๋“œ๋ฅผ ƒ‚ฐ•  ˆ˜ žˆ—ˆ๋‹ค. PP— ตˆ™•ดง€๊ณ  „œ๋กœ˜ ˜๊ฒฌฐจด๋ฅผ „ด๋ฉด    ƒ‚ฐ†๋„๊ฐ€ ๋‚˜•„ง€๋ฆฌ๋ผ ˜ˆƒ•ด ๋ณธ๋‹ค.

See Also


Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:59
Processing time 0.0511 sec