tooth-is-silver ๋‹˜์˜ ์ƒ์„ธํŽ˜์ด์ง€ ๏ผž [3ํŒ€ ์ด๊ฐ€์€] Chapter ๐Ÿฆ 3-2. ํ”„๋ก ํŠธ์—”๋“œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๐Ÿฆ

8์ฃผ์ฐจ ๊ณผ์ œ ์ฒดํฌํฌ์ธํŠธ

๊ธฐ๋ณธ ๊ณผ์ œ

ํ•„์ˆ˜

  • ๋ฐ˜๋ณต ์œ ํ˜• ์„ ํƒ
    • ์ผ์ • ์ƒ์„ฑ ๋˜๋Š” ์ˆ˜์ • ์‹œ ๋ฐ˜๋ณต ์œ ํ˜•์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๋ฐ˜๋ณต ์œ ํ˜•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค: ๋งค์ผ, ๋งค์ฃผ, ๋งค์›”, ๋งค๋…„
      • 31์ผ์— ๋งค์›”์„ ์„ ํƒํ•œ๋‹ค๋ฉด -> ๋งค์›” ๋งˆ์ง€๋ง‰์ด ์•„๋‹Œ, 31์ผ์—๋งŒ ์ƒ์„ฑํ•˜์„ธ์š”.
      • ์œค๋…„ 29์ผ์— ๋งค๋…„์„ ์„ ํƒํ•œ๋‹ค๋ฉด -> 29์ผ์—๋งŒ ์ƒ์„ฑํ•˜์„ธ์š”!
  • ๋ฐ˜๋ณต ์ผ์ • ํ‘œ์‹œ
    • ์บ˜๋ฆฐ๋” ๋ทฐ์—์„œ ๋ฐ˜๋ณต ์ผ์ •์„ ์‹œ๊ฐ์ ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ํ‘œ์‹œํ•œ๋‹ค.
      • ์•„์ด์ฝ˜์„ ๋„ฃ๋“  ํƒœ๊ทธ๋ฅผ ๋„ฃ๋“  ์ž์œ ๋กญ๊ฒŒ ํ•ด๋ณด์„ธ์š”!
  • ๋ฐ˜๋ณต ์ข…๋ฃŒ
    • ๋ฐ˜๋ณต ์ข…๋ฃŒ ์กฐ๊ฑด์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์˜ต์…˜: ํŠน์ • ๋‚ ์งœ๊นŒ์ง€, ํŠน์ • ํšŸ์ˆ˜๋งŒํผ, ๋˜๋Š” ์ข…๋ฃŒ ์—†์Œ (์˜ˆ์ œ ํŠน์„ฑ์ƒ, 2025-06-30๊นŒ์ง€)
  • ๋ฐ˜๋ณต ์ผ์ • ๋‹จ์ผ ์ˆ˜์ •
    • ๋ฐ˜๋ณต์ผ์ •์„ ์ˆ˜์ •ํ•˜๋ฉด ๋‹จ์ผ ์ผ์ •์œผ๋กœ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.
    • ๋ฐ˜๋ณต์ผ์ • ์•„์ด์ฝ˜๋„ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค.
  • ๋ฐ˜๋ณต ์ผ์ • ๋‹จ์ผ ์‚ญ์ œ
    • ๋ฐ˜๋ณต์ผ์ •์„ ์‚ญ์ œํ•˜๋ฉด ํ•ด๋‹น ์ผ์ •๋งŒ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
์„ ํƒ (์ž‘์—…X) - [ ] ๋ฐ˜๋ณต ๊ฐ„๊ฒฉ ์„ค์ • - ๊ฐ ๋ฐ˜๋ณต ์œ ํ˜•์— ๋Œ€ํ•ด ๊ฐ„๊ฒฉ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. - ์˜ˆ: 2์ผ๋งˆ๋‹ค, 3์ฃผ๋งˆ๋‹ค, 2๊ฐœ์›”๋งˆ๋‹ค ๋“ฑ - [ ] ์˜ˆ์™ธ ๋‚ ์งœ ์ฒ˜๋ฆฌ: - ๋ฐ˜๋ณต ์ผ์ • ์ค‘ ํŠน์ • ๋‚ ์งœ๋ฅผ ์ œ์™ธํ•  ์ˆ˜ ์žˆ๋‹ค. - ๋ฐ˜๋ณต ์ผ์ • ์ค‘ ํŠน์ • ๋‚ ์งœ์˜ ์ผ์ •์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. - [ ] ์š”์ผ ์ง€์ • (์ฃผ๊ฐ„ ๋ฐ˜๋ณต์˜ ๊ฒฝ์šฐ): - ์ฃผ๊ฐ„ ๋ฐ˜๋ณต ์‹œ ํŠน์ • ์š”์ผ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค. - [ ] ์›”๊ฐ„ ๋ฐ˜๋ณต ์˜ต์…˜: - ๋งค์›” ํŠน์ • ๋‚ ์งœ์— ๋ฐ˜๋ณต๋˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. - ๋งค์›” ํŠน์ • ์ˆœ์„œ์˜ ์š”์ผ์— ๋ฐ˜๋ณต๋˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. - [ ] ๋ฐ˜๋ณต ์ผ์ • ์ „์ฒด ์ˆ˜์ • ๋ฐ ์‚ญ์ œ - ๋ฐ˜๋ณต ์ผ์ •์˜ ๋ชจ๋“  ์ผ์ •์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. - ๋ฐ˜๋ณต ์ผ์ •์˜ ๋ชจ๋“  ์ผ์ •์„ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์ด ์•ฑ์— ์ ํ•ฉํ•œ ํ…Œ์ŠคํŠธ ์ „๋žต์„ ๋งŒ๋“ค์—ˆ๋‚˜์š”?

