Skip to content

real-project1110/FE

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

578 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

ํ•ญํ•ด 99 9๊ธฐ 4์กฐ ์‹ค์ „ ํ”„๋กœ์ ํŠธ - Status!

แ„‡แ…ณแ„…แ…ฉแ„‰แ…ง


๐Ÿ“– ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ

[statUs] ์›ํ™œํ•œ ํŒ€ ์—…๋ฌด์™€ ํŒ€ ๋‚ด ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์„ ๋„์™€์ฃผ๋Š” ์„œ๋น„์Šค

ํŒ€์˜ ์ผ์ •์„ ํ™•์ธํ•œ๋‹ค! ๋ˆ„๊ฐ€ ์–ด๋–ค ์ผ์ •์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค! ํŒ€์›์ด ์–ด๋–ค ์ƒํƒœ์ธ์ง€ ๋ณด์—ฌ์ค€๋‹ค!

๐ŸšŒ Status ์„œ๋น„์Šค ์ด์šฉํ•˜๊ธฐ
๐Ÿ—’ Status ๋…ธ์…˜ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ—“๏ธ ํ”„๋กœ์ ํŠธ ์šด์˜ ๊ธฐ๊ฐ„

  • ๊ฐœ๋ฐœ ๊ธฐ๊ฐ„: 2022๋…„ 11์›” 11์ผ ~ 2022๋…„ 12์›” 16์ผ
  • ์šด์˜ ๊ธฐ๊ฐ„: 2022๋…„ 12์›” 07์ผ ~ 2022๋…„ 12์›” 15์ผ

๐Ÿ‘ฅ ํ”„๋ก ํŠธ์—”๋“œ ํŒ€์› ์†Œ๊ฐœ

๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป ํ•œ์„ธ์ค€: https://github.com/hansejun

๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป ์•ˆ์น˜์˜: https://github.com/Returnmakdo

๐Ÿ‘ฅ ๋ฐฑ์—”๋“œ ํŒ€์› ์†Œ๊ฐœ

๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป ๊น€์ •ํ˜„: https://github.com/1005jh

๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป ์ •ํ˜„์ง„: https://github.com/hyunjin9603

๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป ์œ ๋™ํฌ: https://github.com/donghee44

๐Ÿ‘ฅ ๋””์ž์ด๋„ˆ

๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป ๋ฌธ์˜ˆ์ง„


