ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๋ฐ˜์‘ํ˜•

Magazine Site ๐Ÿ“–

Firebase ๋กœ CRUD๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  2์ฐจ์—์„œ๋Š”  ๋ฐฑ์—”๋“œ์—์„œ ๋งŒ๋“  API ๋ฅผ ๋ฐ›์•„์™€ CRUD๋ฅผ ๊ตฌํ˜„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. 

4.15-4.18 => Firebase CRUD ๊ตฌํ˜„ : Magazine Site with Firebase >
4.19-4.25 => Backend API ์—ฐ๊ฒฐ - AXIOS, REDUX TOOLKIT

 

 



Introduction ๐Ÿ™Œ

firebase service๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ํ–ˆ๋˜ ๋งค๊ฑฐ์ง„ ์‚ฌ์ดํŠธ๋ฅผ ๋ฐฑ์—”๋“œ์—์„œ ๋ฐ›์•„์˜จ API๋กœ ๋ถ™์—ฌ๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์กŒ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” axios์™€ Redux toolkit์„ ๊ณต๋ถ€ํ•˜์—ฌ ์ ์šฉ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.



SKill ๐Ÿ› ๏ธ

  • React, Redux Toolkit
  • Promise based HTTP client : Axios
  • Storage Service : AWS S3 bucket



๊ตฌํ˜„ ๊ธฐ๋Šฅ ๐Ÿ’ป

 

  •  ํšŒ์›๊ฐ€์ž… & ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€
    • ์ด๋ฉ”์ผ ํ˜•์‹ ์ฒดํฌ, ๋น„๋ฐ€๋ฒˆํ˜ธ ์ฒดํฌํ•  ๊ฒƒ
  •  ๋ฉ”์ธ ํŽ˜์ด์ง€
    • ์ด๋ฉ”์ผ ํ˜•์‹ ์ฒดํฌ, ๋น„๋ฐ€๋ฒˆํ˜ธ ์ฒดํฌํ•  ๊ฒƒ
    • ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก ๋…ธ์ถœ
      • ๋ฌดํ•œ ์Šคํฌ๋กค
      • ๊ฒŒ์‹œ๊ธ€ ํ•˜๋‚˜๋Š” ์ž‘์„ฑ์ž, ์ž‘์„ฑ ์‹œ๊ฐ„, ์ด๋ฏธ์ง€ ๋ฏธ๋ฆฌ๋ณด๊ธฐ, ํ…์ŠคํŠธ ๋‚ด์šฉ์œผ๋กœ ๊ตฌ์„ฑ
      • ๊ฒŒ์‹œ๊ธ€ ํ•˜๋‚˜๋ฅผ ํด๋ฆญ ์‹œ, ๊ฒŒ์‹œ๊ธ€ ์ƒ์„ธ ํŽ˜์ด์ง€๋กœ ์ด๋™
      • ๊ฒŒ์‹œ๊ธ€ ์ค‘ ์ข‹์•„์š”๋ฒ„ํŠผ(๋ถ„ํ™์ƒ‰ ํ•˜ํŠธ ๋ฒ„ํŠผ)์„ ๋ˆ„๋ฅด๋ฉด [์ข‹์•„์š”]๋ฅผ +1ํ•œ๋‹ค. ๋‹ค์‹œ ๋ˆ„๋ฅด๋ฉด ๋ถ„ํ™์ƒ‰ ํ•˜ํŠธ๊ฐ€ ํšŒ์ƒ‰ ํ•˜ํŠธ๊ฐ€ ๋˜๊ณ  ์ข‹์•„์š”๊ฐ€ -1๊ฐœ ๋œ๋‹ค.
  •  ๊ธ€ ์ž‘์„ฑ ํŽ˜์ด์ง€
    • ํ…์ŠคํŠธ, ์ด๋ฏธ์ง€ ์ค‘ ์ž…๋ ฅ ์•ˆ๋œ ๊ฒŒ ์žˆ๋‹ค๋ฉด ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ ๋ฒ„ํŠผ ๋น„ํ™œ์„ฑํ™”
    • ์ž‘์„ฑ ์™„๋ฃŒ ์‹œ ๋ฉ”์ธ ํŽ˜์ด์ง€๋กœ ์ด๋™

  •  ์ถ”๊ฐ€ํ•œ ๋ถ€๋ถ„ ๐Ÿฅ๐Ÿฃ
  • infinity scroll, lazy loading, suspense ์ ์šฉ
  • My Account page
    • ๋‚ด ๊ณ„์ • ์ •๋ณด
    • ๋‚ด๊ฐ€ ์ข‹์•„ํ•œ Posts์™€ ๋‚ด๊ฐ€ ์“ด Posts๋ฅผ ๋ฒ„ํŠผ์„ ๋งŒ๋“ค์–ด ๊ตฌ์„ฑ์ฝ”๋“œ ๋ณด๊ธฐ

 

  • date-fns ์ ์šฉ (eg. 1 day ago...)
    • date-fns๊ธฐ๋Šฅ ์ ์šฉํ•ด TimeAgo component ์ƒ์„ฑ์ ์šฉ ๋ชจ์Šต ๋ณด๊ธฐ

 

  • Router ์ด๋™์‹œ scroll to top ์ ์šฉ
    • ํŽ˜์ด์ง€ ์ „ํ™˜์‹œ ํ˜„์žฌ ์žˆ๋Š” scroll์œ„์น˜๊ฐ€ ๊ทธ๋Œ€๋กœ ๋ฐ˜์˜์ด ๋˜๋Š” ๋ฌธ์ œ์  ๋ฐœ๊ฒฌ
    • scrollToTop component ์ƒ์„ฑํ•ด index.js ์— ์ ์šฉ์‹œ์ผœ ํ•ด๊ฒฐ



