๐ŸŽ ์•„์ด-์˜ค-์—์Šค/๐Ÿ“ฑ iOS ๊ฐœ๋ฐœ

[iOS] ๋ฉ”์ดํŠธ๋Ÿฌ๋„ˆ: ์ด๋ฏธ์ง€ ์บ์‹ฑ ์ ์šฉ๊ธฐ(๋ฉ”๋ชจ๋ฆฌ ์บ์‹ฑ, ๋””์Šคํฌ ์บ์‹ฑ ๊ทธ๋ฆฌ๊ณ  ETag)

๊ฐœ๋ฐœํ•˜๋Š” ํ›ˆ์ด 2021. 12. 5. 01:04

๋ฉ”์ดํŠธ ๋Ÿฌ๋„ˆ ์•ฑ ๊ฐœ๋ฐœ ๊ณผ์ •์„ ๊ณต์œ ํ•˜๋Š” ํฌ์ŠคํŠธ์ž…๋‹ˆ๋‹ค!

 

GitHub - boostcampwm-2021/iOS06-MateRunner: ํ•จ๊ป˜ ๋‹ฌ๋ฆฌ๋Š” ์ฆ๊ฑฐ์›€, Mate Runner ๐Ÿƒ๐Ÿป‍โ™‚๏ธ๐Ÿƒ๐Ÿป‍โ™€๏ธ

ํ•จ๊ป˜ ๋‹ฌ๋ฆฌ๋Š” ์ฆ๊ฑฐ์›€, Mate Runner ๐Ÿƒ๐Ÿป‍โ™‚๏ธ๐Ÿƒ๐Ÿป‍โ™€๏ธ. Contribute to boostcampwm-2021/iOS06-MateRunner development by creating an account on GitHub.

github.com

์—ฌ๊ธฐ์„œ ์ €ํฌ ํ”„๋กœ์ ํŠธ๋ฅผ ๋” ์ž์„ธํžˆ ๋ณผ ์ˆ˜ ์žˆ์–ด์š”!

 

๊ทธ๋Ÿผ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!

 

๋‹ฌ๋ฆฌ๊ธฐ ์•ฑ์ธ๋ฐ ์บ์‹ฑ์ด ์™œ ํ•„์š”ํ•ด..?

๋„ค ์ €ํฌ๋„ ๊ทธ๋Ÿด ์ค„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค.. 

Firebase Firestore์—์„œ ํ”„๋ฆฌํ‹ฐ์–ด๋กœ ์ œ๊ณตํ•˜๋Š” ์šฉ๋Ÿ‰์€ ํ•˜๋ฃจ ๋‹ค์šด๋กœ๋“œ ์ตœ๋Œ€ 1๊ธฐ๊ฐ€๋ฐ”์ดํŠธ์ธ๋ฐ ์–ด์ฐจํ”ผ ์ €ํฌ๋Š” ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ ๋ง๊ณ ๋Š” ์‚ฌ์ง„์„ ์ €์žฅํ•˜์ง€ ์•Š์œผ๋‹ˆ ํฐ ๋ฌธ์ œ๊ฐ€ ์—†์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์ฃ ..

 

๊ทธ๋Ÿฐ๋ฐ ์šฐ๋ ค๊ฐ€ ํ˜„์‹ค์ด ๋ฉ๋‹ˆ๋‹ค.. ๊ฐœ๋ฐœ์„ ํ•˜๋ฉด์„œ ํ…Œ์ŠคํŠธํ•˜๋Š” ์ค‘์— ๊ฐ‘์ž๊ธฐ ์ด๋ฏธ์ง€๊ฐ€ ๋‹ค์šด๋กœ๋“œ๋˜์ง€ ์•Š์œผ๋ฉด์„œ 402๊ฐ€ ์‘๋‹ต ์ฝ”๋“œ๋กœ ๋Œ์•„์™”๊ณ , ํ™•์ธํ•ด๋ณด๋‹ˆ ์‚ฌ์šฉ๋Ÿ‰ ์ดˆ๊ณผ๋กœ ์š”์ฒญ์ด ๊ฑฐ๋ถ€๋œ ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

 

