๊ด€๋ฆฌ ๋ฉ”๋‰ด

๋ชฉ๋ก์ „์ฒด ๊ธ€ (60)

Suzie's Blog

์ŠคํŽ˜์ด์Šค ๋Œ€์‹  /u00A0 || ์ปค์„œ ํšจ๊ณผ ์ถ”๊ฐ€ ํ›„ ๊ธ€ ํ”๋“ค๋ฆผ ๋ฐฉ์ง€ ๊ฟ€ํ…œ

์ปค์„œ๊ฐ€ ๊นœ๋นก์ด๋Š” ํšจ๊ณผ๋ฅผ ๊ตฌํ˜„ํ–ˆ๋Š”๋ฐ ์ปค์„œ (|) ๊ฐ€ ์ƒ๊ฒผ๋‹ค ์—†์–ด์งˆ ๋•Œ๋งˆ๋‹ค ๊ธ€์ž๊ฐ€ ์ขŒ์šฐ๋กœ ์‚ด์ง ์›€์ง์ด๋Š” ํ˜„์ƒ์ด ์ƒ๊น€.์ด์œ ๋Š” ์ปค์„œ๊ฐ€ ํ‘œ์‹œ๋  ๋•Œ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜๊ณ , ์‚ฌ๋ผ์งˆ๋•Œ "" (๋นˆ ๋ฌธ์ž์—ด)์ด๋ผ ํ•ด๋‹น ๊ณต๊ฐ„์ด ์—†์–ด์ง€๋ฉด์„œ ์ƒ๊ธฐ๋Š” ํ”๋“ค๋ฆผ์ด๋‹ค.์ด๋Ÿด๋•Œ "" ๋Œ€์‹  /u00A0 (non-breaking space)๋ฅผ ๋„ฃ์œผ๋ฉด ๋ฌธ์ œ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.{showCursor ? "|" : "\u00A0"}\u00A0 ๋Š” ๋ˆˆ์—๋Š” ์•ˆ๋ณด์ด์ง€๋งŒ, ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜๋Š” ํŠน์ˆ˜ ๊ณต๋ฐฑ ๋ฌธ์ž๋กœ ์ปค์„œ๊ฐ€ ์—†์–ด๋„ ์ž๋ฆฌ๋ฅผ ์œ ์ง€ํ•˜๊ฒŒ ํ•ด์คŒ

๊ฐœ๋ฐœ 2025. 5. 15. 06:04
[TypeScript] as const๋ž€?

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"๋กœ ๊ณ ์ •๋˜๊ณ  ๋” ์ด..

๊ฐœ๋ฐœ/JavaScript 2025. 4. 28. 01:38
[TypeScript] ์ œ๋„ค๋ฆญ ํ•จ์ˆ˜(Generic Functions) ์ดํ•ดํ•˜๊ธฐ

TypeScript ์ œ๋„ค๋ฆญ ํ•จ์ˆ˜๋ž€?TypeScript ์—์„œ ์ œ๋„ค๋ฆญ ํ•จ์ˆ˜๋Š” ๋‹ค์–‘ํ•œ ํƒ€์ž…์— ๋Œ€ํ•ด ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜.์ œ๋„ค๋ฆญ์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•จ์ˆ˜์˜ ์ž…๋ ฅ๊ณผ ๋ฐ˜ํ™˜๊ฐ’์˜ ํƒ€์ž…์„ ์œ ๋™์ ์œผ๋กœ ์ •์˜ ๊ฐ€๋Šฅ -> ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์œ ์ง€ ๋ณด์ˆ˜์„ฑ์„ ๋†’์ด๋Š”๋ฐ ํฐ ๋„์›€์ด ๋จ.์ œ๋„ค๋ฆญ ํ•จ์ˆ˜ ํŠน์ง• : ํƒ€์ž…์„ ๋ฏธ๋ฆฌ ์•Œ์ง€ ๋ชปํ•ด๋„, ํ•จ์ˆ˜๊ฐ€ ์–ด๋–ค ํƒ€์ž…์„ ๋‹ค๋ฃฐ์ง€ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ์‹œ์ ์— ๊ฒฐ์ • ๊ฐ€๋Šฅ.์˜ˆ : ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋‚˜ ๋ฐ˜ํ™˜๊ฐ’์˜ ํƒ€์ž…์„ ๋™์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์ œ๋„ค๋ฆญ ์‚ฌ์šฉ. ์ œ๋„ค๋ฆญ์€ ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ T์™€ ๊ฐ™์€ ํ”Œ๋ ˆ์ด์Šคํ™€๋”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํƒ€์ž…์„ ๋™์ ์œผ๋กœ ์ •์˜function identity(value: T):T { return value;}let result = identity(5); // result๋Š” 'number' ํƒ€์ž…let result2 = id..