๊ฐ ํŒ€์›๋“ค์˜ ํ…Œ์ŠคํŠธ ์ „๋žต์€?

ํŒ€์›๋“ค๊ณผ ํ•จ๊ป˜ ์ „๋žต์„ ์Œ“๊ณ  ์‹ฌํ™”๊ณผ์ œ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค!

๊ธฐ๋Šฅ ํšŒ๊ท€ ํ…Œ์ŠคํŠธ

image

ํ•ฉ์˜๋œ ํ…Œ์ŠคํŠธ ์ „๋žต๊ณผ ๊ทธ ์ด์œ ๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?

"ํšŒ๊ท€ํ…Œ์ŠคํŠธ ์ค‘์‹ฌ์˜ ์•ˆ์ •์„ฑ ๋ณด์žฅ ์ „๋žต"

ํšŒ๊ท€ ํ…Œ์ŠคํŠธ๋Š” ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€๋‚˜ ๋ฆฌํŒฉํ„ฐ๋ง์ด ๊ธฐ์กด ๊ธฐ๋Šฅ์„ ๊นจ๋œจ๋ฆฌ์ง€ ์•Š์•˜๋Š”์ง€ ๋ณด์žฅํ•˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ ๋ชฉ์ ์ž…๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ "์ „์ฒด ํ…Œ์ŠคํŠธ"๊ฐ€ ์•„๋‹ˆ๋ผ ๊ธฐ์กด ๊ธฐ๋Šฅ ์œ ์ง€์— ์ดˆ์ ์„ ๋งž์ถ˜ ์•ˆ์ „๋ง ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ์ „๋žต

  1. ํšŒ๊ท€ํ…Œ์ŠคํŠธ ์ค‘์‹ฌ ์ ‘๊ทผ

    • ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ์‹œ ๊ธฐ์กด ๊ธฐ๋Šฅ์ด ๊นจ์ง€์ง€ ์•Š์•˜์Œ์„ ๋ณด์žฅ
    • ๊ธฐ๋Šฅ ๊ฐ„ ์ƒํ˜ธ์ž‘์šฉ ๊ฒ€์ฆ์— ์ง‘์ค‘
    • ํ†ตํ•ฉ์ ์ธ ๊ด€์ ์—์„œ์˜ ๊ธฐ๋Šฅ ๊ฒ€์ฆ
  2. ๊ธฐ์กด ๊ธฐ๋Šฅ ์œ ์ง€ ๋ณด์žฅ

    • ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ๊ณผ ํ•„๋“œ ์ถ”๊ฐ€์— ๋Œ€ํ•œ ๋Œ€์‘
    • ์ƒˆ๋กœ์šด ํ•„๋“œ๋‚˜ ๋กœ์ง ์ถ”๊ฐ€ ์‹œ ๊ธฐ์กด ๋กœ์ง์˜ ์•ˆ์ •์„ฑ ๋ณด์žฅ
    • ์—ฐ๊ด€ ๊ธฐ๋Šฅ๋“ค์˜ ์ •์ƒ ๋™์ž‘ ๊ฒ€์ฆ
  3. ์‹ค์ œ ์‚ฌ์šฉ์ž ์‹œ๋‚˜๋ฆฌ์˜ค ์ค‘์‹ฌ ํ…Œ์ŠคํŠธ

    • ์ด์ „ ๊ธฐ๋Šฅ ์žฌํ…Œ์ŠคํŠธ๊ฐ€ ์•„๋‹Œ ๊ธฐ๋Šฅ ๊ฐ„ ์ƒํ˜ธ์ž‘์šฉ ๊ฒ€์ฆ
    • ์‹ค์ œ ์‚ฌ์šฉ์ž ํ”Œ๋กœ์šฐ๋ฅผ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๋Š” realisticํ•œ ํ…Œ์ŠคํŠธ ๊ตฌํ˜„

์„ ํƒ ์ด์œ 

๋ฌธ์ œ ์ƒํ™ฉ

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

ํŠนํžˆ ํšŒ๊ท€ ํ…Œ์ŠคํŠธ์˜ ํ•„์š”์„ฑ์— ๋Œ€ํ•œ ๊ทผ๋ณธ์ ์ธ ์˜๋ฌธ์ด ์ œ๊ธฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ•œ ํŒ€์›์ด "ํšŒ๊ท€ ํ…Œ์ŠคํŠธ๊ฐ€ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๋ถ™์ผ ๋•Œ ์•ˆ์ •์„ฑ์„ ์ฃผ๋Š” ๊ฒƒ๊ณผ ์ „์ฒด ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๋Š” ๊ฒƒ๊ณผ ์ฐจ์ด๊ฐ€ ๋ฌด์—‡์ธ์ง€", "ํšŒ๊ท€ ํ…Œ์ŠคํŠธ๋Š” ๊ผญ ์‹ ๊ทœ ๊ธฐ๋Šฅ ๋ถ™์ผ ๋•Œ๋งŒ ์˜๋ฏธ ์žˆ๋Š” ๊ฑด๊ฐ€์š”?"๋ผ๋Š” ์งˆ๋ฌธ์„ ๋˜์ง€๋ฉด์„œ ํŒ€ ์ฐจ์›์˜ ๋…ผ์˜๊ฐ€ ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ํšŒ๊ท€ ํ…Œ์ŠคํŠธ์˜ ์œ ํ˜• ์„ ํƒ์— ๋Œ€ํ•œ ๊ณ ๋ฏผ๋„ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์‹œ๊ฐ์  ํšŒ๊ท€ ํ…Œ์ŠคํŠธ(Storybook์˜ ํฌ๋กœ๋งˆํ‹ฑ์„ ํ™œ์šฉํ•œ UI ๊ธฐ์ค€ ํ…Œ์ŠคํŠธ)๋ฅผ ์ง„ํ–‰ํ•  ๊ฒƒ์ธ์ง€, ์•„๋‹ˆ๋ฉด ๊ธฐ๋Šฅ ํšŒ๊ท€ ํ…Œ์ŠคํŠธ(์œ ๋‹›ํ…Œ์ŠคํŠธ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹)๋ฅผ ์ง„ํ–‰ํ•  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ๊ฒฐ์ •์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. UI ํ”ฝ์…€ ๊ธฐ๋ฐ˜ ํšŒ๊ท€ ํ…Œ์ŠคํŠธ ์ „๋žต์˜ ํ•„์š”์„ฑ์— ๋Œ€ํ•ด์„œ๋Š” ํŒ€ ๋‚ด์—์„œ ํฌ๊ฒŒ ํ•„์š”ํ•˜๋‹ค๋Š” ์˜๊ฒฌ์ด ์—†์–ด, ๊ธฐ๋Šฅ ํšŒ๊ท€ ํ…Œ์ŠคํŠธ ์ค‘์‹ฌ์œผ๋กœ ๋…ผ์˜๋ฅผ ์ง„ํ–‰ํ•˜๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์š” ๋…ผ์˜ ๊ณผ์ •