์›์ธ์„ ๋ถ„์„ํ•ด๋ณด๋‹ˆ,

์ €ํฌ๋Š” ์ด๋ ‡๊ฒŒ ์ƒ๊ฐ๋ณด๋‹ค ๋งŽ์€ ํ™”๋ฉด์—์„œ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋”๊ตฐ๋‹ค๋‚˜ ์นœ๊ตฌ๋‚˜ ์ž์‹ ์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€๋งŒ์„ ๋‹ค์šด๋กœ๋“œํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งค๋ฒˆ ๋˜‘๊ฐ™์€ ์ด๋ฏธ์ง€๊ฐ€ ๋ฐ˜๋ณต๋ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ด๋ฏธ์ง€ ์บ์‹ฑ์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๊ณ„์† ๋˜‘๊ฐ™์€ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜์ง€ ์•Š์•„๋„ ๋˜๊ฒ ์ฃ !

 

๊ฒฐ๊ตญ ์ €ํฌ๋Š” ์ด๋ฏธ์ง€ ์บ์‹ฑ์„ ์ ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค..!

 

์บ์‹ฑ ์„ค๊ณ„

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

 

ํšจ์œจ์ ์œผ๋กœ ์ œํ•œ๋œ ์„œ๋ฒ„ ์Šคํ† ๋ฆฌ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์ž์ฃผ ๋ฐ”๋€Œ์ง€ ์•Š๋Š” ํ”„๋กœํ•„ ์ด๋ฏธ์ง€๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋””์Šคํฌ ์บ์‹ฑ๊นŒ์ง€ ๋ชจ๋‘ ์ œ๊ณตํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ์ด๋ฏธ์ง€ ์บ์‹ฑ์œผ๋กœ ์œ ๋ช…ํ•œ KingFisher์ฒ˜๋Ÿผ ์™ธ๋ถ€์—์„œ๋Š” UIImageView๋Š” ์บ์‹ฑ์— ๋Œ€ํ•œ ์ •๋ณด๋Š” ๋ชจ๋ฅธ ์ฑ„ ์ด๋ฏธ์ง€์˜ URL๋งŒ ์š”์ฒญํ•˜๋ฉด ์ด๋ฏธ์ง€๋ฅผ ๋ฐ˜ํ™˜์‹œ์ผœ์ฃผ๋„๋ก ํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ด๋ ‡๊ฒŒ UIImageView์˜ extension์„ ๋งŒ๋“ค์–ด๋‘๊ณ  ์บ์‹œ ์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด ์ด๋ฏธ์ง€๋ฅผ ์ „๋‹ฌ๋ฐ›๋„๋ก ๊ตฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.



์ „์ฒด์ ์ธ ๊ณผ์ •์€ ์œ„์™€ ๊ฐ™์€๋ฐ์š”, ์ด๋ฏธ์ง€ ์š”์ฒญ์ด ์‹œ์ž‘๋˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ๋ฅผ ํ™•์ธํ•˜๊ณ , ์—†์œผ๋ฉด ๋””์Šคํฌ ์บ์‹œ๋ฅผ, ๊ทธ๋ฆฌ๊ณ  ๋””์Šคํฌ ์บ์‹œ์—๋„ ์—†์œผ๋ฉด ๋„คํŠธ์›Œํฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•ด์„œ ์ด๋ฏธ์ง€๋ฅผ ๋ฐ›์•„์˜ค๋Š” ๊ณผ์ •์œผ๋กœ ์„ค๊ณ„๋ฅผ ๋งˆ๋ฌด๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

 

๋ฉ”๋ชจ๋ฆฌ ์บ์‹ฑ

๋ฉ”๋ชจ๋ฆฌ ์บ์‹ฑ์€ ์• ํ”Œ์—์„œ ์ œ๊ณตํ•˜๋Š” NSCache๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.

