Skip to content

Latest commit

ย 

History

History
32 lines (17 loc) ยท 3.89 KB

universal.md

File metadata and controls

32 lines (17 loc) ยท 3.89 KB

์œ ๋‹ˆ๋ฒ„์„ค ์ฝ”๋“œ ์ž‘์„ฑํ•˜๊ธฐ

์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ธฐ ์ „์— ์ž ์‹œ "์œ ๋‹ˆ๋ฒ„์„ค" ์ฝ”๋“œ, ์ฆ‰ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๋ชจ๋‘์—์„œ ์‹คํ–‰๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ œ์•ฝ์‚ฌํ•ญ์— ๊ด€ํ•˜์—ฌ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค. ์œ ์ฆˆ์ผ€์ด์Šค ๋ฐ ํ”Œ๋žซํผ API์˜ ์ฐจ์ด์— ๋”ฐ๋ผ ์„œ๋กœ ๋‹ค๋ฅธ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•  ๋•Œ ์ฝ”๋“œ์˜ ๋™์ž‘์ด ์ •ํ™•ํžˆ ๋™์ผํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ๊ผญ ์•Œ์•„์•ผํ•  ์ค‘์š”ํ•œ ๊ฒƒ๋“ค์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

์„œ๋ฒ„์—์„œ์˜ ๋ฐ์ดํ„ฐ ๋ฐ˜์‘์„ฑ

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

์‹ค์ œ ๋ Œ๋”๋ง ํ”„๋กœ์„ธ์Šค๋Š” ๊ฒฐ์ •์ ์ด์–ด์•ผํ•˜๋ฏ€๋กœ ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ "๋ฏธ๋ฆฌ ๊ฐ€์ ธ(pre-fetching)"์˜ต๋‹ˆ๋‹ค. ๋ Œ๋”๋ง์„ ์‹œ์ž‘ํ•  ๋•Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ๋Š” ์ด๋ฏธ ์™„๋ฃŒ๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ ๋ฐ˜์‘์„ฑ์ด ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„ํ™œ์„ฑํ™” ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ๋ฐ˜์‘์„ฑ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜์‘ํ˜• ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์„ฑ๋Šฅ ๋น„์šฉ์„ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ปดํฌ๋„ŒํŠธ ๋ผ์ดํ”„์‚ฌ์ดํด ํ›…

๋™์ ์ธ ๊ฐฑ์‹ ์ด ์—†์œผ๋ฏ€๋กœ ๋ชจ๋“  ๋ผ์ดํ”„์‚ฌ์ดํด ํ›… ์ค‘ beforeCreate ๋ฐ created๋งŒ SSR ์ค‘์— ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, beforeMount ๋˜๋Š” mounted์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ๋ผ์ดํ”„์‚ฌ์ดํด ํ›… ์•ˆ์˜ ๋ชจ๋“  ์ฝ”๋“œ๋Š” ํด๋ผ์ด์–ธํŠธ์—์„œ๋งŒ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ์ฃผ์˜ ์‚ฌํ•ญ์€ beforeCreate์™€ created์—์„œ ์ „์—ญ์ ์ธ ์‚ฌ์ด๋“œ์ดํŽ™ํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ์ฝ”๋“œ (์˜ˆ: setInterval๋กœ ํƒ€์ด๋จธ ์„ค์ •) ํด๋ผ์ด์–ธํŠธ ์ธก ์ฝ”๋“œ์—์„œ๋งŒ ํƒ€์ด๋จธ๋ฅผ ์„ค์ •ํ•œ ๋‹ค์Œ beforeDestroy ๋˜๋Š” destroyed์—์„œ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ SSR ์ค‘ destroy ํ›…์ด ํ˜ธ์ถœ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํƒ€์ด๋จธ๊ฐ€ ์˜์›ํžˆ ๊ณ„์† ์‚ด์•„์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ”ผํ•˜๋ ค๋ฉด ์‚ฌ์ด๋“œ์ดํŽ™ํŠธ๋ฅผ ๋ฐœ์ƒํ•˜๋Š” ์ฝ”๋“œ๋ฅผ beforeMount ๋š€๋Š”mounted๋กœ ์˜ฎ๊ฒจ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ”Œ๋žซํผ์— ์˜์กดํ•˜๋Š” API์— ์ ‘๊ทผํ•˜๊ธฐ

์œ ๋‹ˆ๋ฒ„์„ค ์ฝ”๋“œ๋Š” ํŠน์ • ํ”Œ๋žซํผ์˜ API ์ ‘๊ทผ์„ ๊ฐ€์ •ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์ฝ”๋“œ๊ฐ€ window ๋˜๋Š” document์™€ ๊ฐ™์€ ๋ธŒ๋ผ์šฐ์ € ์ „์šฉ ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋ฉด Node.js์—์„œ ์‹คํ–‰ํ•  ๋•Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€ ์ž…๋‹ˆ๋‹ค.

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

๋ธŒ๋ผ์šฐ์ € ์ „์šฉ API์˜ ๊ฒฝ์šฐ ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์€ ํด๋ผ์ด์–ธํŠธ ์ „์šฉ ๋ผ์ดํ”„์‚ฌ์ดํด ํ›…์— ๊ฒŒ์œผ๋ฅธ ์ ‘๊ทผ(Lazyily Access)์„ ํ•˜๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

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

์‚ฌ์šฉ์ž ์ •์˜ ๋””๋ ‰ํ‹ฐ๋ธŒ

๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ์ž ์ง€์ • ๋””๋ ‰ํ‹ฐ๋ธŒ๋Š” DOM์„ ์ง์ ‘ ์กฐ์ž‘ํ•˜๋ฏ€๋กœ SSR์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‘๊ฐ€์ง€ ์ž…๋‹ˆ๋‹ค.

  1. ์ถ”์ƒํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜์œผ๋กœ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๊ฐ€์ƒ DOM ์ˆ˜์ค€์—์„œ ์ž‘์—…ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. (์˜ˆ : ๋ Œ๋”๋ง ๊ธฐ๋Šฅ ์‚ฌ์šฉ)
  2. ์ปดํฌ๋„ŒํŠธ๋กœ ์‰ฝ๊ฒŒ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ๋””๋ ‰ํ‹ฐ๋ธŒ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์„œ๋ฒ„ ๋ Œ๋”๋Ÿฌ๋ฅผ ๋งŒ๋“ค ๋•Œ directives์˜ต์…˜์„ ์‚ฌ์šฉํ•ด "์„œ๋ฒ„์šฉ ๋ฒ„์ „"์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.