์†Œ์ˆ˜์„ค ์ฃผ์ฐฝ์ค‘ ํ•˜๋‚˜์ธ eXtreme Programming์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

eXtreme Programming (XP)

  • Agile ๊ฐœ๋ฐœ๋ก ์˜ ์ผ๋ถ€

Pair Programming

  • ์ง ํ”„๋กœ๊ทธ๋ž˜๋ฐ
  • 90๋…„๋Œ€ ๋ง, 2000๋…„ ๋Œ€์ดˆ ํฅํ–ˆ๋˜ ์œ ํ–‰์–ด
  • 2๋ช…์ด์„œ ํ•œํŒ€์œผ๋กœ ์ง„ํ–‰
  • ๋ฆฌ๋ทฐ / ์ฝ”๋“œ ๋‚˜๋ˆ ์„œ ์ง„ํ–‰ํ•˜๋‹ค๊ฐ€ ์Šค์œ„์นญ ํ•ด์„œ ๋‹ค์‹œ ์ง„ํ–‰
  • ์ฃผ์žฅ: ๋‘˜์€ ํ•˜๋‚˜๋ณด๋‹ค ๋‚ซ๋‹ค. ๋‚˜์€ ํ’ˆ์งˆ์„ ๊ฐ€์ ธ์˜จ๋‹ค.
  • ๊ทผ๋ฐ ์‹ค์งˆ์ ์œผ๋กœ ์ธ๊ฑด๋น„ 2๋ฐฐ > ํ’ˆ์งˆ 2๋ฐฐ?
  • ์‹ค์ œ ํšจ๊ณผ๋ฅผ ์ธก์ •ํ•ด๋ณด๋‹ˆ ๊ฐ€์„ฑ๋น„๊ฐ€ ์•ˆ ๋งž๋‹ค.
    • ๋ฆฌ์„œ์น˜์— ๋”ฐ๋ฅด๋ฉด ํŽ˜์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ดํ›„ ๋ฌธ์ œ๊ฐ€ 15% ์ค„์—ˆ๋‹ค.
    • ์ฆ‰, ํšจ๊ณผ๊ฐ€ ์•ˆ ๋งž๋Š”๋‹ค.
  • ๋‹ค๋งŒ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ํ”„๋กœ์„ธ์Šค๋Š” ๋‚จ์•„์„œ ์—…๊ณ„์— ๋„์›€์ด ๋˜๊ณ  ์žˆ๋‹ค.

์ง€์†์  ํ†ตํ•ฉ (CI)

  • ์›๋ž˜๋Š” Grady Booch(index ์ฐฝ์‹œ์ž)๊ฐ€ ์ฃผ์ฐฝํ•œ ๋ฐฉ๋ฒ•
    • ๊ทธ๋ƒฅ ๊ฐ€์ ธ๋‹ค๊ฐ€ ์ž๊ธฐ๊ฐ€ ์›์กฐ๋ผ ๋งํ•˜๊ณ  ์žˆ๋Š” ๊ผด
  • Code merge์‹œ ๋ฌธ์ œ๊ฐ€ ๋งŽ์ด ๋ฐœ์ƒํ•จ
  • ๊ทธ๋ž˜์„œ ์ง€์†์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๋ณ‘ํ•ฉํ•ด์•ผ ํ•จ์„ ๋งํ•จ
  • ๊ทผ๋ฐ ์—ฌ๊ธฐ์„œ ์‹ค์ˆ˜๊ฐ€ ๋งŽ์ด ๋ฐœ์ƒํ•จ
  • ๊ฐ์ž ๋ธŒ๋žœ์น˜์—์„œ ์˜ค๋žซ๋™์•ˆ ์ž‘์—…์„ ์ง„ํ–‰ํ•˜์ง€ ๋ง์ž!
  • ๊ต‰์žฅํžˆ ์ข‹์€ ๋ฐฉ์‹์ž„
  • ํ•˜์ง€๋งŒ XP๊ฐ€ ์ฃผ์ฐฝํ•œ CI๊ฐ€ ์•„๋‹˜

