ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉํ•œ ๊ฐ„๋‹จํ•œ ์ด๋ฏธ์ง€ ์บ์‹œ๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • ๊ธฐ๋ณธ์— ์ž„์‹œ๋กœ ์ž‘์—…ํ•œ ์ด๋ฏธ์ง€ ์บ์‹œ์˜ ๊ฒฝ์šฐ, ๋„คํŠธ์›Œํฌ ์š”์ฒญํ›„ ๋””์Šคํฌ์— ์ €์žฅ์ด ๋˜๋Š” ๊ตฌ์กฐ๋กœ ์ œ์ž‘ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • ์ด๋ฏธ์ง€์˜ ๊ฒฝ์šฐ ์ƒ๋Œ€์ ์œผ๋กœ ์šฉ๋Ÿ‰์ด ํฌ๊ธฐ ๋•Œ๋ฌธ์—, ์ด ์ด๋ฏธ์ง€ ์ž์ฒด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ ค์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ์ž์ฒด๊ฐ€ ๋‚ญ๋น„๋ผ ์ƒ๊ฐํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • ํ•˜์ง€๋งŒ ์ง„์ •ํ•œ ์˜๋ฏธ์˜ ์บ์‹œ๋ฅผ ์กฐ๊ธˆ์ด๋ผ๋„ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ ๊ธฐ๋Šฅ ์ž์ฒด๋„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ƒ๊ฐ์— ์ด๋ฏธ์ง€ ์บ์‹œ๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ๋กœ ๋งˆ์Œ ๋จน์—ˆ์Šต๋‹ˆ๋‹ค.

  • ์ด๋ฏธ์ง€ ์บ์‹œ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์‚ฌ์‹ค ๋งŽ์€ ๋ถ€๋ถ„์„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์บ์‹œ์˜ ์‹ ์„ ๋„ ํŒ๋‹จ ๋ฐฉ๋ฒ•์— ๋”ฐ๋ฅธ ์ •์ฑ…๋“ค์ด ๊ทธ ์˜ˆ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ•˜์ง€๋งŒ ์ €ํฌ๋Š” ๋‹น์žฅ ์ €ํฌ์˜ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•  ๋กœ์ง์ด ๋ฌด์—‡์ธ๊ฐ€์— ๋ณด๋‹ค ์ง‘์ค‘ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž๊ฐ€ ์—…๋กœ๋“œํ•œ ์ด๋ฏธ์ง€๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š” ๊ธฐํš ํŠน์„ฑ์ƒ, ์บ์‹œ์˜ ์‹ ์„ ๋„๋ฅผ ์œ„ํ•œ ๋กœ์ง ์ž์ฒด๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ์˜ค๋ฒ„์—”์ง€๋‹ˆ์–ด๋ง์ด๋ผ ํŒ๋‹จํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ถ”ํ›„ ํ™•์žฅํ•˜๋”๋ผ๋„ ์‰ฝ๊ฒŒ ๊ฐ€๋Šฅํ•˜๋ฉด์„œ ํ˜„์žฌ์˜ ๋ชฉ์ ์„ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” apple ํ”„๋ ˆ์ž„ ์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • ์ด ๋•Œ, ์• ํ”Œ์—์„œ ์ œ๊ณตํ•˜๋Š” URLCache๋ฅผ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ๋ฌธ์„œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์˜์‚ฌ ๊ฒฐ์ • ํŠธ๋ฆฌ์— ๋Œ€ํ•ด ์ดํ•ดํ›„ ์ ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • ์บ์‹œ ์ •์ฑ…์˜ ๊ฒฝ์šฐ returnCacheDataElseLoad, ์ฆ‰ ์บ์‹œ๊ฐ€ ์žˆ์œผ๋ฉด ๋ฐ˜ํ™˜ํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์„ ๊ฒฝ์šฐ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ์‹์„ ์ฑ„ํƒํ•˜์˜€์Šต๋‹ˆ๋‹ค.

Apple Developer Documentation

  • URLCache๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์š”์ฒญ์— ๋Œ€ํ•œ ์ •์˜, ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์‘๋‹ต์— ๋Œ€ํ•ด ์บ์‹œ์— ์ €์žฅํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • data Task์˜ ๊ฒฝ์šฐ, ์‘๋‹ต์— ๋Œ€ํ•ด ์ž๋™์œผ๋กœ ์ €์žฅํ•ด์ฃผ์ง€๋งŒ, download task์˜ ๊ฒฝ์šฐ ๋ณดํ†ต ํฐ ์šฉ๋Ÿ‰์˜ ๋ฆฌ์†Œ์Šค๋“ค์„ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์—, ์บ์‹œ์— ๋“ฑ๋กํ•˜๋Š” ๋ถ€๋ถ„์„ ์ˆ˜๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•ด ์ฃผ์–ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ ์ด๋ฏธ์ง€ ์‘๋‹ต์— ๋Œ€ํ•ด ์š”์ฒญ์„ ํ‚ค๋กœ, ์‘๋‹ต์„ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ์บ์‹œ์— ์ €์žฅํ•˜์˜€์Šต๋‹ˆ๋‹ค.