NSCache๋Š” Key-Value ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์ฃผ๋Š”๋ฐ์š”, ๋‹ค์šด๋กœ๋“œํ•  ์ด๋ฏธ์ง€์˜ URL์„ ํ‚ค ๊ฐ’์œผ๋กœ ์‚ผ์•„ ์ด๋ฏธ์ง€๋ฅผ Data ํƒ€์ž…์œผ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. 

์ด๋ ‡๊ฒŒ ๊ตฌํ˜„ํ•˜๋ฉด URL์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์œผ๋ฉด ํ•ด๋‹น ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ˜ํ™˜์ด ๋˜๊ณ , ์—†์œผ๋ฉด nil ์ด ๋ฐ˜ํ™˜์ด ๋˜๊ฒ ์ฃ ?

 

๋””์Šคํฌ ์บ์‹ฑ

๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ๋ฅผ ์ฒดํฌํ–ˆ์„ ๋•Œ nil์ด ๋ฐ˜ํ™˜๋˜์–ด Miss๊ฐ€ ๋˜๋ฉด ๋””์Šคํฌ ์บ์‹œ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๋””์Šคํฌ ์บ์‹œ๋Š” ๋””์Šคํฌ๊ฐ€ Miss ๋˜๋ฉด nil์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , Hit ๋˜๋ฉด ์ฝ”๋“œ์—๋Š” ๋‚˜์™€์žˆ์ง€ ์•Š์ง€๋งŒ, ์บ์‹œ ์ง€์—ญ์„ฑ์˜ ์›๋ฆฌ๋ฅผ ์‚ด๋ฆฌ๊ธฐ ์œ„ํ•ด Hit ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ์— ์˜ฌ๋ฆฌ๋Š” ๊ณผ์ •๊นŒ์ง€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

 

๋””์Šคํฌ ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” File Manager๋ฅผ ํ†ตํ•ด ํŒŒ์ผ ์ฝ๊ณ  ์“ฐ๊ธฐ๋ฅผ ํ•˜๊ณ , ํŒŒ์ผ์„ ์•ฑ ์ƒŒ๋“œ๋ฐ•์Šค์˜ Libarary/Caches ์œ„์น˜์— ์š”์ฒญํ–ˆ๋˜ ์ด๋ฏธ์ง€ ์ฃผ์†Œ๋ฅผ ํŒŒ์ผ ์ด๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝํ•ด ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

๋ญ”๊ฐ€ ์ด์ƒํ•œ๋ฐ...?

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

 

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

 

๋กœ์ปฌ-์„œ๋ฒ„ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™” feat. ETag

๊ฒฐ๊ตญ ์„œ๋ฒ„์— ํ˜„์žฌ ์šฐ๋ฆฌ๊ฐ€ ๊ฐ€์ง„ ์ด๋ฏธ์ง€๊ฐ€ ์ตœ์‹  ๋ณธ์ธ์ง€ ํ™•์ธํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ–ˆ๋Š”๋ฐ์š”, ์ด๋ฅผ ์œ„ํ•ด ETag ๊ฐœ๋…์„ ํ•™์Šตํ•˜๊ณ  ์ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ด์–ด๋ฒ ์ด์Šค ์Šคํ† ๋ฆฌ์ง€์— ์ด๋ฏธ์ง€๋ฅผ ๋ฐ›๋Š” ๋ฐ ์„ฑ๊ณตํ•˜๋ฉด, ์„œ๋ฒ„๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ์‘๋‹ต ํ—ค๋”๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ค๋‹ˆ๋‹ค.

์ด ETag๋Š” ์„œ๋ฒ„์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ํ•จ๊ป˜ ๋ฐ”๋€Œ๋Š”๋ฐ์š”, ๋งˆ์ง€๋ง‰์œผ๋กœ ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์™”์„ ๋•Œ์˜ ETag๋ฅผ ๋ณด๊ด€ํ•˜๊ณ  ์žˆ๋‹ค๊ฐ€ ์„œ๋ฒ„๊ฐ€ ๊ฐ€์ง„ ETag์™€ ๋น„๊ตํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋กœ์ปฌ ์ด๋ฏธ์ง€์™€ ์„œ๋ฒ„ ์ด๋ฏธ์ง€๊ฐ€ ๋™์ผํ•œ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