XP์˜ CI

  • ํ•ฉ์น˜๋Š” ํšŸ์ˆ˜๋Š” ๋ฐ˜๋“œ์‹œ ํ•˜๋ฃจ์— ์—ฌ๋Ÿฌ๋ฒˆ์ด์–ด์•ผ ํ•œ๋‹ค.
  • ์–ธ์ œ๋‚˜ ์ตœ์‹ ๋ฒ„์ „!
  • ๊ทผ๋ฐ ๋„ˆ๋ฌด ๋นˆ๋ฒˆํ•˜๋ฉด ํšจ๊ณผ์ ์ด์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ
  • ํ…Œ์ŠคํŒ…์—์„œ ๋ฌธ์ œ๊ฐ€ ์ข€ ๋งŽ์Œ
  • ๋ฒ„๊ทธ์˜ ์ด์œ ๋Š” ๋ณดํ†ต ๊ตฌํ˜„์ž๊ฐ€ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ž˜๋ชป ์ดํ•ดํ•ด์„œ ๋ฐœ์ƒํ•จ
  • ๊ทธ๋ž˜์„œ ๊ตฌํ˜„์ž๊ฐ€ ์•Œ์•„์ฐจ๋ฆฌ๊ธฐ ์–ด๋ ค์›€, ๊ทธ๋ž˜์„œ ์ „๋ฌธ ํ…Œ์Šคํ„ฐ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒƒ

Test-Driven Development

  • ๊ฐœ๋ฐœ ๊ณผ์ •์„ ํ…Œ์ŠคํŠธ ์šฐ์„ ์œผ๋กœ ๋ฐ”๊ฟˆ
  • ๊ธฐ๋Šฅ ๊ตฌํ˜„ ์ด์ „์— ๋ฐ˜๋“œ์‹œ ํ…Œ์ŠคํŠธ ํ•˜๋Š” ์ฝ”๋“œ๋ถ€ํ„ฐ ๋งŒ๋“ค์–ด์•ผ ํ•จ
  • ๊ธฐ๋Šฅ๋ถ€ํ„ฐ ๋งŒ๋“ค๋˜ ๊ธฐ์กด์˜ ๋ฐฉ๋ฒ•๊ณผ ๋ฐ˜๋Œ€
  • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์ž‘์„ฑ์ž == ๊ตฌํ˜„์ž

๋ฐฉ๋ฒ•

  1. ์–ด๋–ค ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š”์ง€ ์ˆ™์ง€
  2. ๊ทธ ๊ธฐ๋Šฅ์ด ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ํ…Œ์ŠคํŠธํ•  ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ฆ
    • ํ•ด๋‹น ๊ธฐ๋Šฅ์€ ์•„์ง ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•˜์Œ
    • ๋‹จ์œ„ํ…Œ์ŠคํŠธ ์‚ฌ์šฉ
  3. ๊ธฐ๋Šฅ ๊ตฌํ˜„
  4. 2์—์„œ์˜ ํ…Œ์ŠคํŠธ ์‹คํ–‰
    • ์„ฑ๊ณต
    • ์‹คํŒจ: 3์œผ๋กœ ๋Œ์•„๊ฐ
  5. ์ €์žฅ์†Œ์— ์žˆ๋Š” ๋‹ค๋ฅธ ๋‹จ์œ„ํ…Œ์ŠคํŠธ๋ฅผ ๋ชจ๋‘ ์‹คํ–‰
    • ์„ฑ๊ณต
    • ์‹คํŒจ: ๋‚จ์ฝ”๋“œ ๋ง๊ฐ€ํŠธ๋ฆฐ ๊ฒƒ. 3๋ฒˆ์œผ๋กœ ๋Œ์•„๊ฐ
  6. ๊ตฌํ˜„, ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ €์žฅ์†Œ์— ์ถ”๊ฐ€

์ฃผ์žฅ

  • TDDํ•˜๋ฉด ๊ทน๋‹จ์  CI๋„ ๋ฌธ์ œ ์—†์Œ
  • ํ•˜๋ฃจ์— ์—ฌ๋Ÿฌ๋ฒˆ ๋ธŒ๋žœ์น˜ ํ•ฉ์ณ๋„ ์ž๋™์œผ๋กœ ํ…Œ์ŠคํŠธ ๋จ
  • ๋‹จ, ๋ชจ๋“  ํ•จ์ˆ˜์— ๋Œ€ํ•ด ๋‹จ์œ„ํ…Œ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•จ
    • ์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€ 100%
  • ์–ธ์ œ๋‚˜ ๋ชจ๋“  ์ฝ”๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋‹ˆ ํ’ˆ์งˆ์ด ๋†’์•„์ง