๐Ÿ’š ์ฃผ์š” ๊ธฐ๋Šฅ

  • ํšŒ์›๊ฐ€์ž… ๋ฐ ๋กœ๊ทธ์ธ

    • ์ด๋ฉ”์ผ ์ธ์ฆ์„ ํ†ตํ•œ ํšŒ์›๊ฐ€์ž…
    • ์นด์นด์˜ค ๋กœ๊ทธ์ธ์„ ํ†ตํ•œ ๊ฐ„ํŽธํ•œ ํšŒ์›๊ฐ€์ž… ๋ฐ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ
    • ๋กœ๊ทธ์ธ ์‹œ ๊ฐ€์žฅ ์ตœ๊ทผ์— ์ ‘์†ํ•œ ๊ทธ๋ฃน ํŽ˜์ด์ง€๋กœ ์ด๋™

  • ์บ˜๋ฆฐ๋” ๋ฐ ์ƒํƒœ๋“ฑ๋ก

    • ์ƒํƒœ์— ๋Œ€ํ•œ ์ƒ‰์ƒ์„ ๋“ฑ๋กํ•˜์—ฌ ์ผ์ • ์ž‘์„ฑ ex) ํœด๊ฐ€์ค‘, ์—ฐ์ฐจ, ์ถœ์žฅ ๋“ฑ...
    • ์ž‘์„ฑํ•œ ํšŒ์›์ด ์•„๋‹ ์‹œ ์ˆ˜์ • ๋ถˆ๊ฐ€
    • ๋“œ๋ž˜๊ทธ์•ค๋“œ๋กญ์„ ํ†ตํ•œ ์ผ์ • ์ˆ˜์ •

  • ๊ฒŒ์‹œํŒ

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

  • ๊ทธ๋ฃน ํšŒ์› ์ƒํƒœ

    • ์†ํ•œ ๊ทธ๋ฃน๋‚ด์—์„œ ์ƒํƒœ๋ฉ”์‹œ์ง€์™€ ์ƒํƒœ ์•„์ด์ฝ˜ ๋“ฑ๋ก ๊ฐ€๋Šฅ
    • ์ƒํƒœ ์•„์ด์ฝ˜์€ ์œ ์ €์˜ ์˜ค๋ฅธ์ชฝ์— ํ‘œ์‹œ๋˜๋ฉฐ ๋งˆ์šฐ์Šค๋ฅผ ์˜ฌ๋ ค๋†“์„ ์‹œ์— ํ•ด๋‹น ์œ ์ €์˜ ์ƒํƒœ ๋ฉ”์‹œ์ง€ ํ™•์ธ ๊ฐ€๋Šฅ
    • ํ•ด๋‹น ๊ทธ๋ฃน์˜ ์ ‘์†ํ•˜๊ณ  ์žˆ๋Š” ์œ ์ €๋“ค์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ‘œ์‹œ

  • ๊ทธ๋ฃน ์ƒ์„ฑ ๋ฐ ์ดˆ๋Œ€

    • ๊ทธ๋ฃน์—์„œ ์œ ์ € ์ดˆ๋Œ€ ๊ฐ€๋Šฅ
    • ์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ์˜ ์•Œ๋ฆผ ์•„์ด์ฝ˜์„ ํด๋ฆญํ•˜๋ฉด ๋ฐ›์€ ์ดˆ๋Œ€ ๋ชฉ๋ก์„ ๋ณด์—ฌ์คŒ
    • ์ดˆ๋Œ€ ์ˆ˜๋ฝ์‹œ์— ํ•ด๋‹น ๊ทธ๋ฃน์œผ๋กœ ์ด๋™

  • ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…

    • ๊ทธ๋ฃน๋‚ด์˜ ์œ ์ €์™€ ์‹ค์‹œ๊ฐ„ 1๋Œ€1 ์ฑ„ํŒ…
    • ์ƒ๋Œ€๋ฐฉ์ด ๋ฉ”์‹œ์ง€๋ฅผ ์ฝ์ง€ ์•Š์•˜์„ ๊ฒฝ์šฐ ์ƒ๋Œ€๋ฐฉ์˜ ํ™”๋ฉด์—์„œ ์ฝ์ง€ ์•Š์€ ๋ฉ”์‹œ์ง€ ์ˆ˜ ํ‘œ์‹œ


โœ… ๋‹ด๋‹น ์ž‘์—…

๐Ÿ‘ท๐Ÿปโ€โ™‚๏ธ ํ•œ์„ธ์ค€

  • ๋ ˆ์ด์•„์›ƒ: ๋ ˆ์ด์•„์›ƒ, ๊ธ€๋กœ๋ฒŒ ์Šคํƒ€์ผ, ์• ๋‹ˆ๋ฉ”์ด์…˜ ํšจ๊ณผ
  • ๊ทธ๋ฃน ๊ตฌํ˜„: ๊ทธ๋ฃน ์ƒ์„ฑ/์ˆ˜์ •/์‚ญ์ œ, ๊ทธ๋ฃน ์ดˆ๋Œ€
  • ๊ทธ๋ฃน ์œ ์ € : ์ƒํƒœ ๋ฉ”์‹œ์ง€ ๋ฐ ์ƒํƒœ ์•„์ด์ฝ˜, ํ”„๋กœํ•„ ๋ณ€๊ฒฝ
  • ์†Œ์ผ“ : ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… / ์•ˆ์ฝ์€ ๋ฉ”์‹œ์ง€ ์•Œ๋ฆผ / ์‹ค์‹œ๊ฐ„ ์ ‘์† ์œ ์ € ํ‘œ์‹œ
  • ํ•„์š”ํ•œ util ํ•จ์ˆ˜ ์ œ์ž‘ : token ๋””์ฝ”๋“œ, ์ฟ ํ‚ค ์—ฌ๋ถ€, ์‹œ๊ฐ„ ๊ด€๋ จ ํ•จ์ˆ˜

