๊ฐ์ธ์ ํ์ต ๋ด์ฉ ๊ธฐ๋ก ์ค, ๊ทนํ ์ผ๋ถ์ ๋ด์ฉ๋ง ์์ฑ๋์์ต๋๋ค.
React ๊ธฐ์ด
List & Key
- ๋ฆฌ์คํธ(List): ๋ฐฐ์ด ๋ฐ์ดํฐ๋ฅผ ๋์ ์ผ๋ก ๋ ๋๋งํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ JSX ์์๋ค์ ์งํฉ React์์๋ ๋ฐฐ์ด์ ๊ฐ ํญ๋ชฉ์ JSX ์๋ฆฌ๋จผํธ๋ก ๋ณํํ์ฌ ํ๋ฉด์ ์ถ๋ ฅํฉ๋๋ค.
- ํค(Key): ๋ฆฌ์กํธ์์ ๊ฐ ๋ฆฌ์คํธ ํญ๋ชฉ์ ๊ณ ์ ํ๊ฒ ์๋ณํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์์ฑ์ ๋๋ค. ํค๋ ๋ฆฌ์กํธ๊ฐ ์ด๋ค ์์๊ฐ ๋ณ๊ฒฝ๋์๋์ง, ์ถ๊ฐ๋์๋์ง, ์ ๊ฑฐ๋์๋์ง๋ฅผ ๋น ๋ฅด๊ฒ ํ์ ํ์ฌ DOM์ ํจ์จ์ ์ผ๋ก ์ ๋ฐ์ดํธํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
Form
๋ฆฌ์กํธ์์ ์ ๋ ฅํผ(input form)์ ์ฌ์ฉ์์ ์ ๋ ฅ์ ๋ฐ์ ์ํ(state)๋ก ๊ด๋ฆฌํ๋ ์ค์ํ ์์์ ๋๋ค. ์ ๋ ฅํผ์ ๋ง๋ค ๋๋ ๋ฆฌ์กํธ์ ์ํ(state)์ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
๋ฆฌ์กํธ์ Shared State (๊ณต์ ์ํ)
Shared State(๊ณต์ ์ํ)๋ ๋ฆฌ์กํธ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ ์ด์์ ์ปดํฌ๋ํธ๊ฐ ๋์ผํ ์ํ๋ฅผ ๊ณต์ ํ ๋ ์ฌ์ฉํ๋ ๊ฐ๋ ์ ๋๋ค. ๋ฆฌ์กํธ๋ ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ(๋ถ๋ชจ → ์์) ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ฅด๋ฏ๋ก, ์ํ๋ฅผ ๊ณต์ ํ๋ ค๋ฉด ๊ณตํต ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์ํ๋ฅผ ๊ด๋ฆฌํ๊ณ ์ด๋ฅผ ์์ ์ปดํฌ๋ํธ์ props๋ก ์ ๋ฌํ๋ ๋ฐฉ์์ด ์ผ๋ฐ์ ์ ๋๋ค.
์ํ ๊ณต์ ๊ฐ ๋ ๋ณต์กํด์ง ๊ฒฝ์ฐ, ๋ค์๊ณผ ๊ฐ์ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค:
useContext / ํ / Redux / Zustand
์ด๋ฌํ ๋ฐฉ๋ฒ๋ค์ ํตํด ์ปดํฌ๋ํธ ๊ฐ์ ์ํ ๊ณต์ ๋ฅผ ๋ณด๋ค ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
๋ฆฌ์กํธ์์ CSS ๊ตฌํ ๋ฐฉ๋ฒ
- JS inline style ์์ฑ
- styled-components ๋ชจ๋ ์ฌ์ฉ
- tailwind css ๋ชจ๋ ์ฌ์ฉ
Context - ์ ์ญ ์ํ๊ด๋ฆฌ
PropsDrilling
ํ๋กญ์ค ๋๋ฆด๋ง(Props Drilling)์ React์ ๊ฐ์ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์์ ์ปดํฌ๋ํธ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ์ค๊ฐ ์ปดํฌ๋ํธ๋ฅผ ๊ฑฐ์ณ ์ต์ข ์ ์ผ๋ก ํ์ํ ํ์ ์ปดํฌ๋ํธ์ ์ ๋ฌํ๋ ๊ณผ์ ์ ์๋ฏธํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ต์์ ์ปดํฌ๋ํธ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ง๋ง, ๊ทธ ๋ฐ์ดํฐ๋ฅผ ์ง์ ์ฌ์ฉํ์ง ์๋ ์ค๊ฐ ์ปดํฌ๋ํธ๋ฅผ ํตํด ๊น์ ๊ณณ์ ์๋ ์ปดํฌ๋ํธ๋ก ์ ๋ฌํด์ผ ํ ๋ ๋ฐ์ํฉ๋๋ค.
์ด ๋ฐฉ์์ ์ปดํฌ๋ํธ ๊ตฌ์กฐ๊ฐ ๋จ์ํ ๋๋ ๋ฌธ์ ๊ฐ ์์ง๋ง, ๊ณ์ธต์ด ๋ณต์กํด์ง๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ์ ์ด ๋ฐ์ํ ์ ์์ต๋๋ค:
๋ถํ์ํ props ์ ๋ฌ: ์ค๊ฐ ์ปดํฌ๋ํธ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ง ์๋๋ผ๋ props๋ฅผ ์ ๋ฌํด์ผ ํ๋ ์ํฉ์ด ์๊น๋๋ค. ์ ์ง๋ณด์ ์ด๋ ค์: ์ปดํฌ๋ํธ ๊ตฌ์กฐ๊ฐ ๋ณต์กํด์ง๋ฉด props์ ํ๋ฆ์ ์ถ์ ํ๊ธฐ ์ด๋ ค์์ ธ ์ ์ง๋ณด์๊ฐ ํ๋ค์ด์ง๋๋ค. ์ฌ์ฌ์ฉ์ฑ ์ ํ: ํน์ props๋ฅผ ํ์๋ก ํ๋ ์ปดํฌ๋ํธ๊ฐ ๋ค๋ฅธ ์ปดํฌ๋ํธ์ ๊ฒฐํฉ๋์ด ์ฌ์ฌ์ฉํ๊ธฐ ์ด๋ ค์์ง ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด React์์๋ Context API๋ฅผ ์ฌ์ฉํ๊ฑฐ๋, Redux, Zustand์ ๊ฐ์ ์ ์ญ ์ํ ๊ด๋ฆฌ ๋๊ตฌ๋ฅผ ๋์ ํ์ฌ ์ปดํฌ๋ํธ ๊ณ์ธต ๊ตฌ์กฐ์ ๋ณต์ก๋๋ฅผ ์ค์ด๋ ๋ฐฉ๋ฒ์ ํ์ฉํ ์ ์์ต๋๋ค.
Chart.js
npm i chart.js react-chart-2
Redux - ์ ์ญ ์ํ๊ด๋ฆฌ
Tailwind CSS ํ๋ก์ ํธ ๋ง๋ค๊ธฐ(Vite)
npm create vite@latest tailwindcss-project -- --template react
HTTP๋?
HTTP(HyperText Transfer Protocol)๋ ๋ธ๋ผ์ฐ์ ์ ์๋ฒ๊ฐ ์๋ก ์ํต์ ํ ์ ์๋๋ก ๋ง๋ค์ด์ง ๊ท์ฝ์ด๋ค.
- ํ์ดํผํ ์คํธ(HTML) ๋ฌธ์๋ฅผ ๊ตํํ๊ธฐ ์ํด ๋ง๋ค์ด์ง protocol(ํต์ ๊ท์ฝ).
- ์ฆ ์น์์์ ๋คํธ์ํฌ๋ก ์๋ฒ๋ผ๋ฆฌ ํต์ ์ ํ ๋ ์ด๋ ํ ํ์์ผ๋ก ์๋ก ํต์ ์ ํ์๊ณ ๊ท์ ํด ๋์ "ํต์ ํ์" ํน์ "ํต์ ๊ตฌ์กฐ" ๋ผ๊ณ ๋ณด๋ฉด ๋๋ค. ํ๋ก ํธ์ค๋ ์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ์ ํต์ ์ ์ฌ์ฉ๋๋ค. ๋ํ ๋ฐฑ์ค๋์ ํ๋ก ํธ์ค๋ ์๋ฒ๊ฐ์์ ํต์ ์๋ ์ฌ์ฉ๋๋ค.
- HTTP๋ TCP/IP ๊ธฐ๋ฐ์ผ๋ก ๋์ด์๋ค.
- HTTP ๊ธฐ๋ณธ์ ์ผ๋ก request(์์ฒญ)/response(์๋ต) ๊ตฌ์กฐ๋ก ๋์ด์๋ค. ํด๋ผ์ด์ธํธ๊ฐ HTTP request๋ฅผ ์๋ฒ์ ๋ณด๋ด๋ฉด ์๋ฒ๋ HTTP response๋ฅผ ๋ณด๋ด๋ ๊ตฌ์กฐ ํด๋ผ์ด์ธํธ์ ์๋ฒ์ ๋ชจ๋ ํต์ ์ด ์์ฒญ๊ณผ ์๋ต์ผ๋ก ์ด๋ฃจ์ด ์ง๋ค.
HTTP๋ ์ด๋ป๊ฒ ์ ํด์ง๊น?
HTTP๋ IETF(์ธํฐ๋ท๊ตญ์ ํ์คํ๊ธฐ๊ตฌ)์์ RFC ๋ฌธ์ ์ฑํ์ ํตํด ์ด๋ฃจ์ด์ง๋ค.
HTTP ํน์ง
- ๋ฉ์ธ์ง ๊ตํ ํํ์ ํ๋กํ ์ฝ: ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๊ณ ์ถ์ ๊ฑธ ์๋ฒ์ ์์ฒญํ๋ฉด ์๋ต์ด ์ด
- ๋น์ฐ๊ฒฐ์ฑ(Connectionless): ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ํ ๋ฒ ์ฐ๊ฒฐ์ ๋งบ์ ํ, ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์๋ฒ๊ฐ ์๋ตํ๋ฉด ๋งบ์๋ ์ฐ๊ฒฐ์ ๋์. ๋ถํน์ ๋ค์์ ํต์ ์ ์ค์ฌ ๋ ๋ง์ ์ฐ๊ฒฐ์ด ๊ฐ๋ฅํ์ง๋ง, ๋์ผํ ์์ฒญ์ ์๋ก ์์ฒญํด์ผ ํจ
- ๋ฌด์ํ(Stateless): ์ด์ ์ํ๋ฅผ ์ ์ง ํ์ง ์์. ์ํ๋ฅผ ๊ธฐ์ตํ๊ธฐ ์ํด์ ์ฟ ํค, ์ธ์ , ํ ํฐ์ด ๋์ ๋จ
REST API๋?
REST API๋ REST๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ง API๋ฅผ ์๋ฏธํฉ๋๋ค.
REST : Representational State Transfer์ ์ฝ์๋ก ์์์ ์ด๋ฆ์ผ๋ก ๊ตฌ๋ถํ์ฌ ํด๋น ์์์ ์ํ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ชจ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
REST API ์ค๊ณ ์์
1. URI๋ ๋์ฌ๋ณด๋ค๋ ๋ช ์ฌ๋ฅผ, ๋๋ฌธ์๋ณด๋ค๋ ์๋ฌธ์๋ฅผ ์ฌ์ฉํ์ฌ์ผ ํ๋ค.
Bad Example http://khj93.com/Running/ **Good Example http://khj93.com/run/**
2. ๋ง์ง๋ง์ ์ฌ๋์ (/)๋ฅผ ํฌํจํ์ง ์๋๋ค.
Bad Example http://khj93.com/test/ **Good Example http://khj93.com/test**
3. ์ธ๋๋ฐ ๋์ ํ์ดํฐ์ ์ฌ์ฉํ๋ค.
Bad Example http://khj93.com/test_blog **Good Example http://khj93.com/test-blog**
4. ํ์ผํ์ฅ์๋ URI์ ํฌํจํ์ง ์๋๋ค.
Bad Example http://khj93.com/photo.jpg **Good Example http://khj93.com/photo**
5. ํ์๋ฅผ ํฌํจํ์ง ์๋๋ค.
Bad Example http://khj93.com/delete-post/1 **Good Example http://khj93.com/post/1**
Node JS
๐ JavaScript ๋ชจ๋ ์์คํ : ES Module(ESM) vs CommonJS(CJS)
JavaScript์๋ ๋ํ์ ์ผ๋ก ๋ ๊ฐ์ง ๋ชจ๋ ์์คํ ์ด ์์ต๋๋ค.
- CommonJS(CJS) → Node.js์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋ชจ๋ ์์คํ
- ES Module(ESM) → ES6(ES2015)์์ ๋์ ๋ ๋ชจ๋ ์์คํ
์ต์คํ๋ ์ค(Express) ํ๋ ์์ํฌ ์๊ฐ
์ต์คํ๋ ์ค ํ๋ ์์ํฌ๋ ์น ์๋ฒ ๊ตฌํ์ ํ์ํ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
๋ผ์ฐํ : URI ๊ฒฝ๋ก์ ๋ฐ๋ฅธ ์์ฒญ ์ฒ๋ฆฌ ๋ฏธ๋ค์จ์ด: ์์ฒญ๊ณผ ์๋ต์ ์ฒ๋ฆฌํ๋ ์ค๊ฐ ๋จ๊ณ์์ ๋ค์ํ ๊ธฐ๋ฅ์ ๋ด๋นํ๋ ๋ชจ๋ ๋ทฐ ํ ํ๋ฆฟ ์์ง: ๋์ ์ธ HTML ํ์ผ ์์ฑ์ ์ํ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ ์ ๊ณต ์ ์ ํ์ผ ์ง์: HTML, CSS, JS, ์ด๋ฏธ์ง(png, jpg, svg), ๋์์(mp4) ํ์ผ ์ง์
์ค์น : sudo npm i express
๋ ธ๋๋ชฌ : ๋ ธ๋ ์๋ฒ ์ฝ๋ ๋ณ๊ฒฝ์(์ ์ฅ) ์๋์ผ๋ก ์๋ฒ ์ฌ๊ตฌ๋ํด์ค. java spring๊ณผ ๋ค๋ฅด๊ฒ ํซํฝ์ค ๊ฐ๋ฅ
์ค์น : npm i -g nodemon
์ฝ๋ ์คํ ์ : nodemon ex11-express-server.js
Same/Cross Origin
์ฐธ๊ณ ์๋ฃ : [Info] Same-origin policy(SOP, ๋์ผ ์ถ์ฒ ์ ์ฑ ) ๋?
[Info] Same-origin policy(SOP, ๋์ผ ์ถ์ฒ ์ ์ฑ ) ๋?
Same-origin policy(SOP, ๋์ผ ์ถ์ฒ ์ ์ฑ ) ๋? ์ฟ ํค(Cookie) & ์ธ์ (Session) ๊ด๋ จํด์ ํ์ธํ ๋ด์ฉ์ด ์์ด์ ๋ค์ ํ๋ฒ ์ฑ ์ ์ฝ์ด ๋ณด๋ ์ค Same-origin policy(SOP, ๋์ผ ์ถ์ฒ ์ ์ฑ ) ๊ฐ๋ ์ ๋ํด์ ํ๋ฒ ๋ ๊ณต๋ถํ ๊ฒธ
happylie.tistory.com
-
6์ฃผ์ฐจ๋ React ์ตํ๊ธฐ ์ค์ต ์งํ์ ๋ง์ด ํ ์ฃผ์๋ค
7์ฃผ์ฐจ๋ถํฐ๋ NodeJS ๋ฐฐ์๋ดค๊ณ , ์ค๊ฐ ํ๋ก์ ํธ ํ ๋ฐฐ์ ์ด ๋์์ ๊ธฐํ์ ์ฌ์ฌ ์์ํ๋ ค๊ณ ํ๊ณ ..
๋
ธ๋js๋ก API ๋ง๋ค๊ธฐ ์ค์ต์ ์งํํ๋๋ฐ ์์ฒญ ์ ๊ธฐํ๊ณ ์ฌ๋ฏธ์์๋ค. (ํ๋ก ํธ ๊ฐ๋ฐ์์ ๋ฐฑ์๋ ์ฒซ๊ฒฝํ)
๊ทธ๋ฆฌ๊ณ 7์ฃผ์ฐจ ๊ธ์์ผ์ ์กธ์ ์์ด ์์ด์ ๊ฒฐ์ํ๋ค..ใ ใ ๋๋์ด ์กธ์ !!
์ด์ ์ค๊ฐ ํ๋ก์ ํธ๊ฐ ๋๋์ ๋ฐ๋ ธ๋ ํฌ์คํ ์ฌ๋ฆฌ๋ ์ค ๐ฅน