[week_09] React ๋ฌธ๋ฒ• | React-Router-Dom v6, useReducer, useContext

    1. React-Router-Dom ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ v6 1-1. Routes, element Router โžก Routes โžก Route ๊ตฌ์กฐ๋กœ ๊ตฌํ˜„ํ•˜๊ณ , element props๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ Œ๋”๋งํ•  ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค. import { BrowserRouter as Router, Routes, Route } from "react-router-dom"; function App() { return ( ); } 1-2. useNavigate ํŠน์ • ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•  ๋•Œ๋Š” useNavigate ํ›…์„ ์‚ฌ์šฉํ•œ๋‹ค. const navigate = useNavigate() navigate("/login") navigate("/login", {replace: true}) 1-3. path="*" SPA ๋ผ์šฐํŒ…์— ๊ฑธ๋Ÿฌ์ง€์ง€ ์•Š๋Š” ๋งํฌ..

    [week_09] React ์ƒํƒœ ๊ด€๋ฆฌ

    1. ์ƒํƒœ ๊ด€๋ฆฌ ์•ฑ ์ƒ์—์„œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ ๋“ฑ์— ์ €์žฅํ•˜๊ณ  ํ•˜๋‚˜ ์ด์ƒ์˜ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๋Š” ๊ฒƒ ํ•œ ์ปดํฌ๋„ŒํŠธ ์•ˆ์—์„œ์˜ ์ƒํƒœ, ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ์ƒํƒœ, ์ „์ฒด ์•ฑ์˜ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ๋ชจ๋‘ ํฌํ•จ 1-1. MPA์™€ SPA์—์„œ์˜ ์ƒํƒœ ๊ด€๋ฆฌ MPA: ์„œ๋ฒ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•ด ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋ง โžก ํด๋ผ์ด์–ธํŠธ ๋ฐ์ดํ„ฐ์™€ ์„œ๋ฒ„์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ํฐ ์ฐจ์ด๋ฅผ ๊ฐ€์ง€์ง€ ์•Š๋Š”๋‹ค. SPA: ์ž์ฒด์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ–๊ณ , ์„œ๋ฒ„์™€์˜ ๋™๊ธฐํ™”๊ฐ€ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ์„ ์ฒ˜๋ฆฌ. ๊ทธ ์™ธ์˜ ๋ฐ์ดํ„ฐ๋Š” ํด๋ผ์ด์–ธํŠธ๋งŒ์˜ ๋ฐ์ดํ„ฐ๋กœ ์œ ์ง€. 1-2. ์ƒํƒœ ๊ด€๋ฆฌ ๊ธฐ์ˆ ์ด ํ•ด๊ฒฐํ•˜๋Š” ๋ฌธ์ œ๋“ค 1) ๋ฐ์ดํ„ฐ ์บ์‹ฑ๊ณผ ์žฌํ™œ์šฉ SPA์—์„œ ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์‹œ๋งˆ๋‹ค ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋”ฉํ•œ๋‹ค๋ฉด, ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ์ธก๋ฉด์—์„œ MPA๋ฅผ ํฌ๊ฒŒ ๋„˜์–ด์„œ๊ธฐ ํž˜๋“ค๋‹ค. ๋ณ€๊ฒฝ์ด ์žฆ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด, ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹ฑํ•˜๊ณ  ์žฌํ™œ..

    [BE] Passport.js๋ฅผ ํ™œ์šฉํ•œ ๊ฐ„๋‹จํ•œ ํšŒ์›์ธ์ฆ ๊ตฌํ˜„

    1. ํ•„์š”ํ•œ ๋ชจ๋“ˆ ์„ค์น˜ npm install express passport passport-local express-session mongoose passport, passport-local : ํšŒ์›๊ฐ€์ž…๊ณผ ๋กœ๊ทธ์ธ ์„ธ์…˜๊ด€๋ฆฌ๋ฅผ ๋„์™€์ฃผ๋Š” ๋ชจ๋“ˆ express-session : ์„ธ์…˜๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ๋ชจ๋“ˆ 2. app.js ๊ธฐ๋ณธ ์„ธํŒ… const express = require("express"); const app = express(); const passport = require("passport"); var Strategy = require("passport-local"); const session = require("express-session"); const mongoose = require("mongoose")..

    [week_08] React ๊ธฐ์ดˆ โ…ก(2) Hooks

    1. Hook Hook์€ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌ(State)ํ•˜๊ณ , ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ ์ƒํ˜ธ์ž‘์šฉ(Effect)์„ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. ์•ž์„œ ํ•™์Šตํ•œ useState๊ฐ€ ๋ฐ”๋กœ State Hook์ด๋‹ค. Hook์€ ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ(Class Component)๋ฅผ ๋ณด์™„ํ•˜๊ณ , ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ์—์„œ ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ์˜ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด React 16.8 ๋ฒ„์ „์—์„œ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค. โœจ Hook ์œ ์˜์‚ฌํ•ญ 1) Hook์€ Reactํ•จ์ˆ˜(์ปดํฌ๋„ŒํŠธ, Hook) ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. 2) Hook์˜ ์ด๋ฆ„์€ ๋ฐ˜๋“œ์‹œ 'use'๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•œ๋‹ค. 3) ์ตœ์ƒ์œ„ Level์—์„œ๋งŒ Hook์„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, ์ปดํฌ๋„ŒํŠธ ๋‚ด์—์„œ Hook์„ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐ˜๋“œ์‹œ ์ฒซ๋ฒˆ์งธ ์ค‘๊ด„ํ˜ธ({ }) ์•ˆ์—์„œ๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. (๐Ÿ‘‰ if๋ฌธ, for๋ฌธ ์•ˆ์ชฝ ๋˜๋Š” ..

    [week_08] React ๊ธฐ์ดˆ โ…ก (1) ์ด๋ฒคํŠธ

    1. ์ด๋ฒคํŠธ(event) ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์•Œ๋ ค์ฃผ๋Š” HTML ์š”์†Œ์— ๋Œ€ํ•œ ์‚ฌ๊ฑด์˜ ๋ฐœ์ƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์œ ์ €์˜ ํ–‰๋™์— ์˜ํ•ด ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ๊ณ , ๊ฐœ๋ฐœ์ž๊ฐ€ ์˜๋„ํ•œ ๋กœ์ง์— ์˜ํ•ด ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋ฐœ์ƒ๋œ ์ด๋ฒคํŠธ๋ฅผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•ด์„œ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋‹ค์–‘ํ•œ ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ถ”๋ ฅํ•ด์„œ ์•Œ๋ฆด ์ˆ˜ ์žˆ๋‹ค. 1-1. ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ(ํ•ธ๋“ค๋ง) ๋ฐฉ๋ฒ• const App = () => { const handleChange = (event) => { console.log("์ž…๋ ฅ๊ฐ’ : " + event.target.value); } return ( ); }; DOM Element์˜ ๊ฒฝ์šฐ, ํ•ธ๋“ค๋ง ํ•จ์ˆ˜์— ์ด๋ฒคํŠธ object๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌํ•œ๋‹ค. ์ด๋ฒคํŠธ object๋ฅผ ํ™œ์šฉํ•ด์„œ ์ด๋ฒค..

    [CS] AJAX

    1. AJAX๋ž€? Asynchronous Javascript And XML ๋น„๋™๊ธฐ์ ์œผ๋กœ JS๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์™€์„œ, ๋™์ ์œผ๋กœ DOM์„ ๊ฐฑ์‹  ๋ฐ ์กฐ์ž‘ํ•˜๋Š” ์›น ๊ฐœ๋ฐœ ๊ธฐ๋ฒ• 2. ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”๊ฐ€? ์‚ฌ์šฉ์ž๊ฐ€ AJAX๊ฐ€ ์ ์šฉ๋œ UI์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋ฉด, ์„œ๋ฒ„์— AJAX ์š”์ฒญ์„ ๋ณด๋‚ด๊ฒŒ ๋œ๋‹ค. ์„œ๋ฒ„๋Š” DB์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์„œ JS ํŒŒ์ผ์— ์ •์˜๋˜์–ด ์žˆ๋Š” ๋Œ€๋กœ HTML/CSS์™€ ๋ฐ์ดํ„ฐ๋ฅผ ์œตํ•ฉํ•˜์—ฌ ๋งŒ๋“  DOM ๊ฐ์ฒด๋ฅผ UI์— ์—…๋ฐ์ดํŠธ ์‹œํ‚จ๋‹ค. ๋น„๋™๊ธฐ๋กœ ์ด๋ฃจ์–ด์ง€๋ฉฐ, ๊ธฐ์กด์˜ ํŽ˜์ด์ง€๋ฅผ ์ „๋ถ€ ๋กœ๋”ฉํ•˜๋Š” ๋ฐฉ์‹์ด ์•„๋‹Œ ์ผ๋ถ€๋งŒ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. 3. ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€? 3-1. XMLHttpRequest ์ผ๋ฐ˜์ ์œผ๋กœ XMLHttpRequest ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค์–ด ์ธ์Šคํ„ด์Šค์˜ open(), send() ๋“ฑ์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ..

    [React] You are running `create-react-app` 4.0.3, which is behind the latest release (5.0.0). ์˜ค๋ฅ˜ ํ•ด๊ฒฐ

    ์˜ค๋žœ๋งŒ์— React ์‹ค์Šต์„ ์œ„ํ•ด npx create-react-app ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ–ˆ๋”๋‹ˆ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. You are running `create-react-app` 4.0.3, which is behind the latest release (5.0.0). We no longer support global installation of Create React App. Please remove any global installs with one of the following commands: - npm uninstall -g create-react-app - yarn global remove create-react-app The latest instructions for creating a ..

    [week_08] React ๊ธฐ์ดˆ โ… (4) React ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

    1. Create React App (CRA) React ํ”„๋กœ์ ํŠธ๋ฅผ ์†์‰ฝ๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ(Boilerplate) Facebook์—์„œ ์ง์ ‘ ๋งŒ๋“ค์–ด์„œ ๊ด€๋ฆฌํ•œ๋‹ค. ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ์— ํ•„์š”ํ•œ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ๋“ค์„ Command๋กœ ์ œ๊ณตํ•œ๋‹ค. 1-1. Create React App (CRA)์˜ ์žฅ์  1) ๊ฐœ๋ฐœ์ž๊ฐ€ ์˜จ์ „ํžˆ React App ๊ฐœ๋ฐœ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. ์ƒ๋Œ€์ ์œผ๋กœ ๋œ ์ค‘์š”ํ•œ ์ฝ”๋“œ๋Š” ๋…ธ์ถœ๋˜์ง€ ์•Š๋Š”๋‹ค. ๊ฐ•๋ ฅํ•œ Command๋ฅผ ์ง€์›ํ•œ๋‹ค. 2) (๋Œ€๋ถ€๋ถ„์˜) ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ•ด์„๋  ์ˆ˜ ์žˆ๋„๋ก transcompile ์ง€์› Babel ๊ธฐ๋ณธ ๋‚ด์žฅ ๋ฐฐํฌ ์‹œ ์ฝ”๋“œ ๋ฒˆ๋“ค๋ง Webpack ๊ธฐ๋ณธ ๋‚ด์žฅ 2. Node.js / NPM ์†Œ๊ฐœ Create React App์œผ๋กœ React ํ”„๋กœ์ ํŠธ ์‹œ์ž‘ ์‹œ No..