๐Ÿ‘ท๐Ÿปโ€โ™‚๏ธ ์•ˆ์น˜์˜

  • ๋กœ๊ทธ์ธ, ํšŒ์›๊ฐ€์ž… : ์œ ํšจ์„ฑ ๊ฒ€์ฆ, ์ด๋ฉ”์ผ์„ ํ†ตํ•œ ์ธ์ฆ ํ™•์ธ, ์†Œ์…œ๋กœ๊ทธ์ธ
  • ์บ˜๋ฆฐ๋” ๊ตฌํ˜„ : ์ƒํƒœ ์ƒ์„ฑ/์ˆ˜์ •/์‚ญ์ œ, ์ผ์ • ์ƒ์„ฑ/์ˆ˜์ •/์‚ญ์ œ, ๋“œ๋ž˜๊ทธ์•ค๋“œ๋กญ
  • ๊ฒŒ์‹œํŒ ๊ตฌํ˜„ : ๊ฒŒ์‹œ๊ธ€ ์ƒ์„ฑ/์ˆ˜์ •/์‚ญ์ œ, ๋Œ“๊ธ€ ์ƒ์„ฑ/์ˆ˜์ •/์‚ญ์ œ, ์ข‹์•„์š”. ์ƒ์„ธํŽ˜์ด์ง€, ์ƒ์„ธ ์ด๋ฏธ์ง€, ์ด๋ฏธ์ง€ ์Šฌ๋ผ์ด๋“œ
  • ์˜ˆ์™ธ์ฒ˜๋ฆฌ : ์˜ˆ์™ธ์— ๋Œ€ํ•œ alert ์ž‘์—…
  • ๋ฐฐํฌ : Vercel์„ ํ†ตํ•œ ๋ฐฐํฌ

๐Ÿ’ฌ ๊ธฐ์ˆ ์  ์˜์‚ฌ๊ฒฐ์ •

ย  ย  ย  ย 

ย  ย 

์‚ฌ์šฉ ๊ธฐ์ˆ  ๊ธฐ์ˆ  ๊ฒฐ์ • ์ด์œ 
Socket.io webSocket์˜ ๊ฒฝ์šฐ ๋ธŒ๋ผ์šฐ์ € ๋ณ„๋กœ ์ง€์› ๋ฒ„์ „์ด ๋‹ค๋ฅด๊ฑฐ๋‚˜ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์–ด์„œ ์ผ๊ด€๋œ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด์„œ socket.io๋ฅผ ์ ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.
React-Query ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹ฑํ•˜๊ณ  ๋ฐ์ดํ„ฐ ํŒจ์นญ ์‹œ, ๋กœ๋”ฉ ๋ฐ ์—๋Ÿฌ์ฒ˜๋ฆฌ๊ฐ€ ์‰ฝ๊ฒŒ ๊ฐ€๋Šฅํ•˜๊ณ  ๋ณ„๋„์˜ ์„ค์ •์—†์ด ์ฆ‰์‹œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์—ฌ๋Ÿฌ๋ฒˆ์˜ ์š”์ฒญ์ด ์žˆ์„ ์‹œ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•ด์ฃผ๋Š” ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์žฅ์ ์œผ๋กœ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์˜ค๋ž˜๋˜์—ˆ๋‹ค๊ณ  ํŒ๋‹จํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ตœ์‹ ํ™”ํ•˜๋ฉฐ, ๋น„๋™๊ธฐ ๊ณผ์ •์„ ์„ ์–ธ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ณ , ์ถ”๊ฐ€์ ์œผ๋กœ Redux-Thunk๋ฅผ ์‚ฌ์šฉํ•  ์‹œ ๋ถˆํ•„์š”ํ•œ BoilerPlate์ฝ”๋“œ๊ฐ€ ๋ฐ˜๋ณต๋˜๋Š” ๊ฒƒ์— ๋น„ํ•ด ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ๊ฐ€ ๋งค์šฐ์ค„๊ธฐ ๋•Œ๋ฌธ์— React-Query๋ฅผ ์„ ํƒํ•˜์˜€์Šต๋‹ˆ๋‹ค.
Recoil ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ React์˜ useState ํ›…๊ณผ ๋น„์Šทํ•˜๊ฒŒ ๋™์ž‘ํ•˜์—ฌ ์ง๊ด€์ ์ด๋ฉด์„œ ๊ฐ„๋‹จํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ€๊ทœ๋ชจ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•ด์•ผํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋ผ๋ฉด redux๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ ํ•ฉํ•˜๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์ง€๋งŒ ํ˜„์žฌ ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ์—์„œ๋Š” ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ฒƒ๋„ ์•„๋‹ˆ๊ณ , Redux์— ๋น„ํ•ด ์ƒ๋Œ€์ ์œผ๋กœ ์ ์€ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” recoil์„ ์„ ํƒํ•˜์˜€์Šต๋‹ˆ๋‹ค.
Axios response timeout (fetch์—๋Š” ์—†๋Š” ๊ธฐ๋Šฅ) ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์ด ์กด์žฌ
Promise ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๊ธฐ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
๋ธŒ๋ผ์šฐ์ € ํ˜ธํ™˜์ด fetch๋ณด๋‹ค ๋›ฐ์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ์›น ์•ฑ์„ ์—ผ๋‘ํ•œ ๊ณฐ๊ณฐ ์„œ๋น„์Šค์— ์ ํ•ฉํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.
Styled components CSS๋ฅผ ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋กœ ์ชผ๊ฐค์ˆ˜ ์žˆ์–ด ์‚ฌ์šฉ ๋นˆ๋„๊ฐ€ ๋†’์€ CSS๋ฅผ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , CSS SCSS์™€ ๋‹ฌ๋ฆฌ ์ „์—ญ์ ์ธ ๊ด€๋ฆฌ๋ฅผ ํ•˜์ง€ ์•Š์•„๋„ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ง€ ๋ณด์ˆ˜์— ์šฉ์ดํ•˜๋‹ค๋Š” ์žฅ์ ๋•Œ๋ฌธ์— ์„ ํƒํ•˜์˜€์Šต๋‹ˆ๋‹ค.
Vercel FrontEnd ํ˜ธ์ŠคํŒ… ์‚ฌ์ดํŠธ๋กœ์„œ ๋ณต์žกํ•œ ์ ˆ์ฐจ์—†์ด GitHub ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋น ๋ฅธ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅ ํ•˜๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์–ด ์„ ํƒํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๐Ÿ”ฅํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

