์ฃผ์š” ์ž‘์—…

  • ํ”„๋กœ๊ทธ๋ ˆ์Šค๋ฐ” ์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ตฌํ˜„ ๋ฐ ํŽ˜์ด์ง€ ์ด๋™
  • ๋ฆฌํŒฉํ† ๋ง (์ปดํฌ๋„ŒํŠธ ์žฌ์‚ฌ์šฉ์„ฑ ๋†’์ด๊ธฐ)

ํ•™์Šต ํ‚ค์›Œ๋“œ

  • requestAnimationFrame
  • CSS - transition

๊ณ ๋ฏผ ๋ฐ ํ•ด๊ฒฐ๊ณผ์ •(+ ๋ฆฌ๋ทฐ ์š”์ฒญ)

์•ˆ๋…•ํ•˜์„ธ์š” ๋ฉ˜ํ† ๋‹˜! ์˜ค๋Š˜๋„ ๊ณ ์ƒ ๋งŽ์œผ์‹ญ๋‹ˆ๋‹คใ…Žใ…Ž ์–ด์ œ ์ €๋Š” ๋Œ€๋ถ€๋ถ„์˜ ui๋ฅผ ๊ตฌํ˜„ํ–ˆ๊ณ  ํ˜„์žฌ๋Š” ์„ธ๋ถ€์ ์ธ ์ƒํƒœ๊ด€๋ฆฌ์™€ ๊ฐ™์€ ๋ถ€๋ถ„์„ ์กฐ๊ธˆ์”ฉ ์ฑ„์›Œ๋‚˜๊ฐ€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค! ์•„๋ž˜์— ์žˆ๋Š” ๊ฒƒ๋“ค์€ ์ œ๊ฐ€ ๊ตฌํ˜„์„ ํ•˜๋Š” ๊ณผ์ •์—์„œ ๊ณ ๋ฏผํ•˜๊ณ  ํ•ด๊ฒฐํ•˜๊ฑฐ๋‚˜ ์•„์ง๊นŒ์ง€ ์˜๋ฌธ์ ์ด ์ข€ ๋‚จ์€ ๊ฒƒ๋“ค์„ ์ •๋ฆฌํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ํŽธํ•˜๊ฒŒ ๋ด์ฃผ์‹œ๊ณ  ๋ง์”€ํ•ด์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค๐Ÿ™‡โ€โ™‚๏ธ๐Ÿ™‡โ€โ™‚๏ธ

ํด๋” ๊ตฌ์กฐ ๊ฐœ์„ 

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

  • app : ์•ฑ์˜ ์—”ํŠธ๋ฆฌ ํฌ์ธํŠธ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” ๋‹จ์ผ ํŽ˜์ด์ง€๋งŒ ์‚ฌ์šฉํ•  ์˜ˆ์ •์ด๊ธฐ ๋•Œ๋ฌธ์— pages ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋”ฐ๋กœ ๋‚˜๋ˆŒ ํ•„์š”๊ฐ€ ์—†๋‹ค๊ณ  ํŒ๋‹จํ•˜์—ฌ app์— ์ปดํฌ๋„ŒํŠธ๋“ค์„ ์กฐํ•ฉํ•˜์—ฌ ๋„ฃ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • entities : ๊ฐ ๋„๋ฉ”์ธ๋“ค์„ ๋””๋ ‰ํ† ๋ฆฌ๋ณ„๋กœ ๋‚˜๋ˆ„์–ด ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋„๋ฉ”์ธ ๋ณ„๋กœ api, lib, model, ui์˜ ํ•˜์œ„ ํด๋”๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.(autoRollingNews๋Š” ๋”ฐ๋กœ ํ•ด๋†“์„ ์—์ •)
    • api: ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ api ํ˜ธ์ถœ ๋“ฑ์„ ํ•ฉ์นœ ํ•จ์ˆ˜๋“ค์„ ๋ณด๊ด€ํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.
    • lib: ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๋“ค์„ ์ œ์ž‘ํ•˜๋Š” ๊ณผ์ •์—์„œ ํ•œ์ •์ ์œผ๋กœ ํ•„์š”ํ•˜๊ณ , ๋”ฐ๋กœ ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์˜ ์ปดํฌ๋„ŒํŠธ๋“ค์ด ๊ณต์œ ํ•ด์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ•จ์ˆ˜๋“ค์ด๋‚˜ ์ปดํฌ๋„ŒํŠธ๋“ค์— ๋Œ€ํ•ด์„œ ๋ชจ์œผ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
    • model : ๊ฐ ๋„๋ฉ”์ธ๊ณผ ์ปดํฌ๋„ŒํŠธ์— ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ์˜ ํƒ€์ž…์ด๋‚˜ custom hook ๋“ฑ์„ ๋ณด๊ด€ํ•ด๋‘๋Š” ๋””๋ ‰ํ† ๋ฆฌ์ž…๋‹ˆ๋‹ค.
    • ui: ๋‹ค๋ฅธ ๋กœ์ง๋“ค์„ ๋ถ„๋ฆฌํ•˜๊ณ  ์ตœ๋Œ€ํ•œ ์‹œ๊ฐ์ ์œผ๋กœ ๋ณด์—ฌ์ง€๋Š” ui๋งŒ ๊ตฌ์„ฑํ•ด๋†“์€ ์ปดํฌ๋„ŒํŠธ ํŒŒ์ผ๋“ค์ž…๋‹ˆ๋‹ค.
  • shared : ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ๋“ค์„ ๋ณด๊ด€ํ•ฉ๋‹ˆ๋‹ค. ์•„์ด์ฝ˜์ด๋‚˜, ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” common ์ปดํฌ๋„ŒํŠธ ํŒŒ์ผ๋“ค์„ ๋ณด๊ด€ํ•ฉ๋‹ˆ๋‹ค.
  • widgets: entities์˜ ๋„๋ฉ”์ธ๋“ค์ด ๊ฐ€์ง„ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•ฉ์ณ ํฌ๊ฒŒ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋กœ ๋ฌถ์–ด๋†“์€ ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค. ๊ฐœ์„ ํ•œ ํด๋” ๊ตฌ์กฐ์—์„œ ๋” ๊ฐœ์„ ํ•˜๋ฉด ์ข‹์„ ์ ์ด ์žˆ๋Š”์ง€ ๋ง์”€ํ•ด์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!

๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋ฐฉ์‹

๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋ฐฉ์‹ ๋ฆฌ์ŠคํŠธํ˜• ๋ณด๊ธฐ์—์„œ๋Š” ๋‰ด์Šค๋ฅผ ์–ธ๋ก ์‚ฌ๋“ค ๋ณ„๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ํŽ˜์ด์ง€ ์ „ํ™˜ ์•„์ด์ฝ˜์ด๋‚˜ ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ๋ˆ„๋ฅด๋ฉด ํ•ด๋‹น ์นดํ…Œ๊ณ ๋ฆฌ์˜ ์ „์ฒด๊ฐ€ ๋œฌ๋‹ค.

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

์ด ์ ์€ ์–ด์ œ ํ•˜๋ฉด์„œ ๊ณ ๋ฏผ ๊ณผ์ •์— ์žˆ์—ˆ๋Š”๋ฐ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉด์„œ๋„ ๋งŽ์ด ๊ณ ๋ฏผํ–ˆ๋˜ ๋ฌธ์ œ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ๋ฒˆ์— ๊ฐ€์ ธ์™€์„œ ๋ถ„๋ฅ˜ํ•˜๋А๋ƒ vs. ๊ฐ๊ฐ ์นดํ…Œ๊ณ ๋ฆฌ ๋ณ„๋กœ ๊ทธ๋•Œ๋งˆ๋‹ค ๋„˜์–ด๊ฐˆ ๋•Œ๋งˆ๋‹ค ๋‹ค์‹œ๊ธˆ ์นดํ…Œ๊ณ ๋ฆฌ์— ๋Œ€ํ•ด์„œ๋งŒ fetching์„ ๋‹ค์‹œ๊ธˆ ํ•ด์™€์•ผ ํ• ๊นŒ๋ผ๋Š” ๋ถ€๋ถ„์— ์žˆ์–ด์„œ ๊ณ„์† ํ™•์‹ ์„ ๊ฐ–์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. (ํ˜„์žฌ๋Š” ์ผ๋‹จ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ๋ฒˆ์— ๊ฐ€์ ธ์™€์„œ ๋ฐ”๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.) ์ „์ž์˜ ๊ฒฝ์šฐ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ๋ฒˆ์— ๊ฐ€์ ธ์˜ค๋Š” ๊ณผ์ • ์ž์ฒด๊ฐ€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ๋‹ค๋ณด๋‹ˆ ๋ณด๋‹ค ์‘๋‹ต์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ ค ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ๋–จ์–ด์ง€์ง€ ์•Š์„๊นŒ๋ผ๋Š” ๊ณ ๋ฏผ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๋ ‡๋‹ค๊ณ  ํ›„์ž๋ฅผ ์„ ํƒํ•˜๊ธฐ์—๋Š” ์นดํ…Œ๊ณ ๋ฆฌ๋งˆ๋‹ค ์ด๋™ํ•˜๋ฉด์„œ ๊ณ„์†ํ•ด์„œ ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋‚ ๋ฆฌ๊ฒŒ ๋˜๋ฉด ์„œ๋ฒ„๊ฐ€ ๊ฐ€์ง€๊ฒŒ ๋˜๋Š” ๋ถ€๋‹ด์ด ๋Š˜์ง€ ์•Š์„๊นŒ ๊ฑฑ์ •๋ฉ๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•ด์„œ ๋ฉ˜ํ† ๋‹˜์€ ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹œ๋Š”์ง€ ๊ณ ๊ฒฌ์„ ์—ฌ์ญ™๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค!

์˜ค๋Š˜์€ ์ด์ •๋„์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹คใ…Žใ…Ž ๊ธด ๊ธ€ ์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!! ํŽธ์•ˆํ•œ ๋ฐค ๋˜์„ธ์š” :)