Skip to content

๐Ÿ’™ [25๋…„ 3์›”]

mint3382 edited this page Apr 1, 2025 · 3 revisions

โญ๏ธ Meet Swift Testingโ€ 20250324

Test Attribute

  • Test Attribute๊ฐ€ ๋ถ™์€ ๊ฑธ ํƒ€์ž…์œผ๋กœ ๋ฌถ์œผ๋ฉด suite๊ฐ€ ๋จ
  • Test Attribute๋ฅผ ์“ฐ๋ฉด ์˜†์— ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ํ‘œ์‹œ๊ฐ€ ์ƒ๊น€
  • ๊ตฌ์กฐ์ฒด๋กœ ๊ฐ์‹ธ ์คฌ์„ ๋•Œ ํ‘œ์‹œ๊ฐ€ ์ƒ๊ธฐ๋Š”๋ฐ ํŽธ์˜์ƒ suite๋กœ ์ทจ๊ธ‰์„ ํ•ด์„œ ํ…Œ์ŠคํŠธ๋ฅผ ๊ฐ์‹ธ๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์ƒ์„ฑ์„ ํ•ด ์คŒ

Parameter Raised ํ…Œ์ŠคํŠธ

  • ํ…Œ์ŠคํŠธ๋‚˜ suite์— ์žˆ๋Š” serialize๋‚˜ ์†์„ฑ์„ ์ค„ ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์„ trait๋ผ๊ณ  ํ•จ
  • ํ…Œ์ŠคํŠธ ๊ธฐ๋Šฅ ์ค‘์— Parameter Raised ํ…Œ์ŠคํŠธ๊ฐ€ ์ข‹์•„ ๋ณด์ž„
  • Parameter Raised ๋ฉ”์„œ๋“œ๋ฅผ ์“ฐ๋‹ˆ๊นŒ ํ•˜๋‚˜๋กœ ํ†ต์ผํ•ด์„œ ๋‘ ๊ฐ€์ง€ ์ƒํ™ฉ์— ๋Œ€ํ•ด์„œ ๋Œ€์‘์„ ํ•  ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ ์ƒ๊ฐํ•จ

ํŒจ์Šค์›Œ๋“œ ๊ฒ€์ฆ ๊ฒฐ๊ณผ

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

โญ๏ธ Explore structured concurrency in Swiftโ€ 20250331

์ฃผ์š” ์ฃผ์ œ

  • ๊ตฌ์กฐ์  ๋™์‹œ์„ฑ์˜ ์‹คํ–‰ ํ๋ฆ„๊ณผ Unstructured task์˜ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•
  • Detached tasks์™€ Unstructured task์˜ ์ฐจ์ด์™€ ๊ทธ ๋ชฉ์ 
  • ๋ณ‘๋ ฌ์  ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ์–ด์‹ฑํฌ๋ ›์˜ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•๊ณผ ์„ฑ๋Šฅ์ƒ์˜ ์ด์ 

๊ตฌ์กฐ์  ์—๋Ÿฌ ์ฒ˜๋ฆฌ ํ๋ฆ„์˜ ์˜๋ฏธ

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

๋น„๋™๊ธฐ์  ์ž‘์—…์˜ ๋™๊ธฐ์  ์ปจํ…์ŠคํŠธ ํ˜ธ์ถœ

  • ๋น„๋™๊ธฐ์ ์ธ ์ž‘์—…์„ ๋™๊ธฐ์ ์ธ context์—์„œ ํ˜ธ์ถœํ•˜๋ ค๊ณ  ํ•  ๋•Œ๋Š” Unstructured task๋ฅผ ์จ์„œ ํ…Œ์Šคํฌ๋กœ ๊ฐ์‹ธ์ค˜์•ผ ํ•จ
  • Detached task๋Š” ๋ถ€๋ชจ context ์ž์ฒด๊ฐ€ ์—†์œผ๋‹ˆ๊นŒ ๋ฐ”๋กœ ์ธ์ ‘ํ•ด ์žˆ๋Š” ๋’ค์— ์‹คํ–‰ ํ๋ฆ„์—๋‹ค๊ฐ€ ํ…Œ์Šคํฌ ๋‚ด์šฉ์ด ์˜ฎ๊ฒจ์ง€๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ณ  ๋‹ค๋ฅธ ๋ฌด์ž‘์œ„ ์ˆœ์„œ๋ผ๊ณ  ํ•ด์•ผ ๋จ
  • ์ทจ์†Œ ๊ด€๋ จ๋œ ์ด์•ผ๊ธฐ๋Š” ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ธฐ๋ฉด ํ•ด๋‹น ์ž‘์—…๋“ค์ด ๊ทธ๋ƒฅ ๋‹ค ๊บผ์ง€๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ์˜ค๋ฅ˜ ์ƒ๊ฒผ์œผ๋‹ˆ ๋ฉˆ์ถค ์ƒํƒœ๋กœ๋งŒ ๋ณ€ํ•˜๋Š” ๊ฒƒ์ž„