์ฑ„ํŒ… state์˜ ์ดˆ๊ธฐํ™”

โ“ ๋ฌธ์ œ

  • ํŽ˜์ด์ง€๋ฅผ ์ด๋™ํ•ด๋„ ์ฑ„ํŒ…์— ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์€ state๊ฐ€ ์‚ฌ๋ผ์ง€์ง€ ์•Š์Œ
  • React-Query๋ฅผ ํ†ตํ•ด ๊ธฐ์กด์— ์ฃผ๊ณ  ๋ฐ›์€ ์ฑ„ํŒ… ๋‚ด์—ญ(์„œ๋ฒ„ ๋ฐ์ดํ„ฐ)์„ ๋ถˆ๋Ÿฌ์™€ state์— ๋‹ด๋Š”๋‹ค.
  • ์†Œ์ผ“์„ ํ†ตํ•ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ฃผ๊ณ  ๋ฐ›๋Š” ๋ฐ์ดํ„ฐ๋„ state์— ๋‹ด๋Š”๋‹ค.
  • roomId (params) ์ด๋™ ์‹œ์— react-query๋Š” params์— ๋งž๋Š” ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค์ง€๋งŒ state๋Š” ์ด์ „ ์ฑ„ํŒ…๋ฐฉ์—์„œ ๋‚˜๋ˆˆ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ทธ๋Œ€๋กœ ๋‚จ๋Š”๋‹ค.
  • ์ฑ„ํŒ…๋ฐ์ดํ„ฐ(์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ์ฑ„ํŒ… ๋ฐ์ดํ„ฐ) => ์ฑ„ํŒ… state์— ๋‹ด๋Š” ๋ฐฉ์‹

1๏ธโƒฃ 1์ฐจ ์ ‘๊ทผ

  • ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ถ„๋ฆฌ์‹œ์ผœ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์— ์ฑ„ํŒ… state๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์„œ๋ฒ„๋ฐ์ดํ„ฐ(useQuery)๋ฅผ props๋กœ ๋‚ด๋ ค์ฃผ๋ฉด params๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋ฆฌ๋ Œ๋”๋ง์ด ๋ฐœ์ƒํ•ด state๊ฐ€ ์ดˆ๊ธฐํ™” ๋ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐ.
  • ํ•˜์ง€๋งŒ state๊ฐ€ ๊ทธ๋Œ€๋กœ ๋‚จ์•„์žˆ๋Š” ํ˜„์ƒ์€ ๊ทธ๋Œ€๋กœ.

2๏ธโƒฃ 2์ฐจ ์ ‘๊ทผ

  • useEffect()๋ฅผ ํ†ตํ•ด ์–ธ๋งˆ์šดํŠธ ๋˜์—ˆ์„ ๋•Œ ํด๋ฆฐ์—… ํ•จ์ˆ˜๋กœ ์ฑ„ํŒ…์— ๋Œ€ํ•œ state ๊ฐ’์„ ์ดˆ๊ธฐํ™”ํ•˜๋ฉด ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐ. ํ•˜์ง€๋งŒ ํ™”๋ฉด์ƒ ์ฑ„ํŒ… ๋ฐ์ดํ„ฐ๊ฐ€ ํ•˜๋‚˜๋„ ๋ณด์ด์ง€ ์•Š๊ฒŒ ๋จ.