1๋‹จ๊ณ„: ํšŒ๊ท€ ํ…Œ์ŠคํŠธ์˜ ๋ณธ์งˆ์  ์˜๋ฏธ ํƒ๊ตฌ ์•ž์„œ ์ œ๊ธฐ๋œ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต๋ณ€์œผ๋กœ, ํšŒ๊ท€ ํ…Œ์ŠคํŠธ๋Š” ์ƒˆ ๊ธฐ๋Šฅ์ด ์•„๋‹ˆ๋ผ ๊ธฐ์กด ๊ธฐ๋Šฅ์ด ๊นจ์ง€์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์— ๋ชฉ์ ์ด ์žˆ๋‹ค๋Š” ์ ์ด ๊ฐ•์กฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ๋•Œ ํ”ํžˆ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋Š” ์ด๋ฏธ ์ˆ˜์ •ํ•œ ๊ธฐ๋Šฅ์ด ๋กค๋ฐฑ๋˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๋ถ€๋ถ„์— ์‚ฌ์ด๋“œ์ดํŽ™ํŠธ๋ฅผ ์ฃผ๋Š” ๊ฒƒ์ธ๋ฐ, ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ๊ฒƒ์ด ํšŒ๊ท€ ํ…Œ์ŠคํŠธ์˜ ํ•ต์‹ฌ ์—ญํ• ์ด๋ผ๊ณ  ์ •์˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

"๊ธฐ๋Šฅ A, B๋ฅผ ๊ฐœ๋ฐœํ•œ ํ›„ ๋‹ค์‹œ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒƒ์ด ํšŒ๊ท€ ํ…Œ์ŠคํŠธ์ธ๊ฐ€?"๋ผ๋Š” ๊ทผ๋ณธ์ ์ธ ์งˆ๋ฌธ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ, ๋‹จ์ˆœํ•œ ๊ธฐ๋Šฅ ์žฌํ…Œ์ŠคํŠธ์™€ ํšŒ๊ท€ ํ…Œ์ŠคํŠธ์˜ ์ฐจ์ด์ ์„ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„ํ•˜๊ณ ์ž ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋…ผ์˜ ๊ณผ์ •์—์„œ ํšŒ๊ท€ ํ…Œ์ŠคํŠธ์™€ ์ „์ฒด ํ…Œ์ŠคํŠธ ๊ฐ„์˜ ๋ช…ํ™•ํ•œ ์ฐจ์ด์ ์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค:

๊ตฌ๋ถ„ํšŒ๊ท€ํ…Œ์ŠคํŠธ
(Regression Test)
์ „์ฒดํ…Œ์ŠคํŠธ
(Full Test Suite)
๋ชฉ์ ๊ธฐ์กด ๊ธฐ๋Šฅ์ด ์—ฌ์ „ํžˆ ์ž˜ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ๊ฒ€์ฆ
์‹คํ–‰ ์‹œ์ ์ฝ”๋“œ ๋ณ€๊ฒฝ ํ›„์ •๊ธฐ์  ๋˜๋Š” ๋ฆด๋ฆฌ์Šค ์ „
ํ…Œ์ŠคํŠธ ๋ฒ”์œ„๋ณ€๊ฒฝ ์˜ํ–ฅ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๊ธฐ์กด ๊ธฐ๋Šฅ๋“ค๋ชจ๋“  ๊ธฐ๋Šฅ (์‹ ๊ทœ + ๊ธฐ์กด)
์‹คํ–‰ ์‹œ๊ฐ„โšก ๋น ๋ฆ„ (์ผ๋ถ€ ํ…Œ์ŠคํŠธ๋งŒ)โฑ๏ธ ์˜ค๋ž˜ ๊ฑธ๋ฆผ (๋ชจ๋“  ํ…Œ์ŠคํŠธ)
์ฃผ์š” ๊ด€์‹ฌ์‚ฌ๊ธฐ์กด ๊ธฐ๋Šฅ์˜ ์•ˆ์ •์„ฑ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์™„์ „์„ฑ

