
ํ ์ค๋ฑ ํฌ ๋ฉํ ๋ ์กฐ์ธ์ ๋ฐ๋ผ์ ์์ฆ ์ ๊ณต์์ (?) ๊ฐ๋ฐ์์ (?) ์ฑ ๋ค์ ์ฝ๊ณ ์๋๋ฐ,
์ค๋ ๊ธฐ์ตํ๋ ค๋ฉด ๋ด์ฉ์ ์์ฝํด๋๋ฉด ์ข์ ๊ฒ ๊ฐ์ ์ ๋ฆฌํ๋ค.
์ด ์ฑ ์ ์ ๋ฌธ์ ๊ธฐ์ค์ด๋ผ, ์ค๋ช ์ด ๊ฝค ์์ธํ๋ค.
ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ค์ ๊ฐ๋ ์ ํํํ ๋ค์ง๋ ๋ฐ์ ๋์์ด ๋ ๊ฒ ๊ฐ๋ค.
์ง๊ธ ์ฝ๊ณ ์๋๊ฑด React ๋์๋ Node JS ๋์์ธ๋ฐ,
์ด๋ฒ ๋ฌ ๋ด๋ก ์๋ ํ๊ณ Next JS์ Springboot ์ฑ ๋ ์ฝ์ด๋ณด๊ณ ์ถ๋ค.
์ด๋ฆด ๋ ์ฑ ์ ์ฐธ ์ข์ํ๋๋ฐ, ์์ฆ์ ์ฝ์ ์๊ฐ์ด ๋ง์ด ์์ด์ ์์ฝ๋ค ๐ค๐
์์ฝ์ ๊น๋ํ๊ฒ ํ๋ ค๊ณ chatgpt์ ๋์์ ๋ฐ์๋ค!
[ ์ฐธ๊ณ ์์ : ์ํ์ ์ฒ์ ๋ง๋ ๋ฆฌ์กํธ(2ํ) - ํ๋น๋ฏธ๋์ด ]
๐น ์น ๊ฐ๋ฐ ๊ธฐ๋ณธ ๊ฐ๋ ์ ๋ฆฌ
๐ HTML (HyperText Markup Language)
- ์น์ฌ์ดํธ์ ๋ผ๋๋ฅผ ๊ตฌ์ฑํ๋ ๋งํฌ์ ์ธ์ด
- ํ๊ทธ(tag) ๋ฅผ ์ฌ์ฉํ์ฌ ์นํ์ด์ง์ ๊ตฌ์กฐ๋ฅผ ์ ์
๐จ CSS (Cascading Style Sheets)
- ์น์ฌ์ดํธ์ ๋ ์ด์์, ๊ธ๊ผด, ์์ ๋ฑ์ ๋์์ธ์ ๋ด๋น
โก JavaScript (JS)
- ์นํ์ด์ง์ ๋์ ์ธ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ์คํฌ๋ฆฝํธ ์ธ์ด
- ์น์ฌ์ดํธ๊ฐ ์ํธ์์ฉ ๊ฐ๋ฅํ๊ฒ ๋์ํ๋๋ก ํจ
- ์ ์ ๋ช ์นญ: ECMAScript
- ES6(2015๋ ์ถ์) ์ดํ ๋ค์ํ ๋ฌธ๋ฒ์ด ์ถ๊ฐ๋๋ฉฐ ํ์คํ ์งํ
- ์ฃผ์ ๊ฐ๋ : ์๋ฃํ, ์ฐ์ฐ์, ํจ์ ๋ฑ
๐ ๊ฐ๋ฐ ํ๊ฒฝ ์ค์
- Node.js ๋ฐ npm ์ค์น (JavaScript ์คํ ๋ฐ ํจํค์ง ๊ด๋ฆฌ)
- VS Code ์ค์น (์ฝ๋ ํธ์ง๊ธฐ)
โ๏ธ React ์ ๋ฆฌ
โ React๋?
- ์ฌ์ฉ์ ์ธํฐํ์ด์ค(UI)๋ฅผ ๋ง๋ค๊ธฐ ์ํ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- SPA(Single Page Application) ๊ฐ๋ฐ์ ์ฝ๊ณ ๋น ๋ฅด๊ฒ ๋์์ฃผ๋ ๋๊ตฌ
๐ React์ ์ฅ์
- ๋น ๋ฅธ ์ ๋ฐ์ดํธ์ ๋ ๋๋ง ์๋ (Virtual DOM ์ฌ์ฉ)
- ์ฌ์ฌ์ฉ์ฑ์ด ๋์ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ๊ตฌ์กฐ
- ๋ฉํ(๊ตฌ ํ์ด์ค๋ถ)์ ์ง์์ผ๋ก ์ง์์ ์ธ ๋ฐ์
- ํ๋ฐํ ์ปค๋ฎค๋ํฐ์ ์ง์ ๊ณต์
- React Native๋ฅผ ์ด์ฉํ ๋ชจ๋ฐ์ผ ์ฑ ๊ฐ๋ฐ ๊ฐ๋ฅ
โ ๏ธ React์ ๋จ์
- ๋ฐฉ๋ํ ํ์ต๋ (JSX, ์ํ ๊ด๋ฆฌ, ํ ๋ฑ ์ตํ์ผ ํ ๊ฐ๋ ๋ง์)
- ์ํ ๊ด๋ฆฌ์ ๋ณต์ก์ฑ (Redux, Context API ๋ฑ ์ถ๊ฐ ๋๊ตฌ ํ์ํ ์๋ ์์)
๐ JSX ์ ๋ฆฌ
โ JSX๋?
- JavaScript์ XML/HTML์ ํจ๊ป ์ฌ์ฉํ ์ ์๋ JavaScript์ ํ์ฅ ๋ฌธ๋ฒ
๐น JSX์ ์ญํ
- JSX๋ก ์์ฑ๋ ์ฝ๋๋ JavaScript ์ฝ๋๋ก ๋ณํ๋จ
- React๋ JSX ์ฝ๋๋ฅผ createElement() ํจ์๋ฅผ ์ฌ์ฉํ ์ฝ๋๋ก ๋ณํ
๐ JSX์ ์ฅ์
- ์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ง
- ๊ฐ๋ ์ฑ์ด ํฅ์๋จ
- Injection Attack ๋ฐฉ์ด โ ๋ณด์์ฑ์ด ํฅ์๋จ
๐น JSX ์ฌ์ฉ๋ฒ
- ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ JavaScript ๋ฌธ๋ฒ์ ์ง์
- JavaScript ์ฝ๋์ XML๊ณผ HTML์ ํผํฉํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅ
- {}(์ค๊ดํธ)๋ฅผ ์ฌ์ฉํ์ฌ JavaScript ์ฝ๋๋ฅผ ์ฝ์
๐น React ์๋ฆฌ๋จผํธ(Element) ์ ๋ฆฌ
โ ์๋ฆฌ๋จผํธ๋?
- ๋ฆฌ์กํธ ์ฑ์ ๊ฐ์ฅ ์์ ๋น๋ฉ ๋ธ๋ก
- ํ๋ฉด์ ๋ํ๋๋ ๋ด์ฉ์ ๊ธฐ์ ํ๋ JavaScript ๊ฐ์ฒด
- DOM ์๋ฆฌ๋จผํธ์ ๊ฐ์ ํํ (Virtual DOM ๊ธฐ๋ฐ)
๐น ์๋ฆฌ๋จผํธ์ ์๊น์
- JavaScript ๊ฐ์ฒด ํํ
- ์ปดํฌ๋ํธ ์ ํ, ์์ฑ, ๋ด๋ถ ์์ ์์ ๋ฑ์ ์ ๋ณด ํฌํจ
๐ ์๋ฆฌ๋จผํธ์ ํน์ง
- ๋ถ๋ณ์ฑ(Immutability) โ ์์ฑ ํ ์์์ด๋ ์์ฑ์ ๋ณ๊ฒฝํ ์ ์์
๐น ์๋ฆฌ๋จผํธ ๋ ๋๋ง
- ReactDOM.createRoot() ๋ก ๋ง๋ root์ render() ํจ์ ์ฌ์ฉ
- React ์๋ฆฌ๋จผํธ๋ฅผ ์ค์ HTML ์๋ฆฌ๋จผํธ๋ก ๋ ๋๋ง
- ๋ ๋๋ง ๊ณผ์ : Virtual DOM โ ์ค์ DOM ๋ฐ์
๐ ์๋ฆฌ๋จผํธ ์ ๋ฐ์ดํธ
- ์๋ฆฌ๋จผํธ๋ ๋ณ๊ฒฝํ ์ ์์ผ๋ฏ๋ก ์๋ก์ด ์๋ฆฌ๋จผํธ๋ฅผ ์์ฑํ์ฌ ๊ต์ฒด
- ๊ธฐ์กด ์๋ฆฌ๋จผํธ๋ฅผ ์์ ํ๋ ๊ฒ์ด ์๋๋ผ ์๋ก์ด ์๋ฆฌ๋จผํธ๋ฅผ ๋ง๋ค์ด ๋ฐ๊ฟ์น๊ธฐ
โ๏ธ React ์ปดํฌ๋ํธ ์ ๋ฆฌ
โ ์ปดํฌ๋ํธ๋?
- ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ๊ตฌ์กฐ
- ์์ ์ปดํฌ๋ํธ๋ค์ด ๋ชจ์ฌ ํ๋์ ์ปดํฌ๋ํธ๋ฅผ ๊ตฌ์ฑ โ ์ด๋ฌํ ์ปดํฌ๋ํธ๋ค์ด ๋ชจ์ฌ ์ ์ฒด ํ์ด์ง๋ฅผ ๋ง๋ฆ
- ์๋ฐ์คํฌ๋ฆฝํธ ํจ์์ ๊ฐ๋
์ ์ผ๋ก ์ ์ฌ
- ์์ฑ(Props) ์ ์ ๋ ฅ์ผ๋ก ๋ฐ์ React ์๋ฆฌ๋จผํธ๋ฅผ ์์ฑํ์ฌ ๋ฐํ
๐ฏ Props (Properties)๋?
๐น Props์ ๊ฐ๋
- ์ปดํฌ๋ํธ์ ์์ฑ์ ์๋ฏธ
- ์ปดํฌ๋ํธ์ ์ ๋ฌํ ๋ค์ํ ์ ๋ณด๋ฅผ ๋ด์ JavaScript ๊ฐ์ฒด
๐ Props์ ํน์ง
- ์ฝ๊ธฐ ์ ์ฉ (Immutable) โ Props ๊ฐ์ ๋ณ๊ฒฝํ ์ ์์
- ๊ฐ์ Props๊ฐ ๋ค์ด์ค๋ฉด ํญ์ ๊ฐ์ ์๋ฆฌ๋จผํธ๋ฅผ ๋ฐํํด์ผ ํจ
๐น Props ์ฌ์ฉ๋ฒ
- JSX ์ฌ์ฉ ์ โ ํค-๊ฐ ์ ํํ๋ก ์ปดํฌ๋ํธ์ ์ ๋ฌ
- ๋ฌธ์์ด ์ธ์ ๊ฐ(์ ์, ๋ณ์, ๋ค๋ฅธ ์ปดํฌ๋ํธ ๋ฑ) โ {}(์ค๊ดํธ)๋ก ๊ฐ์ธ์ ์ ๋ฌ
- JSX ๋ฏธ์ฌ์ฉ ์ โ createElement() ํจ์์ ๋ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ก Props ๊ฐ์ฒด ์ ๋ฌ
โ๏ธ React ์ปดํฌ๋ํธ ๋ง๋ค๊ธฐ ์ ๋ฆฌ
โ ์ปดํฌ๋ํธ์ ์ข ๋ฅ
- ํจ์ ์ปดํฌ๋ํธ โ ํจ์ ํํ๋ก ๋ ์ปดํฌ๋ํธ
- ํด๋์ค ์ปดํฌ๋ํธ โ ES6์ ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋ง๋ ์ปดํฌ๋ํธ
๐น ์ปดํฌ๋ํธ ์ด๋ฆ ์ง๊ธฐ
- ํญ์ ๋๋ฌธ์๋ก ์์ํด์ผ ํจ
- ์๋ฌธ์๋ก ์์ํ๋ฉด DOM ํ๊ทธ๋ก ์ธ์๋จ
๐ฏ ์ปดํฌ๋ํธ ๋ ๋๋ง
- ์ปดํฌ๋ํธ๋ก๋ถํฐ ์๋ฆฌ๋จผํธ๋ฅผ ์์ฑ โ React DOM์ ์ ๋ฌํ์ฌ ํ๋ฉด์ ํ์
๐ ์ปดํฌ๋ํธ ํ์ฉ๋ฒ
- ์ปดํฌ๋ํธ ํฉ์ฑ โ ์ฌ๋ฌ ๊ฐ์ ์ปดํฌ๋ํธ๋ฅผ ์กฐํฉํ์ฌ ํ๋์ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ฆ
- ์ปดํฌ๋ํธ ์ถ์ถ โ ํฐ ์ปดํฌ๋ํธ์์ ์ผ๋ถ ๊ธฐ๋ฅ์ ๋ถ๋ฆฌํ์ฌ ์๋ก์ด ์ปดํฌ๋ํธ๋ก ๋ง๋ฆ
- ๊ธฐ๋ฅ ๋จ์๋ก ๊ตฌ๋ถํ์ฌ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๋๋ก ์ถ์ถํ๋ ๊ฒ์ด ์ข์