3๏ธโƒฃ 3์ฐจ ์ ‘๊ทผ

  • ๋งˆ์šดํŠธ ๋˜์—ˆ์„ ๋•Œ state๊ฐ’์„ ์ดˆ๊ธฐํ™” ์‹œํ‚ค๊ณ  ์ฑ„ํŒ… ๋ฐ์ดํ„ฐ(์„œ๋ฒ„๋ฐ์ดํ„ฐ)๋ฅผ ๊ฐ€์ ธ์˜ค๋Š”๋ฐ ์„ฑ๊ณตํ–ˆ๋‹ค๋ฉด ๊ทธ๋•Œ state์— ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค๊ณ  ์ƒ๊ฐ.
  • ํ•˜์ง€๋งŒ ์œ„์™€ ๊ฐ™์ด ์ฑ„ํŒ… ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณด์ด์ง€ ์•Š๋Š”๊ฑด ๋งˆ์ฐฌ๊ฐ€์ง€.
  • ๊ทธ๋ ‡๋‹ค๋ฉด ๋น„๋™๊ธฐ์— ๋”ฐ๋ฅธ ์‹คํ–‰ ์ˆœ์„œ์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๊ณ  ํŒ๋‹จ setTimeout()์„ ์ด์šฉํ•ด์„œ ์„œ๋ฒ„๋ฐ์ดํ„ฐ๋ฅผ state์— ๋‹ด์•„์ฃผ๋Š” ์‹œ๊ฐ„์„ ์กฐ๊ธˆ ๋Šฆ์ถฐ๋ด„.
  • ์„ฑ๊ณต์ ์ด์—ˆ์œผ๋‚˜ ์•ฝ๊ฐ„์˜ ์‹œ๊ฐ„์ฐจ์ด ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž์˜ ์ž…์žฅ์—์„œ ๋ถˆํŽธํ•จ์„ ๋А๋‚„ ์ˆ˜ ์žˆ์–ด ์‹คํŒจ๋กœ ๊ฐ„์ฃผ.

โ—๏ธ ํ•ด๊ฒฐ

  • ๋ฌดํ•œ ์Šคํฌ๋กค์„ ์œ„ํ•ด ์ƒ์„ฑํ•ด๋‘” pages๋ž€ state ๊ฐ’์„ useEffect์˜ ์˜์กด์„ฑ ๋ฐฐ์—ด์— ๋„ฃ๊ณ  ์–ธ๋งˆ์šดํŠธ ๋˜์—ˆ์„ ๋•Œ pages๋ฅผ 0์œผ๋กœ ์ดˆ๊ธฐํ™”. ( pages๋Š” 1์ด ์ถ”๊ฐ€๋  ๋•Œ๋งˆ๋‹ค ํ•ด๋‹น ํŽ˜์ด์ง€์˜ ์ฑ„ํŒ… ๊ฐ’์„ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์—ญํ• )
  • useEffect์—์„œ ์กฐ๊ฑด๋ฌธ์„ ํ†ตํ•ด pages๊ฐ€ 0์ด๋ฉด์„œ query data๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ์—๋Š” query data๋ฅผ ๋„ฃ์–ด์ฃผ๊ณ  query data๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ๋นˆ๋ฐฐ์—ด์„ ๋„ฃ์–ด์ฃผ๋‹ˆ ํ•ด๊ฒฐ
  • ์ฑ„ํŒ…๋ฐฉ ๋‚˜๊ฐ(pages๋ฅผ ์ดˆ๊ธฐํ™”) โ‡’ ์ฑ„ํŒ…๋ฐฉ ์ž…์žฅ(์„œ๋ฒ„ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ด) โ‡’ ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ์™€ pages์— ๋Œ€ํ•œ ์กฐ๊ฑด๋ฌธ์„ ํ†ตํ•œ ์ฑ„ํŒ… state ์—…๋ฐ์ดํŠธ

๋กœ๊ทธ์ธ ์œ ์ € ์ธ์‹ ๋ฌธ์ œ

โ“ ๋ฌธ์ œ

  • ์ด์ „ ๋กœ๊ทธ์ธ ๊ณ„์ • A , ํ˜„์žฌ ๋กœ๊ทธ์ธ ๊ณ„์ • B๊ฐ€ ์žˆ๋‹ค.
  • B๋กœ ๋กœ๊ทธ์ธํ•˜์˜€์„ ๋•Œ ์ƒˆ๋กœ๊ณ ์นจ์„ ํ•˜๊ธฐ ์ „๊นŒ์ง€๋Š” A์˜ ๊ณ„์ •์ด๋ผ๊ณ  ์„œ๋ฒ„์—์„œ ์ธ์‹์„ํ•˜๊ณ 
  • A์˜ ๊ณ„์ •์ •๋ณด๋ฅผ ๋ณด๋‚ด์ฃผ๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ

1๏ธโƒฃ ์ ‘๊ทผ

  • ์ฒ˜์Œ์—๋Š” ์„œ๋ฒ„์˜ ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ•˜์—ฌ ๋กœ๊ทธ์ธํ•˜์˜€์„ ๋•Œ response๋กœ ๋ฐ›๋Š” ์œ ์ €์˜ Id์™€ ํ† ํฐ์„ ํ™•์ธํ•ด๋ณด์•˜์œผ๋‚˜ ํ˜„์žฌ ๋กœ๊ทธ์ธ ๊ณ„์ • B์— ๋Œ€ํ•œ id์™€ ํ† ํฐ์ธ ๊ฒƒ์„ ํ™•์ธํ•จ.
  • ๊ทธ๋Ÿผ ๋‹ค์Œ์œผ๋กœ ์ƒ๊ฐํ•ด๋ณผ๊ฒƒ์€ useQuery์˜ ์บ์‹ฑ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š”์ง€ ํ˜น์€ ์„œ๋ฒ„์˜ ์ธ์ฆ ๋ฏธ๋“ค์›จ์–ด์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด๊ธฐ๋กœ ๊ฒฐ์ •.
  • ์šฐ์„  ์„œ๋ฒ„์—์„œ ํ† ํฐ์„ ํ†ตํ•ด ์–ด๋–ค ์œ ์ €๋กœ ์ธ์‹ํ•˜๊ณ  ์žˆ๋Š”๊ฐ€๋ฅผ ํ™•์ธํ•˜์˜€๋Š”๋ฐ ์ด์ „ ๋กœ๊ทธ์ธ ๊ณ„์ • A์˜ ํ† ํฐ์œผ๋กœ ์ธ์‹.
  • ๊ทธ๋ ‡๋‹ค๋ฉด ์„œ๋ฒ„์—์„œ๋Š” ๋ฌธ์ œ๊ฐ€ ์—†๊ณ  A์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” useQuery๋„ ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค๊ณ  ํŒ๋‹จ.
  • ๋กœ๊ทธ์ธํ• ๋•Œ๋งˆ๋‹ค ํ† ํฐ์€ ๊ณ„์†ํ•ด์„œ ์ตœ์‹ ํ™”๊ฐ€ ๋˜๊ณ  ์žˆ์Œ์—๋„ ์ƒˆ๋กœ๊ณ ์นจ ์ด์ „๊นŒ์ง€๋Š” ์ด์ „ ๊ณ„์ •์˜ ํ† ํฐ์ด ์ „์†ก๋˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— โ€œ์ƒˆ๋กœ๊ณ ์นจโ€์ด๋ผ๋Š” ํ‚ค์›Œ๋“œ์— ์ง‘์ค‘ํ•ด๋ณด๊ธฐ๋กœ ํ•จ.
  • ๋กœ๊ทธ์ธ์ด ๋˜์—ˆ์„ ๋•Œ navigate(โ€/โ€)๋กœ ํ™ˆํŽ˜์ด์ง€ ์ด๋™์„ ์‹œ์ผฐ๋Š”๋ฐ ์ด ์•ž ํ˜น์€ ๋’ค์— window.location.reload()์™€ ๊ฐ™์€ ์ƒˆ๋กœ๊ณ ์นจ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€๋กœ ๋„ฃ์–ด์ค€๋‹ค๋ฉด ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์˜€์ง€๋งŒ ์‹คํŒจ.

โ—๏ธ ํ•ด๊ฒฐ

  • naviagate๋Š” history๊ฐ€ ๋‚จ์ง€๋งŒ replace๋Š” history๊ฐ€ ๋‚จ์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์„ ํ™•์ธํ•ด ๋กœ๊ทธ์ธ ์„ฑ๊ณต์‹œ์— navigate(โ€/โ€)๊ฐ€ ์•„๋‹Œ window.location.replace(โ€/โ€)๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ํ•ด๊ฒฐ.

ํŒŒ์ผ๋ฆฌ์ŠคํŠธ๋ฅผ ์„œ๋ฒ„์— ์ „์†ก