์ด๋Ÿฌํ•œ ๋น„๊ต ๋ถ„์„์„ ํ†ตํ•ด ํšŒ๊ท€ ํ…Œ์ŠคํŠธ๊ฐ€ ๋‹จ์ˆœํžˆ "์ „์ฒด ํ…Œ์ŠคํŠธ"๊ฐ€ ์•„๋‹ˆ๋ผ ์•ˆ์ •์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ์•ˆ์ „๋ง ์—ญํ• ์„ ํ•œ๋‹ค๋Š” ์ ์„ ๋ช…ํ™•ํžˆ ํ–ˆ์Šต๋‹ˆ๋‹ค.

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

// ์˜ˆ์‹œ
describe('๊ธฐ์กด ๋ฐ˜๋ณต ๊ณ„์‚ฐ ๋กœ์ง์ด excludeDates ์ถ”๊ฐ€ ํ›„์—๋„ ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•œ๋‹ค');
describe('weekday ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ์ดํ›„์—๋„ ๊ธฐ๋ณธ ์ฃผ๊ฐ„/์›”๊ฐ„/์—ฐ๊ฐ„ ๋กœ์ง์€ ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•œ๋‹ค');

3๋‹จ๊ณ„: ํŒ€ ์ฐจ์›์˜ ํ•ต์‹ฌ ๊ฐ€์น˜ ํ•ฉ์˜ ๋…ผ์˜๋ฅผ ํ†ตํ•ด ๋„์ถœ๋œ ํšŒ๊ท€ ํ…Œ์ŠคํŠธ์˜ ํ•ต์‹ฌ ๊ฐ€์น˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  • ๊ธฐ์กด ๊ธฐ๋Šฅ์˜ ์œ ์ง€ ๋ณด์žฅ: ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ์‹œ ๊ธฐ์กด ๊ธฐ๋Šฅ์ด ์ •์ƒ ๋™์ž‘ํ•˜๋Š”์ง€ ํ™•์ธ
  • ์—ฐ๊ด€ ๊ธฐ๋Šฅ ๊ฒ€์ฆ: ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์ด ๋™์ž‘ํ•  ๋•Œ ๊ธฐ์กด ๋™์ž‘ ์ค‘ ์—ฐ๊ด€๋œ ๊ธฐ๋Šฅ๋“ค์˜ ์ •์ƒ ๋™์ž‘ ํ™•์ธ
  • ์•ˆ์ „๋ง ์—ญํ• : ์ƒˆ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ์‹œ ์‚ฌ์ด๋“œ์ดํŽ™ํŠธ ๋ฐฉ์ง€ ๋ฐ ์†Œํ”„ํŠธ์›จ์–ด ์ „์ฒด ์•ˆ์ •์„ฑ ๊ฐœ์„ 

์ตœ์ข… ์ˆ˜๋ฆฝ ์ „๋žต

ํšŒ๊ท€ ํ…Œ์ŠคํŠธ ์œ ํ˜• ๊ฒฐ์ • ์‹œ๊ฐ์  ํšŒ๊ท€ ํ…Œ์ŠคํŠธ๋ณด๋‹ค๋Š” ๊ธฐ๋Šฅ ํšŒ๊ท€ ํ…Œ์ŠคํŠธ์— ์ง‘์ค‘ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์˜ ์‹ ๊ทœ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ํŠน์„ฑ์ƒ ๊ธฐ๋Šฅ์  ์•ˆ์ •์„ฑ์ด ๋” ์ค‘์š”ํ•˜๋‹ค๊ณ  ํŒ๋‹จํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

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

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


์ถ”๊ฐ€๋กœ ์ž‘์„ฑ๋œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋Š” ์–ด๋–ค ๊ฒƒ๋“ค์ด ์žˆ๋‚˜์š”?

ํŒŒ์ผ ์œ„์น˜ : src/__tests__/ํšŒ๊ท€ํ…Œ์ŠคํŠธ.spec.tsx ์—ฌ์ง„์„ PR

'ํšŒ๊ท€ํ…Œ์ŠคํŠธ: ๋ฐ˜๋ณต์ผ์ •๊ณผ ๊ธฐ์กด ๋‹จ์ผ์ผ์ • ์ถฉ๋Œ ๊ฒ€์‚ฌ'

  1. ๋ฐ˜๋ณต์ผ์ • ์ƒ์„ฑ ์‹œ ๊ธฐ์กด ๋‹จ์ผ์ผ์ •๊ณผ ์ถฉ๋Œํ•˜๋Š” ๊ฒฝ์šฐ ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋œ๋‹ค

    • ๋ชฉ์ : ๋ฐ˜๋ณต์ผ์ • ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ํ›„ ๊ธฐ์กด ์ถฉ๋Œ ๊ฒ€์‚ฌ ๋กœ์ง์ด ์ •์ƒ ๋™์ž‘ํ•˜๋Š”์ง€ ๊ฒ€์ฆ
    • ๊ฒ€์ฆ: '์ผ์ • ๊ฒน์นจ ๊ฒฝ๊ณ ' ๋ฉ”์‹œ์ง€์™€ ๊ตฌ์ฒด์ ์ธ ์ถฉ๋Œ ์ •๋ณด ํ‘œ์‹œ ํ™•์ธ
  2. ๋ฐ˜๋ณต์ผ์ •์˜ ํŠน์ • ๋‚ ์งœ๊ฐ€ ๊ธฐ์กด ์ผ์ •๊ณผ ์ถฉ๋Œํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ •์ƒ ์ƒ์„ฑ๋œ๋‹ค

    • ๋ชฉ์ : ์ถฉ๋Œํ•˜์ง€ ์•Š๋Š” ๋ฐ˜๋ณต์ผ์ •์ด ์ •์ƒ์ ์œผ๋กœ ์ƒ์„ฑ๋˜๋Š”์ง€ ๊ฒ€์ฆ
    • ๊ฒ€์ฆ: ์ถฉ๋Œ ๊ฒฝ๊ณ  ์—†์ด ์ •์ƒ ์ƒ์„ฑ ๋ฐ ์„ฑ๊ณต ๋ฉ”์‹œ์ง€ ํ™•์ธ