๊ฐœ๋ฐœ/JavaScript 2025. 4. 27. 10:02
Next.js 15์—์„œ "URL.canParse()" ์˜ค๋ฅ˜ ํ•ด๊ฒฐํ•˜๊ธฐ (feat: i18next)

๋ฌธ์ œ์ƒํ™ฉ : 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)์ƒ๋‹จ์— ์ถ”๊ฐ€ํ•˜๋ฉด ์—๋Ÿฌ๋ฉ”์„ธ..

๊ฐœ๋ฐœ/Next.js 2025. 4. 17. 04:24
[์„œ์šธ → ํŒŒ๋ฆฌ] ๋น„ํ–‰๊ธฐ ๋†“์น ๋ป”.. ํ–ˆ์ง€๋งŒ ์ž˜ ๊ฐ„ ์ฐ | ๋Œ€ํ•œํ•ญ๊ณต ๊ณต๋™์šดํ•ญ ํ•ญ๊ณตํŽธ ์ฃผ์˜ํ•  ์  | AF267 | ์—์–ดํ”„๋ž‘์Šค | Air France

17 March 2025 (Mon) , Seoul์ผ ๋…„ ์ „๋ถ€ํ„ฐ ์ค€๋น„ํ•˜๋˜ ์ˆœ๊ฐ„์ด ๋“œ๋””์–ด ์˜ค๊ณ ์•ผ ๋ง์•˜๋‹ค.๋‚˜๋Š” ์บ๋‚˜๋‹ค ์ง + ์ „์„ธ๊ณ„์•ฝ ์ •๋ฆฌ๋ฅผ ๋™์‹œ์— ์ง„ํ–‰ํ•ด์•ผ ํ•ด์„œ ์„œ์šธ์— ์‚ด๊ณ  ์žˆ๋Š” ์ง‘์„ ์•„์˜ˆ ์ •๋ฆฌํ•ด๋ฒ„๋ ค์•ผ ํ–ˆ๋‹ค.๋‹น๊ทผ ๊ฑฐ๋ž˜ ๋ฐ ๋‚˜๋ˆ”์œผ๋กœ ์ •๋ฆฌํ•˜๊ณ  ํƒ๋ฐฐ 3๊ฐœ๋Š” ๋ณธ๊ฐ€๋กœ ๋ณด๋ƒˆ์ง€๋งŒ ์‰ฝ์ง€ ์•Š์•˜๋‹ค. ๋‹คํ–‰ํžˆ ์นœ๋™์ƒ์ด ๊ฐ™์€ ๋นŒ๋”ฉ์— ์‚ด์•„์„œ ๋งŽ์€ ๋„์›€์„ ์ฃผ์—ˆ๋‹ค ๐Ÿฅฒ๊ฐ€๊ธฐ ์ง์ „์ด๋ผ ๋งค์ผ ์•ฝ์†์ด ์žˆ์—ˆ๊ณ  ์ง‘์—์žˆ๋Š” ์‹œ๊ฐ„์ด ๋งŽ์ด ์—†๋‹ค ๋ณด๋‹ˆ ๋” ํž˜๋“ค์—ˆ๋˜ ๊ฒƒ ๊ฐ™๊ธฐ๋„.. ๐Ÿ˜…์ „์„ธ๊ณ„์•ฝ์ด 4์›” 1์ผ๊นŒ์ง€์—ฌ์„œ ์ „์„ธ๊ธˆ์„ ๋Œ๋ ค๋ฐ›์ง€ ๋ชปํ•˜๋ฉด ์–ด์ฉŒ์ง€ ํ•˜๋ฉฐ ๋ถˆ์•ˆํ•ดํ–ˆ์ง€๋งŒ ์ผ๋‹จ.. ๊ทธ๋ƒฅ ๊ฐ€๋Š” ๊ฑธ๋กœ.. ใ…‹ใ…‹ใ…‹๊ณ ๋ง™๊ฒŒ๋„ ์ œ์ฃผ์—์„œ ์˜ฌ๋ผ์˜จ ์นœ๊ตฌ์™€ ์ธ์ฒœ๊ณตํ•ญ์—์„œ ๋งˆ์ง€๋ง‰ ๊ณ ๋“ฑ์–ด์„ธํŠธ ํ•œ์‹์„ ๋จน๊ณ  ์ž‘๋ณ„ ์ธ์‚ฌ ํ›„ ์ž…๊ตญ์žฅ(?) ์œผ๋กœ ๋“ค์–ด๊ฐ”๋‹ค.๋ฌด์Šจ ์‚ฌ๋žŒ๋“ค์ด ์›”์š”์ผ์— ์ด๋ ‡๊ฒŒ ์—ฌํ–‰์„ ๋งŽ์ด๊ฐ€๋Š”์ง€...