Detached์˜ ๊ฐœ๋…

  • ํ…Œ์Šคํฌ ํด๋กœ์ €์—๋‹ค๊ฐ€ ๋ฉ”์ธ ์•กํ„ฐ๋ผ๊ณ  ์–ด๋…ธํ…Œ์ด์…˜ ๋ถ™์ด๊ณ  ํ•ด๋„ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋กœ ํด๋กœ์ฆˆ ๋‚ด๋ถ€์— ์žˆ๋Š” ๋กœ์ง๋“ค์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ๋” ์Šค๋ ˆ๋“œ ๋ถ„๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Œ
  • Detached์˜ ๊ฐœ๋… ์ž์ฒด๊ฐ€ ๊ธฐ์กด์— ์ƒ์„ฑ๋˜๊ณ  ์žˆ๋Š” ๋ถ€๋ชจ ์Šค๋ ˆ๋“œ๊ฐ€ ์žˆ์—ˆ์„ ๋•Œ ๋‚ด๋ถ€์—์„œ ์ƒˆ๋กญ๊ฒŒ ํ…Œ์Šคํฌ๋ฅผ ์—ด์–ด์„œ ๋‹ค๋ฅธ ๋ณ„๋„์˜ ์Šค๋ ˆ๋“œ๋กœ ๋ณด๋‚ด๋Š” ๊ฒฝ์šฐ๋ผ๊ณ  ์ดํ•ด๋ฅผ ํ–ˆ์Œ -> ๋น„๋™๊ธฐ ์ž‘์—… ์•ˆ์— ํ…Œ์Šคํฌ๋ฅผ ๋งŒ๋“ค์—ˆ์„ ๋•Œ ํ…Œ์Šคํฌ๋Š” ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์—์„œ ์‹คํ–‰์ด ๋  ๊ฑฐ๋ผ๋Š” ๊ฒŒ ๊ฐ€์ •์ธ ๊ฒƒ ๊ฐ™์Œ (โ˜‘๏ธ์ถ”ํ›„ ์•กํ„ฐ๋ฅผ ๋ณด๋ฉด์„œ ๋” ๋…ผ์˜ ํ•„์š”)

Detached์˜ ๋ชฉ์ 

  • ํ…Œ์Šคํฌ๊ฐ€ ์‹คํ˜„๋˜๋Š” ํƒ€์ด๋ฐ์ด ์–ด๋–ค ํŠน์ • ํŒจํ„ด์ด๋‚˜ ํ™•์‹คํ•œ ๊ฒŒ ์—†์Œ
  • ํ…Œ์Šคํฌ ์ž์ฒด๊ฐ€ ๋ฉ”์ธ์œผ๋กœ ์–ด์จŒ๋“  ์˜ฎ๊ฒจ์ง€๋Š” ์—ญํ• ์„ ํ•˜๊ฒŒ ๋œ ๊ฒƒ ๊ฐ™์Œ
  • Detached์˜ ๋ชฉ์  ์ž์ฒด๊ฐ€ ์—๋Ÿฌ๊ฐ€ ๋‚˜๊ฑฐ๋‚˜ ํ–ˆ์„ ๋•Œ ํ•˜์œ„ ํ…Œ์Šคํฌ๋“ค์„ ์ „๋ถ€ ์ทจ์†Œ ์ƒํƒœ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ Detached๋งŒ ์œ ์ผํ•˜๊ฒŒ ๊ทธ๋Ÿฌ์ง€ ๋ชปํ•˜๊ฒŒ ํ•œ๋‹ค๋Š” ๊ฒƒ ๊ฐ™์Œ
  • ์ž์ฒด ์ทจ์†Œ ๋กœ์ง์ด๋‚˜ ์Šค๋ ˆ๋“œ์˜ ์ ์œ ๋ฅผ ํ•˜๋ฉด์„œ ๋™์ž‘ํ•ด์•ผ ๋˜๋Š” ๊ณผ์ •์ด๋ฉด Detached๋ฅผ ์“ฐ๋Š” ๊ฒƒ์ž„

async let์˜ ์žฅ์ 

  • ๋ณ‘๋ ฌ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๊ณ ์ž ํ•  ๋•Œ ์ผ์Œ
  • ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ค„์–ด ์„ฑ๋Šฅ์ƒ ์ด๋“์„ ๋ณผ ์ˆ˜ ์žˆ์Œ
  • async let์„ ์“ฐ์ง€ ์•Š๊ณ  await๋กœ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋˜๋ฉด ๊ฐ€์žฅ ํฐ ์ด๋ฏธ์ง€๋ฅผ ๋กœ๋“œํ•  ์‹œ์ ๋ถ€ํ„ฐ๋Š” ๊ทธ ๋’ค์— ์žˆ๋Š” ์ด๋ฏธ์ง€๋„ ๋ชจ๋‘ ๋กœ๋“œ๋˜์ง€ ์•Š์Œ