'ํšŒ๊ท€ํ…Œ์ŠคํŠธ: ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ

  1. ๋ฐ˜๋ณต์ผ์ •์ด ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์— ์ •์ƒ์ ์œผ๋กœ ํฌํ•จ๋œ๋‹ค

    • ๋ชฉ์ : ๋ฐ˜๋ณต์ผ์ •๊ณผ ๋‹จ์ผ์ผ์ •์ด ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์—์„œ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ๊ฒ€์ฆ
    • ๊ฒ€์ฆ: ๊ฒ€์ƒ‰ ์กฐ๊ฑด์— ๋งž๋Š” ๋ฐ˜๋ณต์ผ์ •๋“ค์ด ๋ชจ๋‘ ํ‘œ์‹œ๋˜๋Š”์ง€ ํ™•์ธ
  2. ๋ฐ˜๋ณต์ผ์ •์ด ์žˆ๋Š” ์ƒํƒœ์—์„œ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๊ฐ€ ์—†์œผ๋ฉด ์ ์ ˆํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•œ๋‹ค

    • ๋ชฉ์ : ๋ฐ˜๋ณต์ผ์ • ํ™˜๊ฒฝ์—์„œ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๊ฐ€ ์—†์„ ๋•Œ์˜ UI ๋™์ž‘ ๊ฒ€์ฆ
    • ๊ฒ€์ฆ: "๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค." ๋ฉ”์‹œ์ง€ ํ‘œ์‹œ ํ™•์ธ

'ํšŒ๊ท€ํ…Œ์ŠคํŠธ: ์•Œ๋ฆผ ๊ธฐ๋Šฅ

  1. ๋ฐ˜๋ณต์ผ์ •์— ๋Œ€ํ•œ ์•Œ๋ฆผ์ด ๊ฐ ์ผ์ •๋งˆ๋‹ค ์ •์ƒ ๋™์ž‘ํ•œ๋‹ค
    • ๋ชฉ์ : ๋ฐ˜๋ณต์ผ์ •์˜ ๊ฐ ์ธ์Šคํ„ด์Šค๋ณ„๋กœ ์•Œ๋ฆผ ๊ธฐ๋Šฅ์ด ์ •์ƒ ๋™์ž‘ํ•˜๋Š”์ง€ ๊ฒ€์ฆ
    • ๊ฒ€์ฆ: ๊ฐœ๋ณ„ ๋ฐ˜๋ณต์ผ์ •์— ๋Œ€ํ•œ ์ •ํ™•ํ•œ ์•Œ๋ฆผ ๋ฉ”์‹œ์ง€ ํ‘œ์‹œ ํ™•์ธ

๊ณผ์ œ ์…€ํ”„ํšŒ๊ณ 

๊ธฐ์ˆ ์  ์„ฑ์žฅ

๋ฉด์ ‘ ์ค€๋น„๋กœ ์ธํ•ด Full AI ๋ฐ”์ด๋ธŒ์ฝ”๋”ฉ์„ ์ง„ํ–‰ํ•ด๋ณธ ์ฃผ์ฐจ์˜€์Šต๋‹ˆ๋‹ค. TDD์˜ ๊ฐœ๋…์„ Claude Code์— ์ ์šฉํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ํ•˜๋‚˜์”ฉ ๊ฒ€์ˆ˜ํ•˜๋ฉด์„œ ์‹ค๋ฌด ๊ด€๋ฆฌ์ž์˜ ์ž…์žฅ์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฌด์—‡๋ณด๋‹ค ์ค‘์š”ํ•œ๊ฑด, ๋‚ด๊ฐ€ ์–ผ๋งˆ๋‚˜ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๊ณ  ์žˆ์œผ๋ฉฐ Claude Code๊ฐ€ ๋งŒ๋“ค์–ด์ค€ ์ฝ”๋“œ๋ฅผ ์–ผ๋งŒํผ ์ฆ๋น™ํ•˜๊ณ  ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š”์ง€๊ฐ€ ํ•ต์‹ฌ์ด์—ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด๋ฒˆ ๊ณผ์ œ๋ฅผ ํ†ตํ•ด TDD ๋ฐฉ๋ฒ•๋ก ์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ํฌ๊ฒŒ ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ RED ๋‹จ๊ณ„์—์„œ ๋‹จ์ˆœํ•œ import ์˜ค๋ฅ˜๊ฐ€ ์•„๋‹Œ ๋…ผ๋ฆฌ์ ์œผ๋กœ ์ž˜๋ชป๋œ ๊ตฌํ˜„์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํŒจ์‹œํ‚ค๋Š” ๊ฒƒ์˜ ์ค‘์š”์„ฑ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค. Claude Code์˜ thinking ๋ชจ๋“œ๋กœ RED/GREEN/๋ฆฌํŒฉํ† ๋ง ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ ์ง„ํ–‰๋˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ํ™•์ธํ•˜๊ณ  ์ ์šฉ์‹œํ‚ค๋ฉด์„œ TDD์˜ ๋ณธ์งˆ์ ์ธ ๋ชฉ์ ์„ ๋ช…ํ™•ํžˆ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋ณต์žกํ•œ ๋‚ ์งœ ๋กœ์ง ๊ตฌํ˜„์—์„œ ๋งŽ์€ ๋„์ „์„ ๊ฒฝํ—˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ์œค๋…„์˜ 2์›” 29์ผ ์ฒ˜๋ฆฌ๋‚˜ 31์ผ ๋งค์›” ๋ฐ˜๋ณต ์‹œ ํ•ด๋‹น ์ผ์ด ์—†๋Š” ๋‹ฌ์„ ๊ฑด๋„ˆ๋›ฐ๋Š” ๋กœ์ง ๋“ฑ์€ ์˜ˆ์ƒ๋ณด๋‹ค ๋ณต์žกํ–ˆ์ง€๋งŒ, ์ž‘์€ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„์–ด ์ฐจ๊ทผ์ฐจ๊ทผ ํ•ด๊ฒฐํ•ด ๋‚˜๊ฐ€๋Š” ๊ณผ์ •์ด ๋งค์šฐ ์˜๋ฏธ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ฝ”๋“œ ํ’ˆ์งˆ