โ“ ๋ฌธ์ œ

  • ํ•˜๋‚˜์˜ ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ๋ณด๋ƒˆ์„ ๋•Œ๋Š” ์„œ๋ฒ„์—์„œ req.file์„ ํ†ตํ•ด ๋ฐ›์•„์˜ค๋Š”๋ฐ ์„ฑ๊ณต ํ–ˆ์ง€๋งŒ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ๋ณด๋ƒˆ์„ ๋•Œ๋Š” ์„œ๋ฒ„์—์„œ req.files๋ฅผ ํ†ตํ•ด ๋ฐ›์•„์˜ค์ง€ ๋ชปํ•˜๋Š” ์ƒํ™ฉ ์ง๋ฉด.
  • ๊ธฐ์กด ๋ฐฉ์‹์€ formData๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ์š”์ฒญ์— headers๋ฅผ "multipart/form-dataโ€ ๋กœ ์„ค์ •ํ•˜์—ฌ {image:file}์„ ์ „์†กํ–ˆ์ง€๋งŒ {image:fileList}๋กœ ์ „์†กํ•  ๊ฒฝ์šฐ ใ…ˆarr.forEach arr์€ ๋ฐฐ์—ด์ด ์•„๋‹ˆ๋ผ๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ.

1๏ธโƒฃ 1์ฐจ ์ ‘๊ทผ

  • ์ด๋ฏธ์ง€๋ฅผ ๋‹ด๋Š” images๋ผ๋Š” state ๋ฅผ ๋งŒ๋“ค์–ด ์ด๋ฏธ์ง€๋ฅผ ์ถ”๊ฐ€ํ• ๋•Œ๋งˆ๋‹ค state ์— ์ถ”๊ฐ€.
  • ์„œ๋ฒ„์—์„œ๋Š” ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ ์ด๋ฏธ์ง€๋“ค์„ ๋ฐ›์•„์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— {image:images}๋กœ ์ „๋‹ฌ โ†’ ์‹คํŒจํ•จ.

์‹คํŒจ์ด์œ  FileList ํ˜•ํƒœ๊ฐ€ ์•„๋‹Œ [file,file,file] ํ˜•ํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„์—์„œ req.files๋กœ ์ธ์‹๋ถˆ๊ฐ€

โ—๏ธ ํ•ด๊ฒฐ

  • formData ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด state ์— ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด append(โ€imageโ€,state[i])๋กœ ์ถ”๊ฐ€ํ•˜์—ฌ ์„œ๋ฒ„์— ์ „๋‹ฌ ์„ฑ๊ณต

๋‹ค๋ฅธ ์œ ์ €์˜ ์ผ์ • ์—…๋ฐ์ดํŠธ

โ“ ๋ฌธ์ œ

  • ๋ณธ์ธ์˜ ์ผ์ •์ด ์•„๋‹Œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ drag&drop์„ ํ†ตํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ ์‹œ๋„ํ–ˆ์„ ๋•Œ DB๋ณ€ํ™”๋Š” ์—†์ง€๋งŒ ํ”„๋ก ํŠธ๋‹จ์—์„œ๋Š” ์ƒˆ๋กœ๊ณ ์นจ ํ•˜๊ธฐ ์ด์ „์—๋Š” ์‹คํ–‰๋˜๋Š”๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์—ฌ์ง€๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒ.
  • ๊ฐ•์ œ์ ์ธ optimistic ui

1๏ธโƒฃ 1์ฐจ ์ ‘๊ทผ

  • ์ƒ๋Œ€๋ฐฉ์˜ ์ผ์ •์„ drag&drop์„ ํ†ตํ•ด ์—…๋ฐ์ดํŠธํ•  ๋•Œ ํ•ด๋‹น ์ผ์ •์˜ userId๋ฅผ ๊ฐ€์ ธ์™€์„œ ํ˜„์žฌ ๋กœ๊ทธ์ธ๋˜์–ด์žˆ๋Š” userId์™€ ์ผ์น˜ํ•˜์ง€ ์•Š๋‹ค๋ฉด ์—…๋ฐ์ดํŠธ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์‹œ๋„ํ–ˆ์œผ๋‚˜ ์‹คํŒจ
  • ์บ˜๋ฆฐ๋”๋ฅผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๊ตฌํ˜„ํ–ˆ๋Š”๋ฐ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž์ฒด ์†์„ฑ์— dragToMove์™€ dragToResize๋ผ๋Š” ์—…๋ฐ์ดํŠธ ๊ด€๋ จ ์†์„ฑ์ด true๊ฐ’์œผ๋กœ ๊ณ ์ •๋˜์–ด์žˆ์–ด, ํ™”๋ฉด์ƒ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋ฌด์กฐ๊ฑด ์‹คํ–‰์ด ๋˜๊ฒŒ ๋˜์–ด์žˆ์Œ