ETag๋ฅผ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊ฐ€์žฅ ๋จผ์ € ์บ์‹ฑ์˜ ๋Œ€์ƒ์„ ์ด๋ฏธ์ง€์˜ Data ํƒ€์ž…์—์„œ ETag๊นŒ์ง€ ํฌํ•จํ•˜๋Š” ์ƒˆ๋กœ์šด ํƒ€์ž…์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํด๋ž˜์Šค ํ•˜๋‚˜๋ฅผ ๋งŒ๋“ค๊ณ , ์ด๋ฏธ์ง€์™€ ETag๋ฅผ ํ•จ๊ป˜ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿผ ์บ์‹œ๊ฐ€ ๋‹ค๋ฃจ์–ด์•ผ ํ•  ๋ฐ์ดํ„ฐ๋„ ๋ฐ”๋€Œ๊ฒ ์ฃ ?

์ด๋ ‡๊ฒŒ ์œ„์—์„œ ์ƒˆ๋กœ ์ •์˜ํ•œ ํƒ€์ž…์„ ๊ฐ’์œผ๋กœ ๊ฐ€์ง€๋Š” ์บ์‹œ๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. NSCache์˜ ๊ฐ’์œผ๋กœ Struct๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•ด์„œ ๋ชจ๋ธ์ด์ง€๋งŒ class๋กœ ํƒ€์ž…์„ ๋งŒ๋“ค์–ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

 

๋””์Šคํฌ ์บ์‹ฑ๋„ ๋ณ€๊ฒฝ์ด ๋˜์–ด์•ผ ํ•˜๋Š”๋ฐ์š”, ๋ฌธ์ œ๋Š” Data์™€ String ํƒ€์ž…์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํด๋ž˜์Šค๋ฅผ ํ•œ ๋ฒˆ์— ํŒŒ์ผ์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋ž˜์„œ ETag๋Š” ์ด๋ฏธ์ง€ URL์„ ํ‚ค ๊ฐ’์œผ๋กœ ์‚ผ์•„ UserDefaults์—, ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ๋Š” ๊ธฐ์กด์ฒ˜๋Ÿผ ํŒŒ์ผ์— ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋””์Šคํฌ๊ฐ€ Hit ๋˜์—ˆ๋Š”์ง€๋Š” ๋™์ผํ•˜๊ฒŒ ๋””์Šคํฌ์— URL์ด๋ฆ„์œผ๋กœ ์ €์žฅ๋œ ์ด๋ฏธ์ง€๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

์กฐ๊ฑด๋ถ€ GET์œผ๋กœ ETag ํ™•์ธํ•˜๊ธฐ

์บ์‹œ ๊ตฌ์กฐ๋Š” ๋ณ€๊ฒฝ๋˜์—ˆ๊ณ  ์ด์ œ ETag๋ฅผ ์ด์šฉํ•ด ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ์˜ ์ตœ์‹  ์—ฌ๋ถ€๋ฅผ ๊ฒ€์ฆ๋ฐ›์œผ๋ฉด ๋˜๋Š”๋ฐ์š”, ์ด๋ฅผ ์œ„ํ•ด์„œ ์กฐ๊ฑด๋ถ€ GET์„ ์ด์šฉํ•ด ETag๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ์‘๋‹ต์œผ๋กœ ๋ฐ›๊ณ , ETag๊ฐ€ ์ผ์น˜ํ•˜๋ฉด ์ผ์น˜ํ•œ๋‹ค๋Š” ์‘๋‹ต๋ฐ›๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

์กฐ๊ฑด๋ถ€ GET์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ—ค๋”์— If-None-Match์˜ ๊ฐ’์œผ๋กœ ํ˜„์žฌ ์ด๋ฏธ์ง€์˜ ETag๋ฅผ ๋ณด๋‚ด๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ์š”!

 