๊ฐ€์žฅ ๋งŒ์กฑ์Šค๋Ÿฌ์› ๋˜ ๊ตฌํ˜„์€ isValidRecurrenceDate() ํ•จ์ˆ˜๋ฅผ ํ†ตํ•œ ๋‚ ์งœ ์œ ํšจ์„ฑ ๊ฒ€์ฆ ๋กœ์ง์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋ณต์žกํ•œ ๋‚ ์งœ ๊ณ„์‚ฐ์„ ์•ˆ์ „ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ , ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์Šคํƒ€์ผ๋กœ ์ž‘์„ฑํ•œ isNotTargetEvent ํ—ฌํผ ํ•จ์ˆ˜๋„ ๊ฐ€๋…์„ฑ๊ณผ ์žฌ์‚ฌ์šฉ์„ฑ ์ธก๋ฉด์—์„œ ์ข‹์€ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋งŒ ์•„์‰ฌ์šด ๋ถ€๋ถ„์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ณต ์ข…๋ฃŒ์ผ ์„ค์ •์—์„œ ์บ˜๋ฆฐ๋” ์•„์ด์ฝ˜ ํด๋ฆญ ๋ฐฉ์‹์„ ์™„์ „ํžˆ ๊ตฌํ˜„ํ•˜์ง€ ๋ชปํ–ˆ๊ณ , medium.integration.spec.tsx์— ๋ฐ˜๋ณต ์œ ํ˜• ์„ ํƒ ํ™•์ธ ํ…Œ์ŠคํŠธ๋„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ํ˜„์žฌ๋Š” unit ํ…Œ์ŠคํŠธ ์ค‘์‹ฌ์œผ๋กœ๋งŒ ๊ตฌํ˜„ํ–ˆ๋Š”๋ฐ, E2E ํ…Œ์ŠคํŠธ์˜ ํ•„์š”์„ฑ์— ๋Œ€ํ•ด์„œ๋„ ๋” ๊ณ ๋ฏผํ•ด๋ด์•ผ ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

AI์™€ ํ•จ๊ป˜ ์ฝ”๋”ฉํ•˜๋ฉด์„œ ๊ฐ€์žฅ ๊ณ ๋ฏผํ–ˆ๋˜ ๋ถ€๋ถ„์€ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ƒ์„ฑ์˜ ์ ‘๊ทผ ๋ฐฉ์‹์ด์—ˆ์Šต๋‹ˆ๋‹ค. "๋ชจ๋“  ์š”๊ตฌ์‚ฌํ•ญ์„ ํ•œ ๋ฒˆ์— ๊ตฌํ˜„ ํ›„ ํ…Œ์ŠคํŠธ๋กœ ๊ฒ€์ฆ"๋ณด๋‹ค๋Š” "๋‹จ๊ณ„๋ณ„ ์š”๊ตฌ์‚ฌํ•ญ ๊ตฌํ˜„ ํ›„ ๋‹จ๊ณ„๋ณ„๋กœ ํ…Œ์ŠคํŠธ๋กœ ๊ฒ€์ฆ" ๋ฐฉ์‹์„ ์„ ํƒํ–ˆ๋Š”๋ฐ, ์ด ๊ฒฐ์ •์ด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ ๊ณผ์ •์„ ๋”์šฑ ์•ˆ์ •์ ์œผ๋กœ ๋งŒ๋“ค์–ด ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ๋งค ๋‹จ๊ณ„๋งˆ๋‹ค pnpm test๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๊ธฐ์กด ๊ธฐ๋Šฅ์— ์‚ฌ์ด๋“œ์ดํŽ™ํŠธ๊ฐ€ ์—†๋Š”์ง€ ํ™•์ธํ•˜๊ณ , AI์˜ ์ฝ”๋“œ๋ฅผ ์ ˆ๋Œ€ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š”(?) ์Šต๊ด€๋„ ์ •์ฐฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํ•™์Šต ํšจ๊ณผ ๋ถ„์„

๊ฐ€์žฅ ํฐ ๋ฐฐ์›€์€ TDD์˜ RED-GREEN-REFACTOR ์‚ฌ์ดํด์—์„œ ๊ฐ ๋‹จ๊ณ„์˜ ๋ช…ํ™•ํ•œ ๋ชฉ์ ์„ ์ดํ•ดํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ํ†ต๊ณผ์‹œํ‚ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๊ฐ ๋‹จ๊ณ„๊ฐ€ ์™œ ํ•„์š”ํ•œ์ง€, ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ๊ณ ๋ฏผํ•˜๋ฉฐ ์ง„ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ํŒ€์›๋“ค๊ณผ ํšŒ๊ท€ ํ…Œ์ŠคํŠธ์˜ ๊ฐœ๋…๊ณผ ์‹ค๋ฌด ํ™œ์šฉ ๋ฐฉ์•ˆ์— ๋Œ€ํ•ด ํ† ๋ก ํ•˜๋ฉด์„œ, ํ…Œ์ŠคํŠธ๊ฐ€ ๋‹จ์ˆœํ•œ ๊ฒ€์ฆ ๋„๊ตฌ๊ฐ€ ์•„๋‹Œ ๊ฐœ๋ฐœ ์ „๋žต์˜ ํ•ต์‹ฌ์ž„์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค.

์•ž์œผ๋กœ ๋” ํ•™์Šต์ด ํ•„์š”ํ•œ ์˜์—ญ๋“ค๋„ ๋ช…ํ™•ํ•ด์กŒ์Šต๋‹ˆ๋‹ค. React Testing Library๋ฅผ ํ™œ์šฉํ•œ ๋” ์ •๊ตํ•œ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ ๋ฐฉ๋ฒ•์„ ์ตํžˆ๊ณ  ์‹ถ๊ณ , ์บ˜๋ฆฐ๋” ์ปดํฌ๋„ŒํŠธ ๊ฐ™์€ ๋ณต์žกํ•œ UI ์š”์†Œ๋ฅผ ์–ด๋–ป๊ฒŒ ํšจ๊ณผ์ ์œผ๋กœ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์„์ง€๋„ ๊ณ ๋ฏผํ•ด๋ด์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค. E2E ํ…Œ์ŠคํŠธ์™€ unit ํ…Œ์ŠคํŠธ ์‚ฌ์ด์˜ ๊ท ํ˜•์žกํžŒ ์ „๋žต์„ ์ˆ˜๋ฆฝํ•˜๋Š” ๊ฒƒ๋„ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, E2E/unit ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•œ ์ดํ•ด๋Š” ๋ช…ํ™•ํ•˜๋‚˜ ํ†ตํ•ฉํ…Œ์ŠคํŠธ์— ๋Œ€ํ•œ ์ดํ•ด๋„๊ฐ€ ๋‚ฎ์€ ๊ฒƒ ๊ฐ™์•„ ์ด ๋ถ€๋ถ„๋„ ์ถ”๊ฐ€ ๊ณต๋ถ€๊ฐ€ ํ•„์š”ํ•ด๋ณด์ž…๋‹ˆ๋‹ค.

์‹ค๋ฌด ์ ์šฉ ๊ฐ€๋Šฅ์„ฑ์€ ๋งค์šฐ ๋†’๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. TDD๋ฅผ ํ†ตํ•œ ์•ˆ์ •์ ์ธ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋Š” ์–ด๋–ค ํ”„๋กœ์ ํŠธ์—์„œ๋“  ๋„์›€์ด ๋  ๊ฒƒ์ด๊ณ , AI ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•œ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๋ฐ ํ’ˆ์งˆ ๊ด€๋ฆฌ ๋ฐฉ์‹๋„ ์‹ค์ œ ํŒ€ ๊ฐœ๋ฐœ์—์„œ ์ถฉ๋ถ„ํžˆ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์˜คํ”„ ์ฝ”์น˜๋‹˜์ด QnA์‹œ๊ฐ„์— ๊ณต์œ ํ•ด์ฃผ์‹  BMAD๋ฅผ ํ†ตํ•œ agent ๋ฐฉ์‹๋„ ์ ์šฉํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ํšŒ๊ท€ ํ…Œ์ŠคํŠธ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ ๋ฌธํ™”๋Š” ๊ธฐ์กด ๊ธฐ๋Šฅ์„ ๋ณดํ˜ธํ•˜๋ฉด์„œ๋„ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์•ˆ์ „ํ•˜๊ฒŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•๋ก ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค.

๊ณผ์ œ ํ”ผ๋“œ๋ฐฑ

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

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