Race Condition ๋ฌธ์ œ

  • ๋ฆฌ๋”๋ณด๋“œ ํ™”๋ฉด์—์„œ๋Š” 1, 2, 3์œ„๋ฅผ ๊ฐ€์žฅ ์œ„์—, ๊ทธ๋ฆฌ๊ณ  ํ•˜์œ„์—๋Š” 1์œ„๋ถ€ํ„ฐ 10์œ„๊นŒ์ง€ ํ‘œํ˜„์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • ๋งŒ์•ฝ ์ดˆ๊ธฐ์— ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ์— ์ด๋ฏธ์ง€ ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, ์ค‘๋ณตํ•ด์„œ 1, 2, 3๋“ฑ์˜ ์‚ฌ์ง„์„ ์š”์ฒญํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ํ•˜์ง€๋งŒ ์ด ๊ฒฝ์šฐ, race Condition ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๊ณ , ํ•ด๋‹น ์š”์ฒญ์„ ๊ฐ€์ ธ์˜ค๋ ค๋Š” ๋‘๊ฐœ์˜ ์ž‘์—… ๋‹จ์œ„์—์„œ ํ•œ์ชฝ์€ ๋ฐ์ดํ„ฐ๋ฅผ write ํ•˜๊ณ  ์žˆ๊ณ , ํ•œ์ชฝ์€ ๋ฐ์ดํ„ฐ๋ฅผ read ํ•˜๋ ค๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ์ œ๋Œ€๋กœ๋œ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฒฐ๊ตญ ํ•ด๋‹น ๋ฌธ์ œ๋Š” ์„œ๋กœ๋‹ค๋ฅธ ๋‘๊ฐœ์˜ ์ž‘์—… ๋‹จ์œ„๊ฐ€ ์š”์ฒญํ•˜๋Š” ์‹œ์ ์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ, ์—†๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
  • ์ด๋Ÿฐ ๋ถ€๋ถ„์— ๋Œ€ํ•ด ๋‘๊ฐ€์ง€ ์ƒ๊ฐ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
    • ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์š”์ฒญํ•˜๊ณ , ํ•ด๋‹น ๋ฐ์ดํ„ฐ๊ฐ€ ๋„์ฐฉํ•œ ์‹œ์ ์— ๋‹ค์Œ ์ž‘์—…์ด ๋„คํŠธ์›Œํฌ ์š”์ฒญ์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์ž.
      • ํ•˜์ง€๋งŒ ์ด ๋ฐฉ๋ฒ•์˜ ๊ฒฝ์šฐ, ์ด๋ฏธ์ง€ ํ†ต์‹  ์ž์ฒด๋ฅผ ๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์ž๋Š” ์˜๊ฒฌ๊ณผ ๊ฐ™์•˜๊ณ , ์ด๋Ÿด ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์— ๋ณด๋‹ค ์น˜๋ช…์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ์บ์‹œ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์‹œ์ ์—, ์—†์„ ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ ์š”์ฒญ์„ ํ•œ๋ฒˆ ๋”ํ•˜๊ณ , ์‘๋‹ต์ด ์˜จ ๊ฒฝ์šฐ์— ์บ์‹œ์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋„์ฐฉํ•ด์žˆ๋Š”์ง€ ๋‹ค์‹œํ•œ๋ฒˆ ํ™•์ธํ•˜๋Š” ๋กœ์ง์„ ๋„ฃ์–ด์„œ ํ•ด๊ฒฐํ•˜์ž.
      • ์ค‘๋ณต๋˜๋Š” ๋ฐ์ดํ„ฐ ์š”์ฒญ์ž์ฒด๋ฅผ ๋‘๋ฒˆํ•œ๋‹ค๋Š” ์ ์ด ๋งˆ์Œ์— ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค.
  • ์ด๋Ÿฐ ๋ถ€๋ถ„์— ๋Œ€ํ•ด ๋” ๋‚˜์€ ์ƒ๊ฐ์ด ๋‚˜์ง€์•Š์•„ ๋‘๋ฒˆ์งธ ๋ฐฉ๋ฒ•์„ ๋„์ž…ํ•˜์—ฌ, ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํ•˜์ง€๋งŒ, ์ค‘๋ณต๋˜๋Š” ์š”์ฒญ์ด ๋งŽ์„ ๊ฒฝ์šฐ, ์‹œ์ ์˜ ๋ฌธ์ œ๋กœ ํ•„์š”ํ•˜์ง€ ์•Š์€ ์š”์ฒญ์„ ๊ณ„์†ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ๋งˆ์Œ์— ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.