TDD์™€ ๊ฒฝ์ œ๋…ผ๋ฆฌ

  • ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋‹น์—ฐํžˆ ํ’ˆ์งˆ์ด ๋†’์•„์ง„๋‹ค.
    • ๋‹ค๋ฅธ ์กฐ๊ฑด์ด ๋™์ผํ•˜๋‹ค๋ฉด
  • ๊ฐ€์„ฑ๋น„๊ฐ€ ์žˆ๋Š”๊ฐ€?
  • ์™œ ์—…๊ณ„์—์„œ ํฌ๊ธฐํ–ˆ์„๊นŒ?
  • ๊ณผ์—ฐ ์ œ๋Œ€๋กœ๋œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?
  • ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ > ์ž‘์€ ํ•จ์ˆ˜ > ๋ชจ๋“ˆํ™”, ์œ ์—ฐ์„ฑ ์ธก๋ฉด์—์„œ ์ข‹์•„์ง
  • ๊ทธ๋Ÿฐ๋ฐ ์™œ? ๊ตณ์ด?
  • ์œ ์—ฐํ•œ ์„ค๊ณ„๋Š” ์ ˆ๋Œ€์ ์œผ๋กœ ์ข‹์€ ๊ฐ€์น˜๊ฐ€ ์•„๋‹ˆ๋‹ค.
  • ์ ๋‹นํ•œ ํฌ๊ธฐ๊ฐ€ ์ข‹์€ ๊ฒƒ.

๊ฒฝ์ œ๋…ผ๋ฆฌ์™€ ์•ˆ์ „

  • ๋ฒ„๊ทธ๊ฐ€ ์—†๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค๊ณ  ์‹ถ์€ ๊ฒƒ์€ ์ธ์ •
  • ํ•˜์ง€๋งŒ ๊ฒฝ์ œ๋…ผ๋ฆฌ๋ฅผ ๋ฐฐ์ œํ•˜๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์—†์Œ
    • ๊ฐœ๋ฐœ๋น„๋ฅผ ์•„๋ผ๋ ค ์‚ฌ์šฉ์ž์—๊ฒŒ ํ…Œ์ŠคํŠธ๋ฅผ ๋ฏธ๋ฃธ
    • ์ฐจ๋ผ๋ฆฌ ๋ถˆ์•ˆ์ •ํ•œ ์ œํ’ˆ์„ ์ฃผ๊ณ  ํ• ์ธ์„ ํ•˜๋Š”๊ฒŒ ๋‚˜์„ ์ˆ˜ ์žˆ์Œ
  • ๋‹จ, ์ธ๊ฐ„์˜ ์ƒ๋ช…์— ์ง๊ฒฐ๋˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ฒฝ์ œ๋…ผ๋ฆฌ๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์Œ
    • ์•ˆ์ „ ๋งˆ์ง„, ์•ˆ์ „ ๊ณ„์ˆ˜(๊ธฐ๊ณ„๊ณตํ•™)

ํšจ๊ณผ์ ์ธ ํ…Œ์ŠคํŠธ

  • ์ตœ์ข… ํ…Œ์ŠคํŠธ
  • ๋ถ€ํ’ˆ ํ…Œ์ŠคํŠธ
  • ๋‘˜์ค‘ ํ•˜๋‚˜๋งŒ ํ•œ๋‹ค๋ฉด? ๋‹น์—ฐํžˆ ์ตœ์ข… ํ…Œ์ŠคํŠธ
  • ์ œํ’ˆ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๋ฉด ์ตœ์ข… ์ œํ’ˆ๋งŒ ํ…Œ์ŠคํŠธํ•  ์ˆ˜๋Š” ์—†๋‹ค.
  • ์ ๋‹นํ•œ ํฌ๊ธฐ๋กœ ๋ถ„๋ฆฌํ•˜๊ณ  ๊ฐ ๋ถ€๋ถ„ ๋™์ž‘ ํ…Œ์ŠคํŠธ๊ฐ€ ๋” ํšจ๊ณผ์ ์ž„
  • ํ…Œ์ŠคํŠธ๋Š” ์ „๋ฌธ๊ฐ€์—๊ฒŒ ๋งก๊ธฐ์ž.
  • mock ๊ฐ์ฒด๋งŒ๋“œ๋Š” ๋น„์šฉ๋„ ๋„ˆ๋ฌด ๋†’์Œ, api ํ†ต์‹ ์„ ํ•ด์•ผํ•  ์ˆ˜๋„ ์žˆ์Œ