๋ฆฌ๋ทฐ ๋ฐ›๊ณ  ์‹ถ์€ ๋‚ด์šฉ

  • RED ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ดํ•ด๋„ ์ด๋ฒˆ ๊ณผ์ œ์—์„œ TDD ๋ฐฉ์‹์„ ์ ์šฉํ•˜๋ฉด์„œ RED-GREEN-REFACTOR ์‚ฌ์ดํด์„ ๊ฑฐ์ณ ๊ฐœ๋ฐœํ–ˆ๋Š”๋ฐ, ํŠนํžˆ RED ๋‹จ๊ณ„์—์„œ "๋…ผ๋ฆฌ์ ์œผ๋กœ ์ž˜๋ชป๋œ ๊ตฌํ˜„"์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํŒจ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์ด ์˜ฌ๋ฐ”๋ฅธ TDD ์ ‘๊ทผ์ธ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด unitํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ์‹œ ์‹ค์ œ ๊ตฌํ˜„ํ•˜์—ฌ ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•˜๋„๋ก ํ•œ ๊ฒƒ์ด ์ ์ ˆํ•œ RED ๋‹จ๊ณ„ ๊ตฌํ˜„์ด์—ˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

  • ์š”์ฒญ์‚ฌํ•ญ์˜ ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์—… ๋ฐฉ์‹์— ๋Œ€ํ•ด ํŒ€์›๊ณผ ๊ฐœ๋ฐœ ๋ฐฉ์‹์„ ๋…ผ์˜ํ•  ๋•Œ ๊ธฐ๋ณธ ๊ณผ์ œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ์‹œ "๋ชจ๋“  ์š”๊ตฌ์‚ฌํ•ญ์„ ํ•œ ๋ฒˆ์— ๊ตฌํ˜„ ํ›„ ๊ฒ€์ฆ" vs "๋‹จ๊ณ„๋ณ„ ์š”๊ตฌ์‚ฌํ•ญ ๊ตฌํ˜„" ์ค‘์—์„œ ํ›„์ž๋ฅผ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” AI์—๊ฒŒ ๋งก๊ธฐ๋‹ค๋ณด๋‹ˆ ๋‹จ๊ณ„์ ์œผ๋กœ ์ปจํ…์ŠคํŠธ๋ฅผ ๋‚˜๋ˆ ์„œ ์ž‘์—…ํ•˜๋ ค๊ณ  ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‹ค๋ฌด์—์„œ๋Š” ํŒ€์›๋“ค๊ณผ ์ž‘์—…ํ•  ๋•Œ ์–ด๋–ค ์ ‘๊ทผ ๋ฐฉ์‹์ด ๋” ํšจ๊ณผ์ ์ธ์ง€, ๊ทธ๋ฆฌ๊ณ  ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ๋‚˜ ํŒ€ ๊ตฌ์„ฑ์— ๋”ฐ๋ผ ์–ด๋–ค ๊ธฐ์ค€์œผ๋กœ ์ง„ํ–‰ํ•ด์•ผํ• ์ง€๋Š” ๊ณ ๋ฏผ์ด ๋ฉ๋‹ˆ๋‹ค.

  • ํ•จ์ˆ˜ ๋ถ„๋ฆฌ ๊ธฐ์ค€๊ณผ ์ด๋ฆ„ ๋ณต์žกํ•œ ๋‚ ์งœ ๋กœ์ง(์œค๋…„ ์ฒ˜๋ฆฌ, 31์ผ ๋งค์›” ๋ฐ˜๋ณต ๋“ฑ)์„ ๊ตฌํ˜„ํ•˜๋ฉด์„œ isValidRecurrenceDate()์™€ getNextRecurrenceDate() ํ•จ์ˆ˜๋กœ ๋‚˜๋ˆ„์–ด ์ž‘์—…ํ–ˆ๋Š”๋ฐ, ํ˜„์žฌ์˜ ํ•จ์ˆ˜ ๋ถ„๋ฆฌ ๊ธฐ์ค€๊ณผ ๋ช…๋ช…์ด ์ ์ ˆํ• ๊นŒ์š”? ์ดˆ๊ธฐ์—๋Š” repeat์œผ๋กœ ์ž‘์—…ํ•˜์˜€์œผ๋‚˜ AI์ถ”์ฒœํ•ด์ค€ ๋ช…๋ช…์œผ๋กœ ๋ณ€๊ฒฝํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ „ ์ฑ•ํ„ฐ์˜ ํด๋ฆฐ์ฝ”๋“œ ๊ธฐ์ค€์„ ์ ์šฉํ•ด์„œ ์ข€ ๋” ๋ช…ํ™•ํ•œ ํ•จ์ˆ˜๋ช…์œผ๋กœ ๋ฐ”๊พธ์—ˆ์–ด์•ผํ–ˆ์„๊นŒ์š”? ๋˜ํ•œ ๋‚ ์งœ ์ฒ˜๋ฆฌ ๋กœ์ง์—์„œ ๋” ์•ˆ์ „ํ•˜๊ณ  ๊ฐ€๋…์„ฑ ์ข‹์€ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”์ง€๋„ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

// ๋ฐฐ์—ด ํ˜•์‹์œผ๋กœ ๋ฝ‘์•„์„œ ์‚ฌ์šฉํ•˜๋‹ค๋ณด๋‹ˆ ๊ฐ€๋…์„ฑ ์ €ํ•˜
expect(recurringEvents[0].date).toBe('2024-01-31');
expect(recurringEvents[1].date).toBe('2024-03-31');
expect(recurringEvents[2].date).toBe('2024-05-31');
  • ํ…Œ์ŠคํŠธ์˜ ๊ฒฝ๊ณ„ ํ˜„์žฌ unit ํ…Œ์ŠคํŠธ ์œ„์ฃผ๋กœ ๊ตฌํ˜„ํ–ˆ๋Š”๋ฐ, ์บ˜๋ฆฐ๋” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํŠน์„ฑ์ƒ UI ์ธํ„ฐ๋ž™์…˜์ด ์ค‘์š”ํ•œ ๋ถ€๋ถ„๋“ค(๋ฐ˜๋ณต ์œ ํ˜• ์„ ํƒ, ์บ˜๋ฆฐ๋” ์•„์ด์ฝ˜ ํด๋ฆญ ๋“ฑ)์— ๋Œ€ํ•ด์„œ๋Š” ์–ด๋А ์ •๋„๊นŒ์ง€ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋‚˜ E2E ํ…Œ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ ์ ˆํ• ๊นŒ์š”? ์ž‘์€ ๊ธฐ๋Šฅ์— ์ง€๊ธˆ๋„ ์ถฉ๋ถ„ํžˆ ํ…Œ์ŠคํŠธ๊ฐ€ ๋งŽ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š”๋ฐ unit, ํ†ตํ•ฉํ…Œ์ŠคํŠธ, E2E๊นŒ์ง€ ์ถ”๊ฐ€ํ•˜์—ฌ ๋น„๋Œ€ํ•ด์ง€๋Š” ๊ฒƒ์ด ๋‹น์—ฐํ•œ ๊ฒƒ์ธ์ง€, ๊ทธ๋งŒํผ ์‹œ๊ฐ„์„ ๋“ค์—ฌ์„œ ์ž‘์„ฑํ•ด์•ผ ํ…Œ์ŠคํŠธ๋กœ ์ถฉ๋ถ„ํ•œ ๊ฒ€์ฆ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ธ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

๊ณผ์ œ ํ”ผ๋“œ๋ฐฑ

undefined