What I've Learned ๐Ÿ“–

 

API ํ†ต์‹ 

๋ฐฑ์—”๋“œ์—์„œ APIํ†ต์‹ ์„ axios๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง„ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋ฐฑ์—”๋“œ์—์„œ ๋กœ๊ทธ์ธํ•  ๋•Œ token๋งŒ ์ฃผ์–ด์„œ userinfo๋ฅผ ๋ฐ›์•„์˜ค๋Š” api๋กœ userinfo๋ฅผ ๋กœ๊ทธ์ธ๊ณผ ๋™์‹œ์— ์„ธ์…˜์Šคํ† ๋ฆฌ์ง€์— ๋‹ด์•„์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋กœ๊ทธ์ธ ํ›„ ์ƒˆ๋กœ๊ณ ์นจ์„ ํ•ด์•ผ์ง€๋งŒ userinfo๊ฐ€ ์„ธ์…˜ ์Šคํ† ๋ฆฌ์ง€์— ๋‹ด๊ธฐ๋Š” ๋ฌธ์ œ์ ์ด์žˆ์—ˆ๊ณ , ์ด ๋•Œ ๋น„๋™๊ธฐํ†ต์‹ ์˜ ํ๋ฆ„์„ ๊นŠ๊ฒŒ ๊ณ ๋ฏผํ•ด๋ณด๋ฉฐ

'๋กœ๊ทธ์ธํ•  ๋•Œ getuser ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋˜์ง€ ์•Š์„๊นŒ?'๋ผ๋Š” ์ƒ๊ฐ์ด๋“ค์—ˆ๊ณ , ๋กœ๊ทธ์ธ์œผ๋กœ get์š”์ฒญ์„ ํ•  ๋•Œ ํ”„๋กœ๋ฏธ์Šค๊ฐ€ ๋ฐ˜ํ™˜๋˜๊ธฐ ์ง์ „ get user์„ ์‹คํ–‰์‹œํ‚ค๊ฒŒ๋” ๋ฐ”๊พธ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋กœ์„œ ๋กœ๊ทธ์ธ ์š”์ฒญ์‹œ user์ •๋ณด๋ฅผ ์„ธ์…˜์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅํ•˜๊ณ  ๋ฆฌ๋•์Šค user info state๋„ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

 

Redux toolkit

์‹ค์ „ ํ”„๋กœ์ ํŠธ๋ฅผ ๋Œ€๋น„ํ•ด Redux toolkit์œผ๋กœ ์ƒˆ๋กœ ์ง„ํ–‰ํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๋ฆฌ๋•์Šค๋„ ์™„์ „ํžˆ ์ดํ•ดํ•˜์ง€ ๋ชปํ•œ ์ƒํ™ฉ์—์„œ ์ ์šฉ์‹œํ‚ค๋ ค๋‹ค๋ณด๋‹ˆ ์—ฌ๋Ÿฌ ๋‚œ๊ด€์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ „ ํ”„๋กœ์ ํŠธ๋ฅผ ๋Œ€๋น„ํ•ด ์ƒํƒœํ๋ฆ„์— ๋Œ€ํ•ด ๋” ๊ณต๋ถ€ํ•  ํ•„์š”๊ฐ€ ๋Š๊ปด์กŒ๋˜ ์ฃผ์ฐจ์˜€์Šต๋‹ˆ๋‹ค.

 

๊ณผ์ œ ์ด์™ธ์— ํ•œ ๊ฒƒ๋“ค

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

๊ธฐ์กด์—๋Š” ์‹œ๊ฐ„์„ ์ƒ์„ฑํ•œ ์‹œ๊ฐ„์„ ์ง๊ด€์ ์œผ๋กœ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์ด ์ด์งˆ๊ฐ์ด ๋Š๊ปด์ ธ์„œ ํฌ์ŠคํŠธ ํ•œ์ง€ ์–ผ๋งˆ๋‚˜ ์ง€๋‚ฌ๋Š”์ง€ ๋ณด์—ฌ์ฃผ๋Š” ๊ธฐ๋Šฅ์ด ์žˆ๋Š” dns fns ๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์ ์šฉํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

 

๋ฐ˜์‘ํ˜•
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2024/11   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
๊ธ€ ๋ณด๊ด€ํ•จ