๋‹จ์œ„ ํ…Œ์ŠคํŠธ์˜ ์šฉ๋„

  • ์•ˆ์ „์ด ์ค‘์š”ํ•˜๋‹ค๋ฉด ๊ณ ๋ คํ•˜์ž.
    • ๊ผผ๊ผผํžˆ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€์„ฑ๋น„ ์ข‹์ง€ ์•Š์€ TDD๊นŒ์ง€ ์ถ”๊ฐ€ํ•˜์ž.
    • ๋‹ค๋งŒ ์ด ๊ฒฐ์ •์€ ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ์ž๊ฐ€ ํ•ด์•ผํ•จ(์ฑ…์ž„์ž)
  • ์ „๋ฌธ ํ…Œ์ŠคํŠธ ์ธ๋ ฅ์ด ์—†๋Š” ๊ฒฝ์šฐ
    • ํ…Œ์Šคํ„ฐ ๋Œ€์‹  ํ”„๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ ํ•˜๋Š”๊ฑด ๊ฐ€์„ฑ๋น„๊ฐ€ ์•ˆ๋งž์Œ
    • ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ์ธ ๊ฒฝ์šฐ ์ง„ํ–‰

๋‹จ์œ„ ํ…Œ์ŠคํŠธ๊ฐ€ ๋‚˜์œ ๊ฒƒ์€ ์•„๋‹˜

  • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๊ด€๋ จ ์—†๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ด€๋ จ์ด๋ผ๋ฉด ์‰ฝ๊ฒŒ ์‚ฌ์šฉ๊ฐ€๋Šฅ
  • ๋งค๊ฐœ๋ณ€์ˆ˜ ๋งŒ์œผ๋กœ ํ•จ์ˆ˜์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ
  • ๋…๋ฆฝ์ ์ธ ๋ชจ๋“ˆ๋กœ ๋งŒ๋“ค๊ฒŒ ๋˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Œ

๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ๋‹คํ˜•์„ฑ

  • Mock ๊ฐœ์ฒด๊ฐ€ ํ•„์š”ํ•ด?
  • ๋ชจ๋“  ๊ฑธ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š” ์ด์œ ๊ฐ€ ๋‚˜์™”๋‹ค!
  • ์ฆ‰, ๋‹จ์œ„ํ…Œ์ŠคํŠธ mock๊ฐœ์ฒด๋ฅผ ์œ„ํ•ด ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ฃผ์žฅ
  • ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์ œํ’ˆ๊ณผ ์ƒ๊ด€์—†์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ?

๋™์  ํƒ€์ž…๊ณผ TDD

  • ์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€ 100%๋Š” ์ค‘์š”ํ•˜๋‹ค.
  • ๊ทธ๋ž˜์•ผ ๋™์  ํƒ€์ž… ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • ?
  • ์ œํ’ˆ ๋งŒ๋“ค๋•Œ ๋™์  ํƒ€์ž… ์–ธ์–ด๋Š” ์˜คํžˆ๋ ค ํ”ผํ•ด์•ผ ํ•จ
  • ์‹ค์ˆ˜๊ฐ€ ๋งŽ์ด ๋‚˜์˜ด
  • pythonโ€ฆ
  • javascriptโ€ฆ โ†’ Typescript

์ •๋ฆฌ

  • ๋ฌด์กฐ๊ฑด, ๋ชจ๋“ ๊ณผ ๊ฐ™์€ ๋‹จ์–ด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์กฐ์‹ฌํ•˜์ž.
  • ๊ถŒ์œ„์— ํ˜ธ์†Œํ•˜๋Š” ์ฃผ์žฅ์„ ๊ฒฝ๊ณ„ํ•˜์ž.
  • ๊ฒฝ์ œ๋…ผ๋ฆฌ์—์„œ ๋ฒ—์–ด๋‚œ ๊ฒƒ์€ ํ˜„์‹ค์ ์œผ๋กœ ๋ง์ด ์•ˆ๋œ๋‹ค.
  • ๊ฒฝ์ œ๋…ผ๋ฆฌ ๊ธฐ๋ฐ˜์—์„œ ์ œํ’ˆ์„ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๊ฒƒ์ด ์—”์ง€๋‹ˆ์–ด์˜ ์—ญ๋Ÿ‰์ด๋‹ค.
  • ์ œํ’ˆ์˜ ํŠน์„ฑ, ๋น„์ฆˆ๋‹ˆ์Šค ์ƒํ™ฉ, ์—ฐ๊ตฌ, ์–‘์‚ฐ๋“ฑ์˜ ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋ฐฉ๋ฒ•๋ก ์€ ๋‹ฌ๋ผ์ง„๋‹ค.

Reference