์ ์ฒด ๊ธ
-
- [React.js] Context API๋ฅผ ์ด์ฉํ์ฌ ์ ์ญ ์ํ ๊ด๋ฆฌํ๊ธฐContext API๋ฅผ ์ด์ฉํ์ฌ ์ ์ญ ์ํ ๊ด๋ฆฌํ๊ธฐ๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ(React.js)์์ Context API๋ฅผ ์ด์ฉํ์ฌ ์ ์ญ ์ํ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ณธ๋ค.Context API๋ฅผ ์ด์ฉํ๋ฉด ๋ฐ๋ก ํจํค์ง๋ฅผ ์ค์นํ์ง ์๊ณ ๋ ์ ์ญ ์ํ๋ฅผ ๊ด๋ฆฌํ ์ ์๋ค. Context API๊ฐ๋ ์ปดํฌ๋ํธ ํธ๋ฆฌ์์ ์ ์ญ ์ํ๋ฅผ ๋ณด๋ค ์ฝ๊ฒ ๊ณต์ ํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ API์ด ๋ฐฉ๋ฒ์ ์ด์ฉํ๋ฉด, ํ๋กญ ๋๋ฆด๋ง(Props Drilling)์ ํผํ ์ ์๋ค. ๋ฐฉ๋ฒโ context ํ์ผ ์์ฑํ๊ธฐ์ ์ญ์ผ๋ก ์ฌ์ฉํ ์ํ๋ฅผ ์ ์ํ๋ @Context.js@ ํ์ผ์ ์์ฑํ๋ค. ./src/context.jsimport { createContext, useContext, useState } from 'react';// (1) Context ์์ฑํ๊ธฐco..
2 2024.09.11 -
- [React.js] react-toastify ๋ผ์ด๋ธ๋ฌ๋ฆฌreact-toastify ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด๊ฐ๋ฉฐ๊ฐ๋จํ๊ฒ ํ ์คํธ(Toast) ๋ฉ์์ง๋ฅผ ๋์์ผํ ๋ @react-toastify@ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.@react-toastify@ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฌ์ฉ๋ฒ์ ๊ฐ๋จํ๊ฒ ์ ๋ฆฌํด๋ณธ๋ค. react-toastify ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ๋ ๋ฆฌ์กํธ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ์์๊ฒ ์๋ฆผ์ ์ ๊ณตํ๋ ํ ์คํธ ๋ฉ์์ง(Notification)๋ฅผ ์ฝ๊ฒ ๊ตฌํํ ์ ์๊ฒ ํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ํ ์คํ์ผ๊ณผ ์ ๋๋ฉ์ด์ ํจ๊ณผ๋ก ๊ฐ๋จํ๊ฒ ์๋ฆผ์ ๋์ธ ์ ์๋ค.๊ธฐ๋ณธ์ ์ผ๋ก ์ค์ ์ด ๊ฐํธํ๋ฉฐ, ๋ค์ํ ์ฌ์ฉ์ ์ ์ ์ต์ ์ ์ ๊ณตํ์ฌ ์๋ฆผ์ ์ํ๋ ๋๋ก ์ปค์คํฐ๋ง์ด์งํ ์ ์๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น$ npm install react-toastify # yarn add react-toastify ์ฌ..
2024.09.10 -
- [React.js] uuid, nanoid ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉํ๊ธฐ (key)uuid, nanoid ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉํ๊ธฐ (key)๋ค์ด๊ฐ๋ฉฐ๋ค์๊ณผ ๊ฐ์ด @map@์ ์ด์ฉํ์ฌ ์์๋ฅผ ํ๋ํ๋์ฉ ํํํ ๊ฒฝ์ฐ @key@ ๊ฐ์ ์ง์ ํด์ผ ํ๋๋ฐ ์ด๋ค๊ฐ์ @key@ ๊ฐ์ผ๋ก ์ง์ ํด์ผํ ์ง ๋ชจ๋ฅผ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.์ด๋, @uuid@ ๋๋ @nanoid@ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ๋ฉด ์ด ๊ณ ๋ฏผ์ ํด๊ฒฐํ ์ ์๋ค.import { data } from './data.js';export default const App = () => { return ( {data.map((item) => {item.content}} )} uuid ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ๋ @uuid@๋ Universally Unique Identifier ์ ์ฝ์๋ก, ์ ์ธ๊ณ์์ ๊ณ ์ ํ ๊ฐ์ ์์ฑํ ์ ์๋ ์๋ณ์์ด๋ค.@u..
2024.09.09 -
- [React.js] ๋ก์ปฌ ์คํ ๋ฆฌ์ง(LocalStorage)์ ๋ด์ฉ์ ์ ์ฅํ๊ณ , ์ ์ญ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(Redux)์ ๋๊ธฐํ ํ๋ ๋ฐฉ๋ฒ๋ก์ปฌ ์คํ ๋ฆฌ์ง(LocalStorage)์ ๋ด์ฉ์ ์ ์ฅํ๊ณ , ์ ์ญ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(Redux)์ ๋๊ธฐํ ํ๋ ๋ฐฉ๋ฒ๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ(React.js)์์ ํน์ ๋ณ์๋ฅผ ๋ก์ปฌ ์คํ ๋ฆฌ์ง(Local Storage)์ ์ ์ฅํ๊ณ , ์ ์ญ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(Redux)์ ๋๊ธฐํ ์ํค๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ณธ๋ค.์ด๋ ๊ฒ ํจ์ผ๋ก์จ, ์ฌ์ฉ์์ ์ ๋ ฅ์ ๋ฐ์ ํน์ ๋ณ์๋ฅผ ํ๋ฉด์ ํ์ํด์ค์ผ ํ ๊ฒฝ์ฐ ์๋ก๊ณ ์นจ์ ํด๋ ๋์ผํ ๋ด์ฉ์ด ํ์๋๊ฒ ํ ์ ์๋ค. ๋ก์ปฌ ์คํ ๋ฆฌ์ง(Local Storage)๊ฐ๋ ๋ธ๋ผ์ฐ์ ์ ๋ฐ์ดํฐ๋ฅผ ์๊ตฌ์ ์ผ๋ก ์ ์ฅํ ์ ์๋ ๋ฐฉ๋ฒ๋ธ๋ผ์ฐ์ ๊ฐ ๋ซํ๋ ๋ฐ์ดํฐ๊ฐ ์ ์ง๋๋ฉฐ, ๋๋ฉ์ธ๋ณ๋ก ๊ตฌ๋ถ๋์ด ์ ์ฅ๋๋ค.๋ก์ปฌ ์คํ ๋ฆฌ์ง๋ ํค-๊ฐ(Key-Value) ํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ฉฐ, ๋ฐ์ดํฐ๋ ๋ฌธ์์ด ํ์์ผ๋ก๋ง ์ ์ฅํ ์ ์๋ค.๋ฐ๋ผ์ ๊ฐ์ฒด(O..
1 2024.09.07 -
- [Python] try-except ๋ฌธ ์ฌ์ฉํ ๋ ์๋ฌ ๋ฐ์ ์, ์ ์ฒด ์๋ฌ ์ ๋ณด ํ์ ๋ฐฉ๋ฒtry-except ๋ฌธ ์ฌ์ฉํ ๋ ์๋ฌ ๋ฐ์ ์, ์ ์ฒด ์๋ฌ ์ ๋ณด ํ์ ๋ฐฉ๋ฒ๋ค์ด๊ฐ๋ฉฐ@try-except@ ๋ฌธ์ ์ฌ์ฉํ ๋, ์๋ฌ๋ฅผ ํ์ํ๊ณ ์ถ์ ๋๊ฐ ์๋ค.๋ค์๊ณผ ๊ฐ์ด ์๋ฌ๋ฅผ ํ์ํ ๊ฒฝ์ฐ, ์๋ฌ ์ ๋ณด ์ค 1์ค ์ ๋๋ง ์งง๊ฒ ์ถ๋ ฅ๋๋ค.์ด๋ 1์ค์ด ์๋, ์ฌ๋ฌ ์ค์ ๋ชจ๋ ์๋ฌ ์ ๋ณด๊ฐ ํ์๋๋๋ก ํ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ณธ๋ค.try: print(1 / 0)except Exception as e: print(e)division by zero ๋ฐฉ๋ฒ@traceback@ ๋ชจ๋ ์ฌ์ฉํ๊ธฐ@traceback@ ๋ชจ๋์ @import@ํ์ฌ @try-except@ ๋ฌธ์ ์์ธ ์ฒ๋ฆฌ ๋ถ๋ถ์ ๋ค์๊ณผ ๊ฐ์ด ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.import tracebacktry: print(1 / 0)except Exception as e: ..
2 2024.09.07 -
- [JavaScript] fetch() API์ Axios์ ์๋ฌ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ ๋น๊ตfetch() API์ Axios์ ์๋ฌ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ ๋น๊ต๋ค์ด๊ฐ๋ฉฐFetchAPI์ Axios์ ์๋ฌ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ ์ฐจ์ด์ ๋ํด ๊ฐ๋จํ๊ฒ ์ ๋ฆฌํด๋ณธ๋ค. ์ค๋ฅ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ ๋น๊ตfetch() API๊ธฐ๋ณธ์ ์ผ๋ก ๋คํธ์ํฌ ์์ฒญ์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋์๋์ง๋ฅผ ์ํ ์ฝ๋(Status Code)๊ฐ ์๋, ๋คํธ์ํฌ ์ค๋ฅ ์ฌ๋ถ๋ก ํ๋จํ๋ค.์ฆ, ๋คํธ์ํฌ ์ฐ๊ฒฐ์ด ์ ๋๋ก ๋์ด ์๋ฒ์ ์์ฒญ์ด ์ ๋ฌ๋๊ณ , ์๋ฒ๋ก๋ถํฐ ์๋ต์ด ์๋ค๋ฉด, ๊ทธ ์๋ต์ด 200๋ฒ๋(์ฑ๊ณต) ์ํ ์ฝ๋์ธ์ง, 400๋ฒ๋(ํด๋ผ์ด์ธํธ ์ค๋ฅ) ๋๋ 500๋ฒ๋(์๋ฒ ์ค๋ฅ) ์ํ ์ฝ๋์ธ์ง์ ์๊ด์์ด ์์ฒญ์ด '์ฑ๊ณต์ ์ผ๋ก' ์๋ฃ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ๋ค.์ด ๊ฒฝ์ฐ @fetch()@๋ ํ๋ก๋ฏธ์ค(Promise)๋ฅผ ์ฑ๊ณต ์ํ๋ก ๋ฐํํ๋ฉฐ, ์๋ต ๊ฐ์ฒด๋ฅผ @resolve@ํ๋ค.์ด ๋๋ฌธ์ 4xx ๋๋ 5xx์ ..
2024.08.30 -
- [JavaScript] ์ ๊ฐ ์ฐ์ฐ์ (Spread Operator, ...)์ ๊ฐ ์ฐ์ฐ์ (Spread Operator, ...)๋ค์ด๊ฐ๋ฉฐ์๋ฐ์คํฌ๋ฆฝํธ(JavaScript)์์ ์ฌ์ฉํ ์ ์๋ ์ ๊ฐ ์ฐ์ฐ์(Spread Operator, @...@)์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. ์ ๊ฐ ์ฐ์ฐ์(Spread Operator, @...@)๊ฐ๋ ๋ฐฐ์ด(Array)์ด๋ ๊ฐ์ฒด(Object)๋ฅผ ์ฝ๊ฒ ํ์ฅํ๊ฑฐ๋ ๋ณต์ฌํ ์ ์๋ ๊ธฐ๋ฅ๋ฐฐ์ด, ๊ฐ์ฒด, ํจ์ ํธ์ถ์์ ๋ค์ํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.๋ฐฐ์ด์ ๋ณํฉ & ๋ณต์ฌ๊ฐ์ฒด์ ๋ณํฉ & ๋ณต์ฌํจ์ ํธ์ถ ์ ์ธ์ ํ์ฅ์ ๊ฐ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ๋, ์์ ๋ณต์ฌ(Shallow Copy)๊ฐ ์ด๋ฃจ์ด์ง๋ค.ES6(ECMAScript 2015)๋ถํฐ ์ฌ์ฉํ ์ ์๋ค. ์์ ๋ณต์ฌ๋ ๊ฐ์ฒด๋ ๋ฐฐ์ด์ ์ต์์ ์์ค๋ง ๋ณต์ฌํ๋ค. (์ค์ฒฉ๋ ๊ฐ์ฒด๋ ๋ฐฐ์ด์ ์๋ณธ ๋ฐ์ดํฐ์ ๋ํ '์ฐธ์กฐ'๋ฅผ ์ ์งํ๋ค.) ๋ฐ๋ผ์ ์ ๊ฐ ์ฐ์ฐ์๋ฅผ..
2024.08.27 -
- [React.js] ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ 2๊ฐ์ง (JSX, React.createElement)์ปดํฌ๋ํธ๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ 2๊ฐ์ง (JSX, React.createElement)๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ(React.js)์์ ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ 2๊ฐ์ง๋ฅผ ์ ๋ฆฌํด๋ณธ๋ค. ์ปดํฌ๋ํธ ์์ฑ ๋ฐฉ๋ฒโ ํจ์ํ ์ปดํฌ๋ํธfunction Greeting() { return ( hello world );} ํจ์ํ ์ปดํฌ๋ํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํจ์๋ก ์ ์๋๋ฉฐ, JSX(JavaScript XML) ๋ฌธ๋ฒ์ ์ฌ์ฉํ์ฌ UI๋ฅผ ๋ฐํํ๋ค.@@์ @@ ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ UI๋ฅผ ์ ์ํ๋ค.JSX๋ Babel ๊ฐ์ ์ปดํ์ผ๋ฌ๋ฅผ ํตํด @React.createElement@ ํธ์ถ๋ก ๋ณํ๋๋ค.์ฝ๋๊ฐ ๋ ์ง๊ด์ ์ด๊ณ ์ฝ๊ธฐ ์ฌ์ฐ๋ฉฐ, ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ ๋ HTML๊ณผ ์ ์ฌํ ๋ฌธ๋ฒ์ ์ฌ์ฉํ ์ ์๋ค. โก @React.createElement@imp..
2024.08.26 -
- [React.js] ๋ฆฌ์กํธ ์ค๋ํซ(Snippet) ์ ๋ฆฌ๋ฆฌ์กํธ ์ค๋ํซ(Snippet) ์ ๋ฆฌ๋ค์ด๊ฐ๋ฉฐ๋น์ฃผ์ผ ์คํ๋์ค ์ฝ๋(VS Code)์ ๋ฆฌ์กํธ(React.js) ์ค๋ํซ ํ์ฅ(ES7+ React/Redux/React-Native snippets)์ ์ค์นํ ํ ์ฌ์ฉํ ์ ์๋ ์ค๋ํซ๋ค์ ์ ๋ฆฌํด๋ณธ๋ค. ์ค๋ํซ(Snippet)ํ๋ก๊ทธ๋๋ฐ์์ ์์ฃผ ์ฌ์ฉ๋๋ ์ฝ๋ ์กฐ๊ฐ์ด๋ ํ ํ๋ฆฟ์ผ๋ฐ์ ์ผ๋ก ๋ฐ๋ณต์ ์ผ๋ก ์์ฑํด์ผ ํ๋ ์ฝ๋๋ฅผ ๋น ๋ฅด๊ณ ํจ์จ์ ์ผ๋ก ์์ฑํ ์ ์๋๋ก ๋์์ฃผ๋ ๊ธฐ๋ฅ VS Code ํ์ฅ ์ค์น๋ฆฌ์กํธ ์ค๋ํซ์ VS Code์์ ์ฌ์ฉํ๋ ค๋ฉด, ์๋์ ํ์ฅ ํ๋ก๊ทธ๋จ์ ์ค์นํด์ค์ผ ํ๋ค.ES7+ React/Redux/React-Native snippets ES7+ React/Redux/React-Native snippets - Visual Studio MarketplaceExten..
2024.08.26 -
- [React.js] Create React App๊ณผ ViteCreate React App๊ณผ Vite๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ(React.js) ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น ๋ฅด๊ฒ ์ค์ ํ๊ณ ๊ฐ๋ฐํ ์ ์๊ฒ ํด์ฃผ๋ ํด์ธ Create React App๊ณผ Vite์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค.Create React App(CRA)๊ฐ๋ ํ์ด์ค๋ถ(๋ฉํ)์์ ๊ฐ๋ฐํ ๋ฆฌ์กํธ ๊ณต์ ์ ํ๋ฆฌ์ผ์ด์ ์ค์ ๋๊ตฌ๋ฆฌ์กํธ๋ก ์ ํ๋ก์ ํธ๋ฅผ ์์ํ ๋ ํ์ํ ๋ชจ๋ ์ค์ ์ ์๋์ผ๋ก ํด์ฃผ๊ธฐ ๋๋ฌธ์, ๊ฐ๋ฐ์๋ ์ฝ๋ ์์ฑ์ ์ง์คํ ์ ์๋ค. ํน์งZero Configuration๋ณต์กํ ์ค์ ์์ด ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋ค.ํ๋ก์ ํธ ์ค์ , ๋น๋ ๋๊ตฌ(์นํฉ ๋ฑ), Babel ์ค์ ๋ฑ์ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณตํ์ฌ, ๊ฐ๋ฐ์๊ฐ ์ง์ ์ค์ ํ ํ์๊ฐ ์๋ค.Out-of-the-box๊ธฐ๋ณธ์ ์ธ ๋ฆฌ์กํธ ๊ฐ๋ฐ ํ๊ฒฝ์ ๊ฐ์ถ๊ณ ์๋ค.ESLint, Jest, Service Work..
2024.08.26 -
- [JavaScript] for ๋ฌธ ์ ๋ฆฌ (for, for...in, for...of, forEach, for await...of)for ๋ฌธ ์ ๋ฆฌ (for, for...in, for...of, forEach, for await...of)๋ค์ด๊ฐ๋ฉฐ์๋ฐ์คํฌ๋ฆฝํธ(JavaScript)์์ ์ฌ์ฉํ ์ ์๋ for ๋ฌธ(@for@, @for...in@, @for...of@, @forEach@, @for await...of@)์ ๋ํด ๊ฐ๋จํ๊ฒ ์ ๋ฆฌํด๋ณธ๋ค. ์ข ๋ฅโ @for@ ๋ฌธํน์ ํ์๋งํผ ๋ฐ๋ณตํ ๋ ์ฌ์ฉํ๋ค.for (initialization; condition; increment) { // ๋ฐ๋ณตํ ์ฝ๋} ์์ ์ฝ๋for (let i = 0; i โก @for...in@ ๋ฌธ๊ฐ์ฒด์ ์ด๊ฑฐ ๊ฐ๋ฅํ ์์ฑ์ ๋ฐ๋ณตํ ๋ ์ฌ์ฉํ๋ค.๋ฐฐ์ด(Array)์์๋ ์ธ๋ฑ์ค๋ฅผ ๋ฐ๋ณตํ ์ ์์ง๋ง, ์ผ๋ฐ์ ์ผ๋ก ๊ฐ์ฒด(Object)์ ์ฌ์ฉ๋๋ค.for (const key in ob..
2024.08.25 -
- [React.js] ํจ์ํ ์ ๋ฐ์ดํธ์ ์ง์ ์ฐธ์กฐ ์ ๋ฐ์ดํธํจ์ํ ์ ๋ฐ์ดํธ์ ์ง์ ์ฐธ์กฐ ์ ๋ฐ์ดํธ๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ(React.js)์์ ์ํ(Status)๋ฅผ ์ ๋ฐ์ดํธํ ๋, ํจ์ํ ์ ๋ฐ์ดํธ ๋ฐฉ๋ฒ๊ณผ ์ง์ ์ฐธ์กฐ ์ ๋ฐ์ดํธ ๋ฐฉ๋ฒ์ ์ฐจ์ด์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. ํจ์ํ ์ ๋ฐ์ดํธ(Functional Update)setPosts((prevPosts) => [postData, ...prevPosts])์ํ ์ ๋ฐ์ดํธ๊ฐ ์ด์ ์ํ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ด๋ฃจ์ด์ง๋ค.ํจ์ํ ์ ๋ฐ์ดํธ๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ, ๋ค์๊ณผ ๊ฐ์ ์ฅ์ ์ด ์๋ค.์ฅ์ ์ค๋ช ์์ ์ฑ- ๋ฆฌ์กํธ์ ์ํ ์ ๋ฐ์ดํธ๋ ๋น๋๊ธฐ์ ์ผ๋ก ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์, ์ฌ๋ฌ ์ํ ์ ๋ฐ์ดํธ๊ฐ ๋์์ ๋ฐ์ํ ์ ์๋ค.- ์ด๋, ํจ์ํ ์ ๋ฐ์ดํธ ํํ๋ฅผ ์ฌ์ฉํ๋ฉด ์ต์ ์ํ ๊ฐ์ ๋ณด์ฅํ ์ ์๋ค.- @prevPosts@๋ ํญ์ ํ์ฌ ์ํ์ ์ต์ ์ค๋ ์ท์ ์ ๊ณตํ๋ค.๋์์ฑ ์ฒ๋ฆฌ- ์ํ ์ ๋ฐ์ด..
2024.08.22 -
- [React.js] ์กฐ๊ฑด๋ถ ๋ ๋๋ง ๋ฐฉ๋ฒ ์ ๋ฆฌ์กฐ๊ฑด๋ถ ๋ ๋๋ง ๋ฐฉ๋ฒ ์ ๋ฆฌ๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ(React.js)์์์ ์กฐ๊ฑด๋ถ ๋ ๋๋ง ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ณธ๋ค. ์กฐ๊ฑด๋ถ ๋ ๋๋ง(Conditional Rendering)๊ฐ๋ ํน์ ํ ์กฐ๊ฑด์ ๋ฐ๋ผ UI์ ์ผ๋ถ๋ฅผ ๋ณด์ฌ์ฃผ๊ฑฐ๋ ์จ๊ธฐ๋ ๋ฐฉ๋ฒ ๋ฐฉ๋ฒโ ์กฐ๊ฑด๋ถ ์ฐ์ฐ์ / ์ผํญ ์ฐ์ฐ์(? :)์กฐ๊ฑด๋ถ ๋ ๋๋ง์ ์ฝ๊ฒ ๊ตฌํํ ์ ์๋ ๋ฐฉ๋ฒ์กฐ๊ฑด์ด ์ฐธ์ผ ๋๋ ํน์ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ๊ณ , ๊ฑฐ์ง์ผ ๋๋ ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ๊ฑฐ๋ ์๋ฌด ๊ฒ๋ ๋ ๋๋งํ์ง ์๊ฒ ํ ์ ์๋ค.function Example({ isVisible }) { return ( {isVisible ? ์ด ๋ด์ฉ์ ๋ณด์ ๋๋ค! : ์ด ๋ด์ฉ์ ๋ณด์ด์ง ์์ต๋๋ค!} );} โก ๋ ผ๋ฆฌ ์ฐ์ฐ์(&&)๋ ผ๋ฆฌ @&&@ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ์กฐ๊ฑด์ด ์ฐธ์ผ ๋๋ง ๋ ๋๋งํ๋๋ก ํ ์ ์๋ค.์กฐ๊ฑด..
2024.08.22 -
- [TypeScript] ! ์ฐ์ฐ์(Non-null Assertion Operator)! ์ฐ์ฐ์(Non-null Assertion Operator)๋ค์ด๊ฐ๋ฉฐํ์ ์คํฌ๋ฆฝํธ(TypeScript)์์ ์ฌ์ฉ๋๋ @!@ ์ฐ์ฐ์(Non-null Assertion Operator)์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค.์ด ์ฐ์ฐ์๋ ํ์ ์คํฌ๋ฆฝํธ์์๋ง ์ฌ์ฉํ ์ ์๋ค. ! ์ฐ์ฐ์(Non-null Assertion Operator)๊ฐ๋ ์ปดํ์ผ๋ฌ์๊ฒ ํด๋น ํํ์์ด @null@ ๋๋ @undefined@๊ฐ ์๋์ ๋ณด์ฅํ๋ค๊ณ ์๋ฆฌ๋ ์ญํ ์ ํ๋ ์ฐ์ฐ์ ์ฌ์ฉ ์let value: string | null | undefined = "Hello";// ์ฌ๊ธฐ์ ํ์ ์คํฌ๋ฆฝํธ๋ value๊ฐ null ๋๋ undefined์ผ ์ ์๋ค๊ณ ๊ฒฝ๊ณ ํ ์ ์๋ค.let length = value!.length; // ! ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ์ปดํ์ผ๋ฌ ๊ฒฝ๊ณ ๋ฅผ..
2024.08.20 -
- [TypeScript] MODULE_NOT_FOUND (Error: Cannot find module ~\react-scripts\bin\react-scripts.js) ์ค๋ฅ ํด๊ฒฐ ๋ฐฉ๋ฒMODULE_NOT_FOUND (Error: Cannot find module ~\react-scripts\bin\react-scripts.js) ์ค๋ฅ ํด๊ฒฐ ๋ฐฉ๋ฒ๋ค์ด๊ฐ๋ฉฐ์๋์ ๊ฐ์ ํ์ ์คํฌ๋ฆฝํธ(TypeScript) ์ปดํ์ผ ์ ๋ฐ์ํ๋ ๊ฒฝ๋ก ๊ด๋ จ ์ค๋ฅ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ณธ๋ค.> my-react-app@0.1.0 start > react-scripts start 'Learn\react\react-beginner\my-react-app\node_modules\.bin\' is not recognized as an internal or external command, operable program or batch file. node:internal/modules/cjs/loader:1080 throw ..
2024.08.20 -
- [TypeScript] ์ ๋ค๋ฆญ(Generic)์ ๋ค๋ฆญ(Generic)๋ค์ด๊ฐ๋ฉฐํ์ ์คํฌ๋ฆฝํธ(TypeScript)์์ ์ฌ์ฉ๋๋ ์ ๋ค๋ฆญ(Generic)์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. ์ ๋ค๋ฆญ(Generic)๊ฐ๋ ์ ์ฐํ๋ฉด์๋ ํ์ ์์ ์ฑ์ ์ ๊ณตํ๋ ๋ฐฉ๋ฒ์ ๋ค๋ฆญ์ ์ฌ์ฉํ๋ฉด ํจ์๋ ํด๋์ค๋ฅผ ๋ค์ํ ํ์ ๊ณผ ํจ๊ป ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ํ์ ์ ๊ตฌ์ฒด์ ์ผ๋ก ์ง์ ํ ์ ์๋ค. ์ ๋ค๋ฆญ์ ํ์์ฑ์๋์ @insertAtBeginning@ ํจ์๋ฅผ ๋ณด์.์ด ํจ์๋ ๋ฐฐ์ด๊ณผ ๊ฐ์ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์, ๊ฐ์ด ๋ฐฐ์ด์ ๋งจ ์์ ์ถ๊ฐ๋ ์๋ก์ด ๋ฐฐ์ด์ ๋ฐํํ๋ค.function insertAtBeginning(array: any[], value: any) { return [value, ...array];}const updatedArray = insertAtBeginning(demoArray, -1); // [-1,..
2024.08.20 -
- [TypeScript] ํ์ ์คํฌ๋ฆฝํธ์ ์๋ฃํ(DataType)ํ์ ์คํฌ๋ฆฝํธ์ ์๋ฃํ(TypeScript)๋ค์ด๊ฐ๋ฉฐํ์ ์คํฌ๋ฆฝํธ(TypeScript)์์ ์ฌ์ฉ๋๋ ์๋ฃํ(DataType)์ ๊ฐ๋จํ๊ฒ ์ ๋ฆฌํด๋ณธ๋ค. ํ์ ์คํฌ๋ฆฝํธ์ ์๋ฃํโ ์์ ์๋ฃํ(Primitives)@number@ : ์ซ์ํ (์ ์, ์์ ๋ฑ)@string@ : ๋ฌธ์์ด @boolean@: @true@ ๋๋ @false@ ๊ฐ@null@, @undefined@ : ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ํ์ ์ ์๋ธํ์ ์ผ๋ก ์ทจ๊ธ๋๋ค.// (1) ์ซ์let age: number;age = 25;// => let age: number = 25;// (2) ๋ฌธ์์ดlet name: string;name = "Peter";// => let name: string = "Peter";// (3) Booleanlet isActive: boolea..
2024.08.20 -
- [MongoDB] ํ์ด์ฌ(Python)์ผ๋ก MongoDB ์ฌ์ฉํ๊ธฐ (pymongo)ํ์ด์ฌ(Python)์ผ๋ก MongoDB ์ฌ์ฉํ๊ธฐ (pymongo)๋ค์ด๊ฐ๋ฉฐํ์ด์ฌ(Python)์ผ๋ก MongoDB๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๊ฐ๋จํ๊ฒ ์ ๋ฆฌํด๋ณธ๋ค. MongoDB๊ฐ๋ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐํ ์คํค๋ง์ JSON๊ณผ ์ ์ฌํ ๋ฌธ์ ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํ๋ค.ํ์ด์ฌ(Python)์์ MongoDB๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด @pymongo@ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.@pymongo@ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ MongoDB์์ ์ํธ์์ฉ์ ๊ฐ๋จํ๊ฒ ํด์ฃผ๋ ํ์ด์ฌ ํด๋ผ์ด์ธํธ์ด๋ค.MongoDB์์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด์ ์ปฌ๋ ์ (Collection)์ด๋ผ๋ ๋จ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค. ๋ ์ปฌ๋ ์ ์์๋ ๋ฌธ์(Document)๊ฐ ๋ค์ด๊ฐ๋ค. (๋ฐ์ดํฐ) ์ค์นํ๊ธฐํ์ด์ฌ์์ MongoDB๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ @pymongo@ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํด์ค์ผ ํ๋ค.$ pip in..
2024.08.14 -
- [VS Code] ๊ฒ์ ์, ํน์ ํด๋๋ฅผ ๊ฒ์ ๋ฒ์์์ ์ ์ธ์ํค๋ ๋ฐฉ๋ฒ๊ฒ์ ์, ํน์ ํด๋๋ฅผ ๊ฒ์ ๋ฒ์์์ ์ ์ธ์ํค๋ ๋ฐฉ๋ฒ๋ค์ด๊ฐ๋ฉฐVS Code์์ ๊ฒ์์ ํ ๋ @node_modules@ ๋ฑ ํน์ ํด๋๋ฅผ ๊ฒ์ ๋ฒ์์์ ์ ์ธํ๊ณ ์ถ์ ๋๊ฐ ์๋ค.์ ์ญ์ ์ผ๋ก ์ค์ ํ๋ ๋ฐฉ๋ฒ๊ณผ ํ๋ก์ ํธ ๋ณ๋ก ํน์ ํด๋๋ฅผ ๊ฒ์ ๋ฒ์์์ ์ ์ธ์ํค๋ ๋ฐฉ๋ฒ์ด ์กด์ฌํ๋ค. ๋ฐฉ๋ฒVS Code ์ค์ ํ์ผ์ธ @settings.json@ ํ์ผ์ @search.exclude@ํค์ ๊ฐ์ ์ค์ ํด์ฃผ๋ฉด ๋๋ค. โ ์ ์ญ์ ์ผ๋ก ํน์ ํด๋๋ฅผ ๊ฒ์ ๋ฒ์์์ ์ ์ธ์ํค๊ธฐVS Code๋ฅผ ์ด์ฉํ์ฌ ๊ฒ์์ ํ ๋, ํ๋ก์ ํธ์ ๊ด๊ณ ์์ด ์ ์ญ์ ์ผ๋ก ํน์ ํด๋๋ฅผ ๊ฒ์ ๋ฒ์์์ ์ ์ธ์ํค๋ ๋ฐฉ๋ฒ์ด๋ค.@[Ctrl]@ + @[Shift]@ + @[P]@๋ฅผ ๋๋ฌ ๋ช ๋ น ํ๋ ํธ(Command Palette)๋ฅผ ์คํํ๋ค.@Preferences: Open U..
2 2024.08.14 -
- [React.js] Compound Component ํจํดCompound Component ํจํด๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ(React.js)์์ ์์ฃผ ์ฌ์ฉ๋๋ ๋์์ธ ํจํด(Design Pattern) ์ค ํ๋์ธ Compound Component ํจํด์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. Compound Component ํจํด๊ฐ๋ ์๋ก ๊ด๋ จ๋ ์ฌ๋ฌ ๊ฐ์ ์ปดํฌ๋ํธ๋ฅผ ํ๋์ ๋ถ๋ชจ ์ปดํฌ๋ํธ ์์ ์บก์ํํ๋ ๋ฐฉ์์ปดํ์ด๋ ์ปดํฌ๋ํธ์ ์ฃผ์ ์์ด๋์ด๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค(UI)๋ฅผ ๊ตฌ์ฑํ๋ ์ฌ๋ฌ ์์ ์ปดํฌ๋ํธ๋ฅผ ํ๋์ ์์ ์ปดํฌ๋ํธ ์์์ ์กฐํฉํ์ฌ ๋ ๋ณต์กํ UI๋ฅผ ๋ง๋๋ ๊ฒ์ด๋ค. Coompound Component ํจํด์ ์ ์ฉ ์ : @ - @ Option 1 Option 2 Option 3 Option 4 ์ฅ์ ๋์ผํ ์ปดํฌ๋ํธ๋ฅผ ๋ค์ํ ๋ฐฉ์์ผ๋ก ์ฌ์ฌ์ฉํ ์ ์๋ค.์ปดํฌ๋ํธ์ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๋ณ..
2024.08.12 -
- [React.js] Framer Motion ๋ผ์ด๋ธ๋ฌ๋ฆฌFramer Motion ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด๊ฐ๋ฉฐFramer Motion ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. Framer Motion๊ฐ๋ ์ธํฐ๋ํฐ๋ธ ์น ์ ๋๋ฉ์ด์ ๊ณผ UI ๋์์ธ์ ์ฝ๊ฒ ๊ตฌํํ ์ ์๋๋ก ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฆฌ์กํธ ํ๋ ์์ํฌ์ ํจ๊ป ์ฌ์ฉ๋๋ฉฐ, ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๊ฐ ์ ๋๋ฉ์ด์ ์ ๋ ์ง๊ด์ ์ด๊ณ ํจ์จ์ ์ผ๋ก ๋ง๋ค ์ ์๊ฒ ๋์์ค๋ค.๊ฐ๋ ฅํ API๋ฅผ ์ ๊ณตํ์ฌ ๋ณต์กํ ์ ๋๋ฉ์ด์ ์ ์ฝ๊ฒ ์์ฑํ ์ ์๊ฒ ํด์ฃผ๋ฉฐ, ์ฝ๋ ๊ธฐ๋ฐ์ ์ ๋๋ฉ์ด์ ์ ๋ง๋ค ๋ ์์ฐ์ฑ์ ๋์ฌ์ค๋ค. ์ค์น$ npm install framer-motion # yarn add framer-motion ์ฃผ์ ๊ธฐ๋ฅ๊ธฐ๋ณธ์ ์ธ ๋ชจ์ ์ ์ฝ๊ฒ ์ ์ฉํ ์ ์๋ค.์์น, ํฌ๊ธฐ, ๋ถํฌ๋ช ๋ ๋ฑ์ ์์ฑ์ ์ ๋๋ฉ์ด์ ํํ ์ ์๋ค.๋๋๊ทธ์ ๊ฐ์ ์ธํฐ๋์ ์ ์์ฝ๊ฒ ๊ตฌํํ ์ ์๋ค.์๋ฅผ..
2024.08.11 -
- [Next.js] ์ ์ ์์ฑ(Static Generation)๊ณผ ์๋ฒ์ฌ์ด๋ ๋ ๋๋ง(Server-side Rendering)์ ์ ์์ฑ(Static Generation)๊ณผ ์๋ฒ์ฌ์ด๋ ๋ ๋๋ง(Server-side Rendering)๋ค์ด๊ฐ๋ฉฐ์ฌ์ ๋ ๋๋ง ๋ฐฉ๋ฒ์ธ ์ ์ ์์ฑ(Static Generation)๊ณผ ์๋ฒ์ฌ์ด๋ ๋ ๋๋ง(Server-side Rendering)์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. ์ ์ ์์ฑ(Static Generation)๊ฐ๋ ์น ํ์ด์ง๋ฅผ ๋ฏธ๋ฆฌ ์์ฑํ์ฌ HTML ํ์ผ๋ก ์ ์ฅํ๋ ๋ฐฉ์์น ์ฌ์ดํธ์ ๋น๋ ๋จ๊ณ์์ ๋ชจ๋ ํ์ด์ง๊ฐ ์ฌ์ ์ ๋ ๋๋ง๋๋ฉฐ, ์ฌ์ฉ์๊ฐ ํ์ด์ง๋ฅผ ์์ฒญํ ๋ ์๋ฒ์์ ๋ฏธ๋ฆฌ ์์ฑ๋ HTML ํ์ผ์ ์ฆ์ ์ ๊ณตํ๋ ๋ฐฉ์๋น ๋ฅธ ๋ก๋ฉ ์๋์ ์๋ฒ ๋ถํ ๊ฐ์๋ฅผ ์ํด ์ฌ์ฉSSG(Static Site Generation)์ด๋ผ๊ณ ๋ ํ๋ค. ์ฅ์ ํ์ด์ง๊ฐ ๋ฏธ๋ฆฌ ์์ฑ๋์ด ์์ผ๋ฏ๋ก, ์ฌ์ฉ์๋ ๋น ๋ฅด๊ฒ ํ์ด์ง๋ฅผ ๋ณผ ์ ์๋ค. (๋น ๋ฅธ ํ์ด์ง ๋ก๋ฉ)์์ฒญ..
2024.08.08 -
- [Next.js] ๋ฉํ๋ฐ์ดํฐ(Metadata) ์ถ๊ฐํ๊ธฐ๋ฉํ๋ฐ์ดํฐ(Metadata) ์ถ๊ฐํ๊ธฐ๋ค์ด๊ฐ๋ฉฐNext.js์์ ์ปดํฌ๋ํธ์ ๋ฉํ๋ฐ์ดํฐ(Metadata)๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ณธ๋ค. ๋ฉํ๋ฐ์ดํฐ(Metadata)์นํ์ด์ง์ ๋ํ ์ถ๊ฐ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ๋ฐ์ดํฐ์ฃผ๋ก HTML ๋ฌธ์์ @@ ํ๊ทธ ์์ ํฌํจ๋์ด ์์ผ๋ฉฐ, ๊ฒ์ ์์ง ์ต์ ํ(SEO), ์์ ๋ฏธ๋์ด ๊ณต์ , ๋ธ๋ผ์ฐ์ ์ค์ ๋ฑ ์ฌ๋ฌ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋๋ค. ๋ฉํ๋ฐ์ดํฐ ์ถ๊ฐํ๊ธฐ์ ์ ํ์ด์ง(Static Page)์ ๋์ ํ์ด์ง(Dynamic Page)์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ด ๋ค๋ฅด๋ค. ์ ์ ํ์ด์ง๋ฐฉ๋ฒํ์ด์ง๋ ๋ ์ด์์ ํ์ผ์ @metadata@๋ผ๋ ์ด๋ฆ์ ์์๋ฅผ ๋ด๋ณด๋ด๋ ๋ฐฉ์์ ํตํด ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ค์ ํ ์ ์๋ค.export const metadata = { title: 'All Meals', descriptio..
2024.08.07 -
- [React.js] Suspense ์ปดํฌ๋ํธSuspense ์ปดํฌ๋ํธ๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ(React.js)์์ ์ฌ์ฉ๋๋ @Suspense@ ์ปดํฌ๋ํธ์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. Suspense ์ปดํฌ๋ํธ๊ฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น๋๊ธฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ๊ด๋ฆฌํ๊ณ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํ๊ธฐ ์ํด ๋์ ๋ ๊ธฐ๋ฅ์ฃผ๋ก ๋ฐ์ดํฐ ๋ก๋ฉ ์ํ๋ฅผ ์ฒ๋ฆฌํ๋๋ฐ ์ฌ์ฉ๋๋ค.์ด ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋๊ธฐ ๋ฐ์ดํฐ๊ฐ ๋ก๋ฉ๋ ๋ ์ฌ์ฉ์์๊ฒ ๋ก๋ฉ ์คํผ๋(Spinner)๋ ๋์ฒด ์ปจํ ์ธ ๋ฅผ ๋ณด์ฌ์ค ์ ์๋ค. ์ฌ์ฉ๋ฒ@Suspense@ ์ปดํฌ๋ํธ๋ ์ฃผ๋ก ๋ค๋ฅธ ๋น๋๊ธฐ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ธ๋ ์ฉ๋๋ก ์ฌ์ฉ๋๋ค.@Suspense@๋ @fallback@ ์ด๋ผ๋ ํ๋กํผํฐ๋ฅผ ํตํด ๋ก๋ฉ ์ค์ ๋ณด์ฌ์ค ์ปจํ ์ธ ๋ฅผ ์ง์ ํ ์ ์๋ค.Loading...}> ์ฌ์ฉ ์ ์ฃผ์ํ ์ @Suspense@๋ ํด๋ผ์ด์ธํธ ์ธก ๋ ๋๋ง์์ ๋์ํ๋ค.์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง์..
2024.08.06 -
- [Next.js] ์๋ฒ ์ปดํฌ๋ํธ์ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ์๋ฒ ์ปดํฌ๋ํธ์ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ค์ด๊ฐ๋ฉฐNext.js๋ ์๋ฒ ์ปดํฌ๋ํธ์ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ์ ๊ฐ๋ ์ ๋์ ํ ๋ฆฌ์กํธ ๊ธฐ๋ฐ์ ํ์คํ(Full-Stack) ํ๋ ์์ํฌ์ด๋ค.Next.js๋ ๋จ์ํ ํ๋ก ํธ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ ๋ฆฌ์กํธ๋ฅผ ๋์ด ์๋ฒ ์ธก์์๋ ์ฝ๋๋ฅผ ์คํํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ์๋ฒ ์ปดํฌ๋ํธ๊ฐ๋ Next.js ํ๋ก์ ํธ์์๋ ๋ชจ๋ ๋ฆฌ์กํธ ์ปดํฌ๋ํธ๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ฒ์์ ๋ ๋๋ง ๋๋ค.์ด ์ปดํฌ๋ํธ๋ค์ ์๋ฒ ์ปดํฌ๋ํธ๋ผ๊ณ ํ๋ฉฐ, ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ ์๋ฒ์์ ์คํ๋๋ค. ์๋ค์๊ณผ ๊ฐ์ด ์ปดํฌ๋ํธ์ ๋ก๊ทธ๋ฅผ ์ถ๋ ฅํ๋ฉด, ์น ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ(ํด๋ผ์ด์ธํธ ๋จ)๊ฐ ์๋, IDE(์๋ฒ ๋จ)์ ํฐ๋ฏธ๋์์ ๋ก๊ทธ๋ฅผ ํ์ธํ ์ ์๋ค. ์ฅ์ ์ฑ๋ฅ ํฅ์ํด๋ผ์ด์ธํธ ์ธก์์ ๋ค์ด๋ก๋ํด์ผ ํ ์๋ฐ์คํฌ๋ฆฝํธ(JS) ์ฝ๋๊ฐ ์ค์ด๋ ๋ค. SEO ๊ฐ์ ์๋ฒ ๋จ์..
2024.08.05 -
- [Next.js] Image ์ปดํฌ๋ํธImage ์ปดํฌ๋ํธ๋ค์ด๊ฐ๋ฉฐNext.js์์ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณตํ๋ Image ์ปดํฌ๋ํธ์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค. Image ์ปดํฌ๋ํธ๊ฐ๋ Next.js์์ ๋ค์ํ ํผํฌ๋จผ์ค ๊ธฐ๋ฅ๊ณผ ํธ๋ฆฌํ ์ค์ ์ ์ง์ํ๋ ์ปดํฌ๋ํธ ์ด๋ฏธ์ง ์ปดํฌ๋ํธ๋ฅผ ์ด์ฉํ๋ฉด ์ด๋ฏธ์ง ๋ถ๋ฌ์ค๊ธฐ ์์ ์ ์ต์ ํํ ์ ์๋ค. ๋ํ ์ด๋ฏธ์ง ํฌ๊ธฐ ์กฐ์ , ์ง์ฐ ๋ก๋ฉ(Lazy Loading)์ ์ง์ํ๋ฉฐ, WebP์ ๊ฐ์ ์ต์ ์ด๋ฏธ์ง ํ์์ด ์๋์ผ๋ก ์ฒ๋ฆฌ๋๋ค. ๋ค์ํ ๊ธฐ๊ธฐ์ ํ๋ฉด ํฌ๊ธฐ์ ๋ง๊ฒ ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์ ๋์ ์ผ๋ก ์กฐ์ ํ ์ ์๋ค. ์ฌ์ฉ ๋ฐฉ๋ฒ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ@next/image@ ๋ชจ๋์ ๋ถ๋ฌ์์ ์ฌ์ฉํ๋ค.import Image from 'next/image';export default function Home() { return ( Next.js Image E..
2024.08.05 -
- [VS Code] Cannot find module 'next/babel' ์ค๋ฅ ํด๊ฒฐํ๊ธฐ (Next.js)Cannot find module 'next/babel' ์ค๋ฅ ํด๊ฒฐํ๊ธฐ (Next.js)๋ค์ด๊ฐ๋ฉฐVS Code์์ Next.js ํ๋ก์ ํธ๋ฅผ ์์ ํ ๋ ์๋์ ๊ฐ์ด ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ณธ๋ค. ๋ฐฉ๋ฒํ๋ก์ ํธ์ ์ต์์ ๊ฒฝ๋ก์ @.babelrc@ ํ์ผ์ ์์ฑํ๊ณ , ํ์ผ ์์ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ๋ค. /.babelrc{ "presets": ["next/babel"], "plugins": []} ๊ทธ๋ฆฌ๊ณ ํ๋ก์ ํธ์ ์ต์์ ๊ฒฝ๋ก์ ์๋ @.eslintrc.json@ ํ์ผ์ ์ด๊ณ ๋ค์๊ณผ ๊ฐ์ด ๋ด์ฉ์ ์์ ํด์ค๋ค. /.eslintrc.json@extends@์ ๊ฐ(Value)์ ๋ฐฐ์ด(Array) ํํ๋ก ๋ง๋ค์ด์ฃผ๊ณ , @"next/babel"@ ๊ฐ์ ๋ฐฐ์ด์ ๋ฃ์ด์ค๋ค.{ "extends": ["nex..
2024.08.05 -
- [React.js] ๋๊ด์ ์ ๋ฐ์ดํธ(Optimistic Updates) (React Query)๋๊ด์ ์ ๋ฐ์ดํธ(Optimistic Updates) (React Query)๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ ์ฟผ๋ฆฌ(React Query)์์ ์ฌ์ฉ๋๋ ๋๊ด์ ์ ๋ฐ์ดํธ(Optimistic Updates)์ ๋ํ์ฌ ์ ๋ฆฌํด๋ณธ๋ค. ๋๊ด์ ์ ๋ฐ์ดํธ(Optimistic Updating)๊ฐ๋ ๋ฐ์ดํฐ๊ฐ ์ค์ ์๋ฒ์ ๋ฐ์๋๊ธฐ ์ ์ ๋ฏธ๋ฆฌ UI์ ๋ฐ์ํ์ฌ ์ฌ์ฉ์ ๊ฒฝํ(UX)์ ํฅ์์ํค๋ ๊ธฐ๋ฒ์ฌ์ฉ์๊ฐ ์๋ฒ ์๋ต์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ ์ฆ๊ฐ์ ์ธ ํผ๋๋ฐฑ์ ๋ฐ์ ์ ์๊ฒ ํด์ค๋ค. ์ฃผ์ ๋จ๊ณโ ๋ณ๊ฒฝ ์ ์ํ ์ ์ฅ๋๊ด์ ์ ๋ฐ์ดํธ๋ฅผ ์ํํ๊ธฐ ์ ์, ํ์ฌ ์ํ๋ฅผ ์ ์ฅํ๋ค.์ด ์์ ์ ์๋ฒ ์์ฒญ์ด ์คํจํ์ ๊ฒฝ์ฐ ์๋ ์ํ๋ก ๋กค๋ฐฑ(Rollback)ํ๊ธฐ ์ํด ํ์ํ๋ค. โก ๋๊ด์ ์ํ ์ ๋ฐ์ดํธ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ธฐ ์ ์, ๋ฆฌ์กํธ ์ฟผ๋ฆฌ์ @queryClient.setQu..
2024.07.10 -
- [React.js] ๋ฆฌ์กํธ ์ฟผ๋ฆฌ(Tanstack Query, React Query)๋ฆฌ์กํธ ์ฟผ๋ฆฌ(Tanstack Query, React Query)๋ค์ด๊ฐ๋ฉฐReact Query๋ผ๊ณ ๋ถ๋ฆฐ Tanstack Query ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํด ์ ๋ฆฌํด๋ณธ๋ค.Tanstack Query(React Query)๊ฐ๋ ๋ฆฌ์กํธ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์๋ฒ ์ํ(๋ฐ์ดํฐ)๋ฅผ ์ฝ๊ฒ ๊ด๋ฆฌํ๊ณ ์กฐ์ํ ์ ์๋๋ก ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌReact Query๊ฐ 2022๋ ์ด์ Tanstack Query๋ก ์ด๋ฆ์ด ๋ณ๊ฒฝ๋์๋ค.React Query๊ฐ ํฌํจ๋ Tanstack ์ํ๊ณ๋ฅผ ํ์ฅํ๊ณ , ๋ค์ํ ํ๋ ์์ํฌ์ ํ๋ซํผ์์ ์ฌ์ฉํ ์ ์๋ ๋ฒ์ฉ ๋ฐ์ดํฐ ํ์นญ ๋ฐ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ชฉํ๋ก ํ๊ธฐ ์ํด์ ์๋ค๊ณ ํ๋ค.Tanstack Query๋ ์ด์ React๋ฟ๋ง ์๋๋ผ Vue, Svelte, Solid์ ๊ฐ์ ๋ค๋ฅธ ํ๋ ์์ํฌ์ ๋ํ ์ง์๋ ํฌํจํ๊ณ ..
2024.07.09 -
- [React.js] ์ง์ฐ ๋ก๋ฉ(Lazy Loading)์ง์ฐ ๋ก๋ฉ(Lazy Loading)๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ(React.js)์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ๊ธฐ ์ ์ ์ฝ๋ ์ต์ ํ ์์ ์ ํด์ฃผ์ด์ผ ํ๋๋ฐ, ์ด๋ ์ง์ฐ ๋ก๋ฉ(Lazy Loading)์ ํ์ฉํ ์ ์๋ค.์ง์ฐ ๋ก๋ฉ(Lazy Loading)์ด ๋ฌด์์ธ์ง ๊ฐ๋จํ ์ ๋ฆฌํด๋ณธ๋ค. ์ง์ฐ ๋ก๋ฉ(Lazy Loading)๊ฐ๋ ํ์ํ ์์ ์ ํน์ ์ปดํฌ๋ํธ๋ ๋ชจ๋์ ๋ก๋ํ์ฌ ์ด๊ธฐ ๋ก๋ฉ ์๊ฐ์ ์ค์ด๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ํฅ์์ํค๋ ๊ธฐ์ ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ์ด๊ธฐ ๋ก๋ฉ ์ ๋ถํ์ํ ์ฝ๋๊ฐ ๋ก๋๋์ง ์์ผ๋ฉฐ, ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํ ์ ์๋ค. ๊ธฐ๋ณธ์ ์ธ ์ฌ์ฉ ๋ฐฉ๋ฒ@React.lazy@์ @Suspense@๋ฅผ ์ฌ์ฉํ๋ฉด ์ปดํฌ๋ํธ๋ฅผ ๋์ ์ผ๋ก @import@ํ๊ณ ๋ก๋ฉ์ด ์๋ฃ๋ ๋๊น์ง ๋์ฒด UI(fallback)๋ฅผ ํ์ํ ์ ์๋ค. โ ์ปดํฌ๋ํธ ๋์ im..
2024.07.08