๋งŒ์•ฝ ETag๊ฐ€ ์ผ์น˜ํ•˜๋ฉด ์„œ๋ฒ„๋Š” 304: Not Modified์™€ ํ•จ๊ป˜ ๋น„์–ด์žˆ๋Š” ์‘๋‹ต์„ ์ฃผ๊ณ , ETag๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด 200: OK ์‘๋‹ต๊ณผ ํ•จ๊ป˜ ์ƒˆ๋กœ์šด ์ด๋ฏธ์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ํ—ค๋”์—๋Š” ์ƒˆ๋กœ์šด ETag๋„ ๋‹ด๊ฒจ์žˆ๊ฒ ์ฃ .

 

๊ทธ๋Ÿผ ์ด์ œ ์ „์ฒด์ ์ธ ์บ์‹ฑ ํ๋ฆ„์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€๋Šฅํ•œ ์บ์‹ฑ ๊ณผ์ •๋“ค์„ ์‹œ๋‚˜๋ฆฌ์˜ค๋กœ ๋‚˜๋ˆ ์„œ ๋ด…์‹œ๋‹ค!

 

์‹œ๋‚˜๋ฆฌ์˜ค 1: ๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ ํžˆํŠธ - ETag ์ผ์น˜

๋จผ์ € ์ด๋ฏธ์ง€ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ์บ์‹œ ์„œ๋น„์Šค ๊ฐ์ฒด๋Š” ๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ๋ฅผ ํ™•์ธํ•ด๋ด…๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ๊ฐ€ ํžˆํŠธ๋˜๋Š” ์ƒํ™ฉ์ด๋‹ˆ ํ•ด๋‹น URL์— ๋Œ€ํ•œ CacheableImage ์ธ์Šคํ„ด์Šค๊ฐ€ ์žˆ๊ฒ ์ฃ ? ๊ทธ๋ฆฌ๊ณ  ์ด ์•ˆ์—๋Š” ETag์™€ ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ ์ด ์บ์‹ฑ๋œ ์ด๋ฏธ์ง€๊ฐ€ ์ตœ์‹  ๋ณธ์ธ์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ ETag๋ฅผ ํ—ค๋”์— ๋‹ด์•„ ์„œ๋ฒ„์— GET ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

 

ETag ์—ญ์‹œ๋„ ์ผ์น˜ํ•˜๋Š” ์ƒํ™ฉ์ด๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„๋Š” 304๋ฅผ ์‘๋‹ต์œผ๋กœ ์ฃผ๊ณ  ์„œ๋น„์Šค ๊ฐ์ฒด๋Š” ์ด๋ฅผ ํ™•์ธํ•œ ๋’ค NSCache์— ์žˆ๋˜ ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์‹œ๋‚˜๋ฆฌ์˜ค 2: ๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ ํžˆํŠธ - ETag ๋ถˆ์ผ์น˜

์ด๋ฒˆ์—๋Š” ์„œ๋ฒ„์—์„œ 200OK์™€ ํ•จ๊ป˜ ์ƒˆ๋กœ์šด ์ด๋ฏธ์ง€๋ฅผ ์ฃผ๋Š” ๊ฒฝ์šฐ์ธ๋ฐ์š”, ์ด๋•Œ๋Š” ์„œ๋ฒ„์—์„œ ๋ฐ›์€ ์ตœ์‹  ์ด๋ฏธ์ง€์™€ ETag๋กœ ์บ์‹œ๋ฅผ ์ดˆ๊ธฐํ™”ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋จผ์ € ๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ์— ์ƒˆ๋กœ์šด CacheableImage ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค์–ด์„œ ์บ์‹œ๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์ฃผ๊ณ , ์ƒˆ๋กœ์šด ETag๋ฅผ UserDefaults์—, ์ด๋ฏธ์ง€๋Š” ์บ์‹œ ๋””๋ ‰ํ† ๋ฆฌ์— ์จ์ฃผ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 

 

๊ทธ๋ฆฌ๊ณ  ์ตœ์ข…์ ์œผ๋กœ๋Š” ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ์ตœ์‹  ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

 

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

 

์บ์‹œ ์ ์šฉ ํ›„..

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

๋งˆ๋ฌด๋ฆฌ

์บ์‹ฑ์„ ๊ตฌํ˜„ํ•˜๋ฉด์„œ ETag๋ผ๋Š” ์ƒˆ๋กœ์šด ๊ฐœ๋…๋„ ํ•™์Šตํ•˜๊ฒŒ ๋˜๊ณ , ์กฐ๊ฑด๋ถ€ Get์˜ ์š”์ฒญ์ด๋‚˜ ์‘๋‹ต๋„ ๊ณต๋ถ€ํ•  ์ˆ˜ ์žˆ์–ด์„œ ๊ตฌํ˜„ ๊ณผ์ •์ด ์ฆ๊ฑฐ์› ์Šต๋‹ˆ๋‹ค! ์•ž์œผ๋กœ๋„ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„์š”!

 

ํ˜น์‹œ๋‚˜ ์ž˜๋ชป๋œ ๋‚ด์šฉ์ด ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€๋กœ ์•Œ๋ ค์ฃผ์‹œ๋ฉด ๋” ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค!

 

์ €ํฌ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด ๋” ๊ถ๊ธˆํ•˜์‹œ๋‹ค๋ฉด ๊นƒํ—ˆ๋ธŒ ์ €์žฅ์†Œ์—๋„ ๋†€๋Ÿฌ ์˜ค์„ธ์š”!

https://github.com/boostcampwm-2021/iOS06-MateRunner

 

GitHub - boostcampwm-2021/iOS06-MateRunner: ํ•จ๊ป˜ ๋‹ฌ๋ฆฌ๋Š” ์ฆ๊ฑฐ์›€, Mate Runner ๐Ÿƒ๐Ÿป‍โ™‚๏ธ๐Ÿƒ๐Ÿป‍โ™€๏ธ

ํ•จ๊ป˜ ๋‹ฌ๋ฆฌ๋Š” ์ฆ๊ฑฐ์›€, Mate Runner ๐Ÿƒ๐Ÿป‍โ™‚๏ธ๐Ÿƒ๐Ÿป‍โ™€๏ธ. Contribute to boostcampwm-2021/iOS06-MateRunner development by creating an account on GitHub.

github.com

 

์ถ”๊ฐ€

์ด๋ฏธ์ง€ ์บ์‹œ ๊ตฌํ˜„์— ๋ถ€์กฑํ•œ ๋ถ€๋ถ„๋“ค์ด ์žˆ์–ด์„œ ์ด๋ฅผ ๊ฐœ์„ ํ•œ ๊ณผ์ •์„ ๋ณ„๊ฐœ์˜ ํฌ์ŠคํŠธ๋กœ ๋‹ด์•˜์–ด์š”! ํ™•์ธํ•ด๋ณด์‹œ๋ฉด ์žฌ๋ฏธ์žˆ์„๊ฑฐ์—์š”!

 

[iOS] ๋ฉ”์ดํŠธ๋Ÿฌ๋„ˆ: ๋ฐ˜์ชฝ์งœ๋ฆฌ ์ด๋ฏธ์ง€ ์บ์‹œ ๊ฐœ์„ ํ•˜๊ธฐ

๋ฉ”์ดํŠธ ๋Ÿฌ๋„ˆ ์•ฑ ๊ฐœ๋ฐœ ๊ณผ์ •์„ ๊ณต์œ ํ•˜๋Š” ํฌ์ŠคํŠธ์ž…๋‹ˆ๋‹ค! GitHub - boostcampwm-2021/iOS06-MateRunner: ํ•จ๊ป˜ ๋‹ฌ๋ฆฌ๋Š” ์ฆ๊ฑฐ์›€, Mate Runner ๐Ÿƒ๐Ÿป‍โ™‚๏ธ๐Ÿƒ๐Ÿป‍โ™€๏ธ ํ•จ๊ป˜ ๋‹ฌ๋ฆฌ๋Š” ์ฆ๊ฑฐ์›€, Mate Runner ๐Ÿƒ๐Ÿป‍โ™‚๏ธ๐Ÿƒ๐Ÿป

jeonyeohun.tistory.com