2๏ธโƒฃ 2์ฐจ ์ ‘๊ทผ

  • dragToMove์™€ dragToResize๋ผ๋Š” ์†์„ฑ์— ์‚ผํ•ญ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด์„œ userId๊ฐ€ ๋งž์ง€์•Š๋‹ค๋ฉด ๊ฐ’์„ ๋ฐ”๊ฟ”๋ณด๊ธฐ๋กœ ์‹œ๋„ํ–ˆ์œผ๋‚˜ ์‹คํŒจ
  • ๋‘ ์†์„ฑ๋“ค์€ Component return ๋ถ€๋ถ„์— ์†ํ•ด์žˆ์–ด์„œ drag&drop์ด๋‚˜ resizingํ•  ์ผ์ •์˜ userId๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋ฐฉ๋ฒ•์ด ์—†์Œ

3๏ธโƒฃ 3์ฐจ ์ ‘๊ทผ

  • ๊ทธ๋ ‡๋‹ค๋ฉด ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ํ™”๋ฉด์ƒ์—์„œ๋งŒ ๋ณด์ผ๋ฟ DB์—๋Š” ์ €์žฅ๋˜์ง€ ์•Š์œผ๋‹ˆ, drag&drop ๊ณผ resizing ํ•˜๋Š” ํ•จ์ˆ˜์— ์ „์ฒด ์ผ์ •์˜ data์ธ myEvents๋ผ๋Š” state๋ฅผ useQuery์—์„œ ๊ฐ€์ ธ์˜จ data๋กœ setState๋ฅผ ํ•ด์ค˜์„œ ํ”„๋ก ํŠธ๋‹จ์˜ ์ผ์ •๋„ ์›๋ž˜๋Œ€๋กœ ๋Œ์•„์˜ค๊ฒŒ ๋” ์‹œ๋„ํ–ˆ์œผ๋‚˜ ์‹คํŒจ
  • setState๋ฅผ ํ•ด์ค€ ํ›„ data๋ฅผ ์ฝ˜์†”์— ์ฐ์–ด๋ดค์„ ๋•Œ ์ผ์ •์˜ ์‹œ์ž‘ ๋‚ ์งœ์™€ ๋๋‚˜๋Š” ๋‚ ์งœ ์ž์ฒด๊ฐ€ DB์— ์ ์šฉ๋˜๊ธฐ ์ „ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž์ฒด์˜ ์ˆ˜์ •๋œ ๋ฐ์ดํ„ฐ๋กœ ๋“ค์–ด์˜ค๊ฒŒ ๋˜์„œ ์‹คํŒจํ•จ

โ—๏ธ ํ•ด๊ฒฐ

  • ์˜ค๋ฅ˜ ํ…Œ์ŠคํŠธํ•˜๋˜ ์ค‘ ๋ฐœ๊ฒฌํ–ˆ๋˜ ์ƒˆ๋กœ๊ณ ์นจ์„ ํ–ˆ์„ ๋•Œ ํ”„๋ก ํŠธ๋‹จ์—์„œ๋„ ์›๋ž˜๋Œ€๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋Œ์•„์˜ค๋Š” ๊ฒƒ์„ ํ™•์ธ
  • drag&drop ๊ณผ resizingํ•˜๋Š” ํ•จ์ˆ˜์— ํ•ด๋‹น ์ผ์ •์˜ userId์™€ ํ˜„์žฌ ๋กœ๊ทธ์ธํ•œ ์œ ์ €์˜ userId๊ฐ€ ๊ฐ™์ง€์•Š๋‹ค๋ฉด useQuery์—์„œ ๊ฐ€์ ธ์˜จ refetch๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋กœ์ง์œผ๋กœ ํ•ด๊ฒฐ ์™„๋ฃŒ
  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ƒ ํ™”๋ฉด์ƒ ์ˆ˜์ •์„ ๋ง‰์„ ๋ฐฉ๋ฒ•์ด ์—†๊ธฐ์— ํ™”๋ฉด ์ˆ˜์ • => ์•„์ด๋””๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ƒˆ๋กญ๊ฒŒ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญ => state๋ฅผ ์ตœ์‹ ํ™”

About

statUs

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages