FE/React

    [React] ๋ชจ๋˜ ๋ฆฌ์•กํŠธ ๋”ฅ๋‹ค์ด๋ธŒ 4. ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง ์ฃผ์š” ์ •๋ฆฌ

    1. ์‹ฑ๊ธ€ ํŽ˜์ด์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋ž€?์‹ฑ๊ธ€ ํŽ˜์ด์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์•ฝ์ž์ธ SPA๋Š” ๋ Œ๋”๋ง๊ณผ ๋ผ์šฐํŒ…์— ํ•„์š”ํ•œ ๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ๋Šฅ์„ ์„œ๋ฒ„๊ฐ€ ์•„๋‹Œ ๋ธŒ๋ผ์šฐ์ €์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ์˜์กดํ•˜๋Š” ๋ฐฉ์‹์„ ์˜๋ฏธํ•œ๋‹ค. SPA๋Š” ๋ง ๊ทธ๋Œ€๋กœ ํ•˜๋‚˜์˜ ํŽ˜์ด์ง€๋กœ ๊ตฌํ˜„๋˜๋ฉฐ ์ƒˆ๋กœ์šด ํŽ˜์ด์ง€๋ฅผ ๋ฐ›์•„์˜ค์ง€ ์•Š๋Š”๋‹ค. ์ตœ์ดˆ์— ์ฒซ ํŽ˜์ด์ง€์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ๋ถˆ๋Ÿฌ์˜จ ์ดํ›„์— ํŽ˜์ด์ง€ ์ „ํ™˜ ๋‹จ๊ณ„์—์„œ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ๋ธŒ๋Ÿฌ์šฐ์ €์˜ history.pushState์™€ history.replaceState๋กœ ์ด๋ค„์ง€๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„์—์„œ HTML์„ ๋‚ด๋ ค๋ฐ›์ง€ ์•Š๊ณ  ํ•˜๋‚˜์˜ ํŽ˜์ด์ง€์—์„œ ๋ชจ๋“  ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•œ๋‹ค. SPA๋Š” ์ตœ์ดˆ ์ฒซ ํŽ˜์ด์ง€๋ฅผ ๋ฐ›์„ ๋•Œ๋Š” SSR์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ดํ›„์—๋Š” CSR์„ ์ด์šฉํ•˜์—ฌ ๋ Œ๋”๋ง์„ ์ง„ํ–‰ํ•ด์•ผ ํ•œ๋‹ค. 1.1 SPA์—์„œ ํŽ˜์ด์ง€ ์ „ํ™˜์ด ์ผ์–ด๋‚˜๋Š” ๊ณผ์ •์„ ์„ค๋ช…ํ•˜์‹œ์˜คํŽ˜์ด์ง€ ์ „ํ™˜ ์‹œ..

    [React] SPA, CSR์€ ๊ฐ™์„๊นŒ ๋‹ค๋ฅผ๊นŒ

    ๋‹ต๋ถ€ํ„ฐ ์ด์•ผ๊ธฐ ํ•˜์ž๋ฉด SPA, CSR์€ ๊ฐ™์ง€ ์•Š๋‹ค. ์• ์ดˆ์— ๋น„๊ต ๋Œ€์ƒ์ด ์•„๋‹ˆ๋‹ค. CSR(Client Side Rendering)์‚ฌ์šฉ์ž๊ฐ€ ์›น ๋ธŒ๋ผ์šฐ์ €์— ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋Š” ๋นˆ HTML๋งŒ ๋ฐ›์•„์˜ค๊ณ , ๋ฐ์ดํ„ฐ๋Š” ์—ฌ๋Ÿฌ static ํŒŒ์ผ๋“ค์ด ๋กœ๋“œ๋œ ์ดํ›„์— ์š”์ฒญํ•ด์„œ ๋ฐ›์•„์˜ค๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰๋จSSR(Server Side Rendering)CSR๊ณผ ๋ฐ˜๋Œ€๋กœ ๋ฐ์ดํ„ฐ๊นŒ์ง€ ๋ชจ๋‘ ์‚ฝ์ž…ํ•˜์—ฌ ์™„์„ฑ๋œ HTML์„ ๋ฐ›์•„์˜ค๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰๋จSPA(Single Page Application)์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์ฒซ ํŽ˜์ด์ง€๋งŒ ๋ฐ›์•„์˜ค๊ณ  ์ดํ›„์—๋Š” ๋™์ ์œผ๋กœ ํŽ˜์ด์ง€๋ฅผ ๊ตฌ์„ฑํ•˜์—ฌ ์ƒˆ๋กœ์šด ํŽ˜์ด์ง€๋ฅผ ๋ฐ›์•„์˜ค์ง€ ์•Š๋Š” ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งํ•จ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์กฐํšŒํ•  ๋•Œ ํŽ˜์ด์ง€๊ฐ€ ์ƒˆ๋กœ๊ณ ์นจ ๋˜์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ๋„˜์–ด๊ฐ€์ง€ ์•Š์ŒMPA(Multiple Page Appl..

    React ๊ฐœ๋ฐœ์‹œ Node.js๋ฅผ ์„ค์น˜ํ•˜๋Š” ์ด์œ 

    Node.js๋Š” React๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋” ์‰ฝ๊ฒŒ ํ•ด์ฃผ๋Š” ๋„๊ตฌ๋“ค์„ ๋‚ด์žฅํ•˜๊ณ  ์žˆ๋Š” ์˜คํ”ˆ์†Œ์Šค์ด์žJavaScript runtime environment(์‹คํ–‰ ํ™˜๊ฒฝ)์ด๋‹ค.(*runtime : ํŠน์ • ์–ธ์–ด๋กœ ๋งŒ๋“  ํ”„๋กœ๊ทธ๋žจ๋“ค์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ) React ๊ฐœ๋ฐœ์„ ์ฒ˜์Œ ์‹œ์ž‘ํ•  ๋•Œ, Node.js ๋ฅผ ํ•จ๊ป˜ ์„ค์น˜ํ•œ๋‹ค.Node.js๋Š” ๋ฌด์—‡์ด๊ธฐ์— ํ•ญ์ƒ react์™€ ๊ฐ™์ด ๋”ฐ๋ผ๋‹ค๋‹ˆ๋Š” ๊ฑธ๊นŒ? ๊ฒฐ๋ก ์ ์œผ๋กœ ๋งํ•˜๋ฉด, React ๊ฐœ๋ฐœ์‹œ, Node.js๊ฐ€ ํ•„์ˆ˜์ ์ธ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ์ฆ‰, node.js ์—†์ด๋„ React๋Š” ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค! ๊ทธ๋ž˜๋„ Node.js๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋ฐ ์ด์œ ๋Š” ์žˆ๋Š” ๋ฒ•!๋งจ ์ฒ˜์Œ์— ์–ธ๊ธ‰๋„ ํ–ˆ๋‹ค.์ฐจ๊ทผ์ฐจ๊ทผ ์‚ดํŽด๋ณด์ž 1๏ธโƒฃ Node.js๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ํ™˜๊ฒฝ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” HTML์— ์ข…์†๋˜์–ด ์žˆ๋Š” ์–ธ์–ด์ด๋ฉฐ, HT..

    ํŽ˜์ด์ง€ ์ด๋™ ์‹œ ์Šคํฌ๋กค ์œ„์น˜ ํ•ญ์ƒ ์œ„์— ๊ณ ์ •์‹œํ‚ค๊ธฐ

    ํŽ˜์ด์ง€ ์ด๋™ ์‹œ ํ•ด๋‹นํŽ˜์ด์ง€์˜ ์Šคํฌ๋กค์„ ํ•ญ์ƒ ์ƒ๋‹จ์œผ๋กœ ์ด๋™์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.์•„๋ž˜์—์„œ ์œ„๋กœ ์›€์ง์ด๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ์žˆ๋Š” ํŽ˜์ด์ง€์˜€๊ธฐ์— ์Šคํฌ๋กค ์œ„์น˜๊ฐ€ ์ค‘์š”ํ–ˆ๋Š”๋ฐ, ์ด์ „ ํŽ˜์ด์ง€์˜ ์Šคํฌ๋กค ์œ„์น˜๊ฐ€ ์ƒ๋‹จ์ด ์•„๋‹ˆ๋ฉด ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ๊นจ์ง€๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ด ํ•ด๋‹น ๋ฐฉ๋ฒ•์œผ๋กœ ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐํ•˜์˜€๋‹ค.import { useLocation } from "react-router";import { useEffect } from "react";function ExamplePage() { const { location } = useLocation(); useEffect(() => { window.scrollTo(0, 0); }, [location]); *window.scrollTo- ๋ฌธ์„œ์˜ ์ง€์ •ํ•œ ์œ„์น˜๋กœ ์Šคํฌ๋กค๋”๋ณด๊ธฐ์ƒํ™ฉ1. ์•„๋ž˜์—์„œ ์œ„๋กœ ๋œจ๋Š” ..