๐Ÿ“Œ 1๏ธโƒฃ Service Layer

Firestore์™€ API ํ˜ธ์ถœ ๋กœ์ง์ด ์ปดํฌ๋„ŒํŠธ์— ์„ž์ด๋ฉด
์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ๋–จ์–ด์ง„๋‹ค๊ณ  ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๋กœ์ง์„ Service Layer๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ
UI์™€ ๋ฐ์ดํ„ฐ ๋กœ์ง์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ถ„๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“Œ 2๏ธโƒฃ Custom Hook

๋ฐ์ดํ„ฐ fetching์ด๋‚˜ ์ƒํƒœ ๊ด€๋ฆฌ ๋กœ์ง์ด ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ์— ๋ฐ˜๋ณต๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Custom Hook์œผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ
๋กœ์ง ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์ปดํฌ๋„ŒํŠธ ๋‹จ์ˆœํ™”๋ฅผ ๋ชฉํ‘œ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“Œ 3๏ธโƒฃ Zustand ์„ ํƒ ์ด์œ 

์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ ํƒํ•  ๋•Œ
Redux๋Š” ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ๊ฐ€ ๋งŽ์•„ ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ์— ๋น„ํ•ด ๊ณผํ•˜๋‹ค๊ณ  ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.

Zustand๋Š” ๊ตฌ์กฐ๊ฐ€ ๊ฐ„๋‹จํ•˜๋ฉด์„œ๋„ ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ด
ํ˜„์žฌ ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ์— ์ ํ•ฉํ•˜๋‹ค๊ณ  ํŒ๋‹จํ•˜์—ฌ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“Œ 4๏ธโƒฃ Firestore onSnapshot

์ดˆ๊ธฐ์—๋Š” fetch ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™”์ง€๋งŒ
๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์‹œ UI๊ฐ€ ์ฆ‰์‹œ ๋ฐ˜์˜๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด onSnapshot์„ ์‚ฌ์šฉํ•˜์—ฌ
์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ๋ฐ˜์˜ ๊ตฌ์กฐ๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“Œ 5๏ธโƒฃ ์ „์ฒด ๊ตฌ์กฐ ์„ค๊ณ„

์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ธฐ์ค€์œผ๋กœ ๋‘๊ณ  ์„ค๊ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค.

UI, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง, ๋ฐ์ดํ„ฐ ์ ‘๊ทผ์„ ๋ถ„๋ฆฌํ•˜์—ฌ
๊ฐ ๋ ˆ์ด์–ด์˜ ์ฑ…์ž„์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๋‚˜๋ˆ„๋Š” ๊ตฌ์กฐ๋กœ ๊ตฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.