[Quiz] ์Šค์ฝ”ํ”„(Scope) ๊ด€๋ จ ๋ฌธ์ œ

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 ๋กœ ๋ด์•ผํ•œ๋‹ค

๊ฐœ๋ฐœ/JavaScript 2025. 2. 27. 09:29
Next.js ์—์„œ ์ด๋ฏธ์ง€ ๊ด€๋ฆฌ : public vs src/assets

์ตœ๊ทผ Next.js๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์ด ์žˆ๋Š” ๊ฑธ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.1. public ํด๋”์— ์ €์žฅํ•˜๊ธฐ2. src/assets ์— ์ €์žฅํ•˜๊ธฐ๋‘˜ ์ค‘ ํ•˜๋‚˜๋งŒ ์“ฐ๋ฉด ๋˜๋Š” ๊ฑฐ ์•„๋‹ˆ์•ผ?๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์ง€๋งŒ, ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‘˜ ๋‹ค ์“ฐ๋Š” ๊ฒŒ ์œ ๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์–ด ๊ณต์œ ํ•˜๊ณ ์ž ํ•œ๋‹ค. ์ผ๋‹จ ํŠน์ง•์„ ํ‘œ๋กœ ์ •๋ฆฌํ•ด ๋ณด์•˜๋‹ค.ํŠน์ง•publicsrc/assets์‚ฌ์šฉ ๋ฐฉ์‹URL ์ ‘๊ทผ ๊ฐ€๋Šฅ (import ๋„ ๊ฐ€๋Šฅ)Import ๋กœ ๋ถˆ๋Ÿฌ์˜ด์บ์‹ฑ ๋ฌธ์ œ์—…๋ฐ์ดํŠธ ๋œ ์ด๋ฏธ์ง€๊ฐ€ ์ด์ „ ์ด๋ฏธ์ง€์™€ ํŒŒ์ผ๋ช…์ด ๊ฐ™๋‹ค๋ฉด ์˜›๋‚  ํŒŒ์ผ์„ ๋ณด์—ฌ์ค„ ์ˆ˜๋„ ์žˆ์Œํ•ด์‹œ๋œ ํŒŒ์ผ๋ช…์œผ๋กœ ์ตœ์‹  ํŒŒ์ผ๋งŒ ํ‘œ์‹œ๋ฒˆ๋“ค๋ง๋ฒˆ๋“ค๋ง ๋˜์ง€ ์•Š์Œ๋ฒˆ๋“ค๋ง๊ณผ ์ตœ์ ํ™” ์ž๋™์œผ๋กœ ์ง„ํ–‰์„ฑ๋Šฅ๋ฒˆ๋“ค ํฌ๊ธฐ์— ์˜ํ–ฅ์„ ์•ˆ์คŒ์ž์ฃผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฒˆ๋“ค ํฌ๊ธฐ๊ฐ€ ์ปค์งˆ ์ˆ˜ ์žˆ์Œ์ตœ์ ํ™”Next/image ์™€ ํ•จ..

๊ฐœ๋ฐœ/Next.js 2025. 1. 22. 09:14