| ์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 | 31 |
- ์ฝ๋ฉํ ์คํธ์ฐ์ต
- slice
- Array
- error
- codingtest
- Method
- ์๋ฐ์คํฌ๋ฆฝํธ
- nodejs
- Reduce
- node
- Javascript
- Programmers
- ๋ ธ๋js
- ์ต๊ทค๋ฌ
- Nextjs
- ๋ฐฑ์๋
- ๊ฐ๋ฐ
- indexOf
- CLI
- ์๋ฌ
- npm
- ํ์ ์คํฌ๋ฆฝํธ
- TypeScript
- ๋ ธ๋์ ์ด์์ค
- ๋ง์์ปค๋ฅ์
- angular
- react
- ์ฝ๋ฉํ ์คํธ
- ๋ ธ๋
- ํ๋ก๊ทธ๋๋จธ์ค
- Today
- Total
๋ชฉ๋ก์ ์ฒด ๊ธ (60)
Suzie's Blog
์ปค์๊ฐ ๊น๋นก์ด๋ ํจ๊ณผ๋ฅผ ๊ตฌํํ๋๋ฐ ์ปค์ (|) ๊ฐ ์๊ฒผ๋ค ์์ด์ง ๋๋ง๋ค ๊ธ์๊ฐ ์ข์ฐ๋ก ์ด์ง ์์ง์ด๋ ํ์์ด ์๊น.์ด์ ๋ ์ปค์๊ฐ ํ์๋ ๋ ๊ณต๊ฐ์ ์ฐจ์งํ๊ณ , ์ฌ๋ผ์ง๋ "" (๋น ๋ฌธ์์ด)์ด๋ผ ํด๋น ๊ณต๊ฐ์ด ์์ด์ง๋ฉด์ ์๊ธฐ๋ ํ๋ค๋ฆผ์ด๋ค.์ด๋ด๋ "" ๋์ /u00A0 (non-breaking space)๋ฅผ ๋ฃ์ผ๋ฉด ๋ฌธ์ ๋ฅผ ๊น๋ํ๊ฒ ํด๊ฒฐํ ์ ์๋ค.{showCursor ? "|" : "\u00A0"}\u00A0 ๋ ๋์๋ ์๋ณด์ด์ง๋ง, ๊ณต๊ฐ์ ์ฐจ์งํ๋ ํน์ ๊ณต๋ฐฑ ๋ฌธ์๋ก ์ปค์๊ฐ ์์ด๋ ์๋ฆฌ๋ฅผ ์ ์งํ๊ฒ ํด์ค
as const ๋?as const ๋ ๊ฐ์ ๋ฆฌํฐ๋ด ํ์ (literal type)์ผ๋ก ๊ณ ์ ์ํค๋ TypeScript ๋ฌธ๋ฒ.๋ฆฌํฐ๋ด ํ์ (Literal type) ์ด๋?๊ฐ ์์ฒด๋ฅผ ํ์ ์ผ๋ก ์ฌ์ฉํ๋๊ฒ์ ๋งํจ. ๋ณดํต ๋ณ์์ ํ์ ์ string, number, boolean์ฒ๋ผ ๋์ ํ์ ์ผ๋ก ์ ํด์ง์ง๋ง ๋ฆฌํฐ๋ด ํ์ ์ ํน์ ํ ํ๋์ ๊ฐ๋ง ๊ฐ์ง ์ ์๋๋ก ํ์ ์ ์ ํจ.๊ธฐ๋ณธ์ ์ผ๋ก TypeScript ๋ ๋ณ์๋ฅผ ์ ์ธํ ๋, ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ๋์ ํ์ ์ ์ถ๋ก ํจ.const color = "red"์์ฒ๋ผ ์์ฑํ๋ฉด color์ ํ์ ์ stirng์ผ๋ก ์ถ๋ก ๋จ. ๊ทธ๋ฆฌ๊ณ ์ด๋ค ๋ฌธ์์ด์ด๋ ๋ค์ ๋ฃ๋๊ฒ ๊ฐ๋ฅํ์ง๋ง as const๋ฅผ ์ฌ์ฉํ๋ฉดconst color = "red" as const;color์ ํ์ ์ด "red"๋ก ๊ณ ์ ๋๊ณ ๋ ์ด..
TypeScript ์ ๋ค๋ฆญ ํจ์๋?TypeScript ์์ ์ ๋ค๋ฆญ ํจ์๋ ๋ค์ํ ํ์ ์ ๋ํด ์์ ํ ์ ์๋ ํจ์.์ ๋ค๋ฆญ์ ์ฌ์ฉํ๋ฉด ํจ์์ ์ ๋ ฅ๊ณผ ๋ฐํ๊ฐ์ ํ์ ์ ์ ๋์ ์ผ๋ก ์ ์ ๊ฐ๋ฅ -> ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ ์ง ๋ณด์์ฑ์ ๋์ด๋๋ฐ ํฐ ๋์์ด ๋จ.์ ๋ค๋ฆญ ํจ์ ํน์ง : ํ์ ์ ๋ฏธ๋ฆฌ ์์ง ๋ชปํด๋, ํจ์๊ฐ ์ด๋ค ํ์ ์ ๋ค๋ฃฐ์ง ์ฝ๋๊ฐ ์คํ๋๋ ์์ ์ ๊ฒฐ์ ๊ฐ๋ฅ.์ : ํจ์์ ๋งค๊ฐ๋ณ์๋ ๋ฐํ๊ฐ์ ํ์ ์ ๋์ ์ผ๋ก ์ฒ๋ฆฌํ๊ณ ์ถ์ ๋ ์ ๋ค๋ฆญ ์ฌ์ฉ. ์ ๋ค๋ฆญ์ ํ์ ๋งค๊ฐ๋ณ์๋ก T์ ๊ฐ์ ํ๋ ์ด์คํ๋๋ฅผ ์ฌ์ฉํ์ฌ ํ์ ์ ๋์ ์ผ๋ก ์ ์function identity(value: T):T { return value;}let result = identity(5); // result๋ 'number' ํ์ let result2 = id..
๋ฌธ์ ์ํฉ : Next.js 15์์ i18next๋ฅผ ์ค์นํ์ "TypeError: URL.canParse is not a function"์ค๋ฅ ๋ฐ์.์ด ์๋ฌ๋ "URL.canParse()"๋ผ๋ ํจ์๊ฐ ๋ธ๋ผ์ฐ์ ๋ Node.js ํ๊ฒฝ์์ ์์ง ์ ์์ผ๋ก ์ง์๋์ง ์์์ ๋ฐ์.ํนํ "i18next", "resourcesToBackend" ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ด๋ถ์์ ์ด ํจ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ๋ณ๋๋ก ์ฒ๋ฆฌํด์ฃผ์ง ์์ผ๋ฉด ์ฑ์ด ํฌ๋์๊ฐ ๋จ.๐ก ํด๊ฒฐ ๋ฐฉ๋ฒ : ๊ฐ๋จํ ํด๋ฆฌํ(Polyfill) ์ถ๊ฐํ๊ธฐ๋คํํ ์ด ๋ฌธ์ ๋ "ํด๋ฆฌํ(Polyfill) ์ ํตํด ์ฝ๊ฒ ํด๊ฒฐ ๊ฐ๋ฅ.ํด๋ฆฌํ์ด๋?์ง์๋์ง ์๋ ๊ธฐ๋ฅ์ ํ๋ด ๋ด๋ ์ฝ๋๋ค์ ์ฝ๋๋ฅผ ์ฑ ์ง์ ์ (์: app/layout.tsx ๋๋ app/page.tsx)์๋จ์ ์ถ๊ฐํ๋ฉด ์๋ฌ๋ฉ์ธ..
17 March 2025 (Mon) , Seoul์ผ ๋ ์ ๋ถํฐ ์ค๋นํ๋ ์๊ฐ์ด ๋๋์ด ์ค๊ณ ์ผ ๋ง์๋ค.๋๋ ์บ๋๋ค ์ง + ์ ์ธ๊ณ์ฝ ์ ๋ฆฌ๋ฅผ ๋์์ ์งํํด์ผ ํด์ ์์ธ์ ์ด๊ณ ์๋ ์ง์ ์์ ์ ๋ฆฌํด๋ฒ๋ ค์ผ ํ๋ค.๋น๊ทผ ๊ฑฐ๋ ๋ฐ ๋๋์ผ๋ก ์ ๋ฆฌํ๊ณ ํ๋ฐฐ 3๊ฐ๋ ๋ณธ๊ฐ๋ก ๋ณด๋์ง๋ง ์ฝ์ง ์์๋ค. ๋คํํ ์น๋์์ด ๊ฐ์ ๋น๋ฉ์ ์ด์์ ๋ง์ ๋์์ ์ฃผ์๋ค ๐ฅฒ๊ฐ๊ธฐ ์ง์ ์ด๋ผ ๋งค์ผ ์ฝ์์ด ์์๊ณ ์ง์์๋ ์๊ฐ์ด ๋ง์ด ์๋ค ๋ณด๋ ๋ ํ๋ค์๋ ๊ฒ ๊ฐ๊ธฐ๋.. ๐ ์ ์ธ๊ณ์ฝ์ด 4์ 1์ผ๊น์ง์ฌ์ ์ ์ธ๊ธ์ ๋๋ ค๋ฐ์ง ๋ชปํ๋ฉด ์ด์ฉ์ง ํ๋ฉฐ ๋ถ์ํดํ์ง๋ง ์ผ๋จ.. ๊ทธ๋ฅ ๊ฐ๋ ๊ฑธ๋ก.. ใ ใ ใ ๊ณ ๋ง๊ฒ๋ ์ ์ฃผ์์ ์ฌ๋ผ์จ ์น๊ตฌ์ ์ธ์ฒ๊ณตํญ์์ ๋ง์ง๋ง ๊ณ ๋ฑ์ด์ธํธ ํ์์ ๋จน๊ณ ์๋ณ ์ธ์ฌ ํ ์ ๊ตญ์ฅ(?) ์ผ๋ก ๋ค์ด๊ฐ๋ค.๋ฌด์จ ์ฌ๋๋ค์ด ์์์ผ์ ์ด๋ ๊ฒ ์ฌํ์ ๋ง์ด๊ฐ๋์ง...
์ด๋ฒคํธ ๋ฃจํ(Event Loop)์ ๊ฐ๋ ์ ์ค๋ช ํ๊ณ , ์๋ ์ฝ๋๊ฐ ์คํ๋ ๋ ์ฝ์์ ์ถ๋ ฅ๋๋ ์์๋ฅผ ์์ธกํด๋ณด์ธ์.console.log("A");setTimeout(() => console.log("B"), 0);Promise.resolve().then(() => console.log("C"));console.log("D"); ๋๋ณด๊ธฐ๋๋ณด๊ธฐ๋๋ณด๊ธฐโ ์ ๋ต : "A", "D", "C", "B"- ์ฝ๋๊ฐ ์คํ์ด ๋๊ณ "A" ๊ฐ ์ฒ์ ์คํ๋์ด ์ฝ์์ ์ฐํ.- WebAPI์์ "B" ๊ฐ ์คํ๋๊ณ task queue๋ก ์ด๋- ์์ฒด์ ๋น๋๊ธฐ์ธ Promise๋ microtask queue๋ก ์ด๋- ๋ง์ง๋ง ์ฝ๋๊ฐ ์คํ๋๊ณ "D" ๊ฐ ์ฝ์์ ์ฐํ.- ์ฐ์ ์์๊ฐ microtask queue๊ฐ ์ฐ์ ์ด๋ฏ๋ก "C" ๊ฐ ์ฝ์์ ์ฐํ๊ณ ..
๋ค์ ์ฝ๋๋ฅผ ์คํํ๋ฉด ์ด๋ค ์ถ๋ ฅ์ด ๋์ฌ๊น?async function fetchData() { return "Data fetched!";}fetchData().then(data => console.log(data));console.log("Fetching data...");์ง๋ฌธ : ์ฝ์์ ์ถ๋ ฅ๋๋ ๊ฒฐ๊ณผ๋?๋๋ณด๊ธฐโ ์ ๋ต Fetching data... Data fetched!๐ฌ ์ค๋ช - `fetchData` ํจ์๋ ๋น๋๊ธฐ ํจ์๋ก "Data fetched!" ๋ผ๋ ๊ฐ์ ๊ฐ์ง Promise๋ฅผ return- `fetchData().then(data => console.log(data));` ๋ Promise๊ฐ ์ดํ๋๋ฉด "Data fetched!"๋ฅผ ์ถ๋ ฅํ๊ฒ ๋์ง๋ง, ์ด๋ ๋น๋๊ธฐ์ ์ผ๋ก ์คํ๋จ- ๋ฐ๋ฉด `console..
function test() { var a = 10;}console.log(a);์ ์ฝ๋๋ฅผ ์คํํ๋ฉด ์ด๋ค ๊ฒฐ๊ณผ๊ฐ ๋์ฌ๊น?A) 10B) undefinedC) ReferenceErrorD) null ๋๋ณด๊ธฐโ ์ ๋ต: C (ReferenceError)์ค๋ช var๋ ํจ์ ์ค์ฝํ(Function Scope)๋ฅผ ๊ฐ์ง.var๋ก ์ ์ธํ ๋ณ์๋ ํจ์ ๋ด๋ถ์์๋ง ์ ํจํจ (์ฆ, ํจ์ ๋ฐ๊นฅ์์๋ ์ ๊ทผ ๋ถ๊ฐ๋ฅ!)์ฆ, a๋ test() ํจ์ ๋ด๋ถ์์๋ง ์กด์ฌํ๊ณ ํจ์๊ฐ ๋๋๋ฉด ์ฌ๋ผ์ง.ํจ์ ๋ฐ๊นฅ์์ console.log(a);๋ฅผ ์คํํ๋ฉด a๊ฐ ์ ์๋์ง ์์๊ธฐ ๋๋ฌธ์ ReferenceError๊ฐ ๋ฐ์ํจ.์ค๋ต๋ ธํธ : ๋๋ B undefined ๋ผ๊ณ ์๊ฐํ๋๋ฐ ์๊ฐํด๋ณด๋ฉด ์ ์ ๋์ด์์ง ์๋ ์ํ์ด๊ธฐ๋๋ฌธ์ ReferenceError ๋ก ๋ด์ผํ๋ค
๊ฐ๋ฐํ ๋ ์ ์ฉํ๊ฒ ์ฌ์ฉํ useEventListener hook ์ด๋ค. (Next.js, TypeScript)src > utils > hooks ์ ์ ์ฅ ํ importํ์ฌ ์ฌ์ฉ ํ๋ฉด ์ฝ๋๋ ๊ฐํธํด์ง๊ณ ํธํจ.import { useEffect, useRef } from "react";function useEventListener( eventType: K, handler: (event: WindowEventMap[K]) => void, element: HTMLElement | Document | Window | null = typeof window !== "undefined" ? window : null) { const savedHandler = useRef void | null>(n..
์ต๊ทผ Next.js๋ก ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ์ด๋ฏธ์ง๋ฅผ ์ ์ฅํ๋ ๋ ๊ฐ์ง ๋ฐฉ์์ด ์๋ ๊ฑธ ์๊ฒ ๋์๋ค.1. public ํด๋์ ์ ์ฅํ๊ธฐ2. src/assets ์ ์ ์ฅํ๊ธฐ๋ ์ค ํ๋๋ง ์ฐ๋ฉด ๋๋ ๊ฑฐ ์๋์ผ?๋ผ๋ ์๊ฐ์ด ๋ค์์ง๋ง, ์ํฉ์ ๋ฐ๋ผ ๋ ๋ค ์ฐ๋ ๊ฒ ์ ๋ฆฌํ ์ ์๋ค๋ ๊ฒ์ ์๊ฒ ๋์ด ๊ณต์ ํ๊ณ ์ ํ๋ค. ์ผ๋จ ํน์ง์ ํ๋ก ์ ๋ฆฌํด ๋ณด์๋ค.ํน์งpublicsrc/assets์ฌ์ฉ ๋ฐฉ์URL ์ ๊ทผ ๊ฐ๋ฅ (import ๋ ๊ฐ๋ฅ)Import ๋ก ๋ถ๋ฌ์ด์บ์ฑ ๋ฌธ์ ์ ๋ฐ์ดํธ ๋ ์ด๋ฏธ์ง๊ฐ ์ด์ ์ด๋ฏธ์ง์ ํ์ผ๋ช ์ด ๊ฐ๋ค๋ฉด ์๋ ํ์ผ์ ๋ณด์ฌ์ค ์๋ ์์ํด์๋ ํ์ผ๋ช ์ผ๋ก ์ต์ ํ์ผ๋ง ํ์๋ฒ๋ค๋ง๋ฒ๋ค๋ง ๋์ง ์์๋ฒ๋ค๋ง๊ณผ ์ต์ ํ ์๋์ผ๋ก ์งํ์ฑ๋ฅ๋ฒ๋ค ํฌ๊ธฐ์ ์ํฅ์ ์์ค์์ฃผ ์ฌ์ฉํ๋ฉด ๋ฒ๋ค ํฌ๊ธฐ๊ฐ ์ปค์ง ์ ์์์ต์ ํNext/image ์ ํจ..