์ „์ฒด ๊ธ€

๐Ÿ’ป FE Developer ๐ŸŒฑ self.push(knowledge)
Review

[ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ ์Šคํ”„๋ง ์ธ ์•ก์…˜] ๋„์„œ ๋ฆฌ๋ทฐ

์•ˆ๋…•ํ•˜์„ธ์š” :)dawonny ์ž…๋‹ˆ๋‹ค. ์˜ค๋Š˜ ๋ฆฌ๋ทฐํ•  ์ฑ…์€ [ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ ์Šคํ”„๋ง ์ธ ์•ก์…˜(ํ† ๋งˆ์Šค ๋น„ํƒˆ๋ ˆ ์ง€์Œ)] ์ž…๋‹ˆ๋‹ค! ์ €๋Š” ํ˜„์žฌ ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ๊ณต๋ถ€ํ•˜๊ณ  ์žˆ์–ด์„œ ํ™•์‹คํžˆ ํด๋ผ์šฐ๋“œ๋‚˜ ์Šคํ”„๋ง์— ๊ด€ํ•œ ๋‚ด์šฉ์„ ๋งŽ์ด ์ ‘ํ•  ์ผ์€ ์ƒ๋Œ€์ ์œผ๋กœ ์ ์—ˆ๋Š”๋ฐ์š”. ์ด๋ฒˆ์— ์ข‹์€ ๊ธฐํšŒ๋กœ ์ฑ…์„ ์ฝ์–ด๋ณด๊ฒŒ ๋˜์–ด์„œ ์ด ์ฐธ์— ํด๋ผ์šฐ๋“œ์— ๋Œ€ํ•ด์„œ ๊ด€์‹ฌ์„ ๊ฐ€์ ธ๋ณด๋Š” ๊ฒฝํ—˜์„ ํ•ด๋ณด์ž! ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ์ฑ…์˜ ์ฒซ ๋ชฉ์ฐจ๋ฅผ ๋ณด์•˜๋Š”๋ฐ ๊ทธ๋™์•ˆ ๋ชฐ๋ž๋˜ ์ ๊ณผ ๋ถ€์กฑํ–ˆ๋˜ ์ง€์‹์„ ์ฑ„์šธ ์ˆ˜ ์žˆ์„ ๊ฑฐ๋ž€ ๊ธฐ๋Œ€๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.  ์ฑ…์˜ ๊ตฌ์„ฑ์€ 16๊ฐœ์˜ ๋ชฉ์ฐจ๊ฐ€ 4๊ฐœ์˜ ํŒŒํŠธ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ์—ˆ๊ณ  ์ฑ…์„ ์ฝ๊ธฐ ์ „ ๊ฐ€์žฅ ๊ธฐ๋Œ€ํ–ˆ๋˜ ํŒŒํŠธ๋Š” ์ฒซ ๋ฒˆ์งธ ํŒŒํŠธ์ž…๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ํŒŒํŠธ๋Š” ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ์— ๋Œ€ํ•œ ์„ค๋ช…์ด ์žˆ์—ˆ๋Š”๋ฐ ๊ทธ๋™์•ˆ ์ฃผ์›Œ๋“ค์—ˆ๋˜ ๊ฐœ๋…๋“ค์„ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ ์ด ์ข‹์•˜์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ..

Finds & Notes

Github README ๊ธฐ์ˆ  ์Šคํƒ ์‰ฝ๊ณ  ์˜ˆ์˜๊ฒŒ ๊พธ๋ฏธ๊ธฐ

์˜ค๋žœ๋งŒ์— ๊นƒํ—ˆ๋ธŒ ๋ฆฌ๋“œ๋ฏธ ๊พธ๋ฏธ๊ธฐ๋ฅผ ํ•˜๋‹ค๊ฐ€ ๊ธฐ์ˆ ์Šคํƒ ๋ถ€๋ถ„์„ ์ž‘์„ฑํ•ด๋ณด๊ณ ์ ธ์„œ ์„œ์น˜๋ฅผ ํ•˜๋˜ ์ค‘ ๊ดœ์ฐฎ์€ ๊ฒƒ์„ ๋ฐœ๊ฒฌํ•ด์„œ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค! ๊ฒฐ๊ณผ๋ฌผ์€ ์œ„์™€ ๊ฐ™์•„์š”. 8๊ฐ€์ง€ ์ •๋„ ์ถ”๊ฐ€ํ•ด๋ดค๋Š”๋ฐ, ์˜ˆ์œ ๊ฒƒ ๊ฐ™์•„์š”. ์œ„ ์ด๋ฏธ์ง€์ฒ˜๋Ÿผ ๊ธฐ์ˆ  ์Šคํƒ์„ ๋ฑƒ์ง€ํ˜•ํƒœ๋กœ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์ด ์ œ์ผ ๋งŽ์ด ์“ฐ๋Š” ๋ฐฉ๋ฒ•์ธ ๊ฒƒ ๊ฐ™์€๋ฐ์š”. ์ €๋Š” ์ด๊ฒƒ ๋ง๊ณ , ์ข€ ๋” ๋‘ฅ๊ธ€๋‘ฅ๊ธ€ํ•˜๊ณ  ๋กœ๊ณ ๊ฐ€ ๋” ๋‹๋ณด์ด๋Š” ๋””์ž์ธ์„ ์›ํ–ˆ์–ด์š”! ๋งˆ์นจ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š”, ๋ ˆํฌ์ง€ํ„ฐ๋ฆฌ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์—ˆ๋Š”๋ฐ์š”. ๋ฐ”๋กœ skill-icons ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ๋ฒ• ์‚ฌ์šฉ๋ฒ•์€ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. [![My Skills](https://skillicons.dev/icons?i=js,html,css,wasm)](https://skillicons.dev) ์œ„ ์ฝ”๋“œ๋ฅผ Github README ์— ๋ณต๋ถ™ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด..

Develop/React.js

[React] ์™ธ๋ถ€ ์˜์—ญ ํด๋ฆญ์‹œ ๋ฉ”๋‰ด ๋‹ซ๊ธฐ (feat. useRef ์ด์šฉ)

ํ”„๋กœ์ ํŠธ์—์„œ ๋ฉ”๋‰ด ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ useRef ๊ธฐ๋Šฅ์„ ์ด ์ฐธ์— ์ž˜ ์ดํ•ดํ•˜๊ณ  ์จ๋ณด๋ ค๊ณ  ํ–ˆ๋‹ค. ํ–„๋ฒ„๊ฑฐ ๋ชจ์–‘์˜ ๋ฉ”๋‰ด ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด → ๋ฉ”๋‰ด๊ฐ€ ํŽผ์ณ์ง„๋‹ค ํ–„๋ฒ„๊ฑฐ ๋ชจ์–‘์˜ ๋ฉ”๋‰ด ๋ฒ„ํŠผ์„ ๋‹ค์‹œ ํด๋ฆญํ•˜๋ฉด → ๋ฉ”๋‰ด๊ฐ€ ๋‹ซํžŒ๋‹ค ํŽผ์ณ์ง„ ๋ฉ”๋‰ด๋ฅผ ์ œ์™ธํ•œ ํ™”๋ฉด์˜ ๋‹ค๋ฅธ ๋ถ€๋ถ„์„ ํด๋ฆญํ•˜๋ฉด → ๋ฉ”๋‰ด๊ฐ€ ๋‹ซํžŒ๋‹ค ๐Ÿ‘‰ ์ด๊ฑธ ๊ตฌํ˜„ํ•˜๊ณ ์ž ํ•จ!! useState, useRef, useEffect ํ›…์„ ์‚ฌ์šฉํ•ด์„œ ๋ฉ”๋‰ด์˜ ์—ด๋ฆผ/๋‹ซํž˜/๋ฉ”๋‰ด ๋ฐ”๊นฅ ์˜์—ญ ํด๋ฆญ์‹œ ๋ฉ”๋‰ด ๋‹ซํž˜ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด๋ณด์ž. const [isMenuOpen, setIsMenuOpen] = useState(false); const menuRef = useRef(); // ๋“œ๋กญ๋‹ค์šด ๋ฉ”๋‰ด์— ๋Œ€ํ•œ ์ฐธ์กฐ ๋จผ์ € useState ํ›…์„ ์‚ฌ์šฉํ•ด์„œ ๋ฉ”๋‰ด์˜ ์—ด๋ฆผ/๋‹ซํž˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” isMenuOpen ์ด๋ผ๋Š” ์ƒ..

Develop/React.js

[React] TailwindCSS font ์ ์šฉํ•˜๊ธฐ

TailwindCSS ์— ํฐํŠธ ์ ์šฉํ•˜๋Š” ๋ฒ•์„ ์ •๋ฆฌํ•ด๋ณด๋ คํ•œ๋‹ค! ์ด์ „์— ํ–ˆ์—ˆ๋Š”๋ฐ ์ƒ๊ฐ์ด ์•ˆ๋‚˜์„œ ๋‹ค์‹œ ์ฐพ์•„๋ดค๋‹ค. ๋‚˜์ค‘์— ๋˜ ์•ˆ ์ฐพ์•„๋ณด๋„๋ก ... ํฐ๋“œ ๋‹ค์šด๋กœ๋“œ์™€ ์ €์žฅ https://fonts.google.com/ Browse Fonts - Google Fonts Making the web more beautiful, fast, and open through great typography fonts.google.com ์šฐ์„  ์œ„ ์‚ฌ์ดํŠธ์—์„œ ํฐํŠธ๋ฅผ ๋‹ค์šด๋ฐ›๋Š”๋‹ค ํฐํŠธ ttf ํŒŒ์ผ์„ ํ”„๋กœ์ ํŠธ์— ๋„ฃ์–ด๋‘”๋‹ค. ๋‚˜๋Š” src > assets ํด๋”์— fonts ๋ผ๋Š” ํด๋”๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์„œ ์—ฌ๊ธฐ์— ttf ํŒŒ์ผ์„ ์ €์žฅํ–ˆ๋‹ค. font-face @font-face { font-family: "Roboto"; src: url("../src/..

Review

[๋ฉ€ํ‹ฐ๋ชจ๋‹ฌ ์ƒ์„ฑ AI ์ธ์‚ฌ์ด๋“œ] ๋„์„œ ๋ฆฌ๋ทฐ

์•ˆ๋…•ํ•˜์„ธ์š”! ์ด๋ฒˆ์— ์ฝ์€ ๋„์„œ๋Š” ์ œ๊ฐ€ ํ‰์†Œ์— ์ ‘ํ•˜๋˜ ์›น, ํ”„๋ก ํŠธ์—”๋“œ ๋ถ„์•ผ์™€ ์กฐ๊ธˆ ๋‹ค๋ฅธ AI์— ๊ด€๋ จ๋œ ๋„์„œ์˜€์–ด์š”. ๋„์„œ์˜ ์ œ๋ชฉ์€ [๋ฉ€ํ‹ฐ๋ชจ๋‹ฌ ์ƒ์„ฑ AI ์ธ์‚ฌ์ด๋“œ] ์ž…๋‹ˆ๋‹ค. ์ €๋Š” ํ‰์†Œ์— ๊ฐœ๋ฐœ์„ ํ•  ๋•Œ, ๊ฐœ์ธ ์ž‘์—…์„ ํ•  ๋•Œ์—๋„ GPT4๋ฅผ ์ •๋ง ์ž˜ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”๋ฐ์š”! ์œ ๋ฃŒ ๋ฒ„์ „์„ ๊ตฌ๋…ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์„๋งŒํผ, ์ด์ œ GPT4๊ฐ€ ์—†๋˜ ๋•Œ๋กœ๋Š” ๋Œ์•„๊ฐ€์ง€ ๋ชปํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.  ์ œ์ผ ์œ ๋ช…ํ•œ ๋ชจ๋ธ์ด ํ”ํžˆ๋“ค ์•„์‹œ๋Š” GPT ์ด์ง€๋งŒ ์ €๋Š” ์ด ์ฑ…์„ ํ†ตํ•ด์„œ ๋‹ค๋ฅธ ๋ชจ๋ธ๋“ค๋„ ์–ด๋–ค ๋‹ค์–‘ํ•œ ํŠน์ง•์ด ์žˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์—ˆ์–ด์š”. ๋ฉ€ํ‹ฐ๋ชจ๋‹ฌ ์ƒ์„ฑ AI ์˜ ๊ธฐ์ดˆ์ ์ธ ๊ฐœ๋…๋ถ€ํ„ฐ,์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•˜๋ฉด ์ข‹์„์ง€,๊ทธ๋ฆฌ๊ณ  ๋ฏธ๋ž˜์—๋Š” ์–ด๋–จ์ง€ ์ „๋ง๊นŒ์ง€ ๋‹ค๋ฃจ๊ณ  ์žˆ์–ด์„œ ์ƒ์„ฑ AI ์— ๊ด€์‹ฌ์ด ์žˆ์œผ์‹  ๋ถ„๋“ค์ด๋ผ๋ฉด ํฅ๋ฏธ๋กญ๊ฒŒ ์ฝ์–ด๋ณผ ๊ตฌ์„์ด ๋งŽ์„ ๊ฒƒ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ ์ ˆํžˆ ๋ฉ€ํ‹ฐ์ƒ์„ฑ AI์— ..

Develop/TypeScript

[Typescript] keyof / Mapped Types / ์กฐ๊ฑด๋ถ€ํƒ€์ž… / infer

keyof keyof ํ‚ค์›Œ๋“œ๋Š” object ํƒ€์ž…์˜ ๋ชจ๋“  key ๋ฅผ ๊ฐ€์ ธ์™€์„œ ์œ ๋‹ˆ์˜จ ํƒ€์ž…์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์•„๋ž˜์˜ ์˜ˆ์‹œ๋ฅผ ๋ณด์ž interface Person { age: number; name: string; } type PersonKeys = keyof Person; // "age" | "name" ์œ„์—์„œ PersonKeys ํƒ€์ž…์€ age์™€ name ์ค‘ ํ•˜๋‚˜์˜ ๋ฌธ์ž์—ด ๊ฐ’๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๋ฆฌํ„ฐ๋Ÿด ํƒ€์ž…์ด๋‹ค. Mapped Types Mapped Types ๋ฅผ ์ด์šฉํ•˜๋ฉด, ๊ธฐ์กด์˜ ํƒ€์ž…์„ ์ƒˆ๋กœ์šด ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค. object ์˜ ๊ฐ ์†์„ฑ์— ๋Œ€ํ•ด ๋ฐ˜๋ณต์ ์œผ๋กœ ์ ์šฉ์„ ํ•  ์ˆ˜ ์žˆ์–ด์„œ ํƒ€์ž… ๋ณ€ํ™˜ ๊ณผ์ •์„ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ์ค€๋‹ค. type TypeChanger = { [Key in keyof MyType]: NewType;..

Develop/TypeScript

[Typescript] implements / object index signatures

interface์™€ implements ๋ฅผ ์‚ฌ์šฉํ•œ class ํƒ€์ž… ํ™•์ธ interface ๋Š” object ์˜ ํƒ€์ž…์„ ์ง€์ •ํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋˜ ๋‹ค๋ฅธ ์šฉ๋„๋กœ, class ์˜ ํƒ€์ž…์„ ํ™•์ธํ•  ๋•Œ์—๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๋•Œ, implements ํ‚ค์›Œ๋“œ๋„ ํ•„์š”ํ•˜๋‹ค. ์•„๋ž˜์˜ ์˜ˆ์‹œ๋ฅผ ๋ณด์ž. class Car { model: string; price: number = 1000; constructor(a: string) { this.model = a; } } let ๋ถ•๋ถ•์ด = new Car('morning'); ์œ„์˜ Car ํด๋ž˜์Šค์—์„œ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋“ค์€ model ๊ณผ price ์†์„ฑ์„ ๊ฐ€์ง„๋‹ค. ํด๋ž˜์Šค๊ฐ€ ํŠน์ • ์†์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ํƒ€์ž…์œผ๋กœ ํ™•์ธํ•˜๊ณ  ์‹ถ์„ ๋•Œ, interface ์™€ implements ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ..

Develop/TypeScript

[Typescript] d.ts File

๊ฐœ๋… d.ts ํŒŒ์ผ์€ TS์—์„œ ํƒ€์ž… ์ •์˜๋ฅผ ์ €์žฅํ•˜๋Š” ํŒŒ์ผ์ด๋‹ค. ์—ฌ๊ธฐ์„œ 'd' ๋Š” Definition ์˜ ์•ฝ์ž์ด๋‹ค. ์ด ํŒŒ์ผ๋“ค์€ TS ์ปดํŒŒ์ผ ๊ณผ์ •์—์„œ JS๋กœ ๋ณ€ํ™˜๋˜์ง€ ์•Š์œผ๋ฉฐ, ํƒ€์ž… ์ •๋ณด๋งŒ ํฌํ•จํ•œ๋‹ค. ์ฃผ๋กœ 2๊ฐ€์ง€ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋œ๋‹ค. 1. ํƒ€์ž… ์ •์˜ ์ €์žฅ : ํƒ€์ž… ์ •๋ณด๋งŒ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์ €์žฅํ•˜๊ณ , ํ•„์š”ํ•œ ๊ณณ์—์„œ import ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค 2. ๋ ˆํผ๋Ÿฐ์Šค ์šฉ : ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํƒ€์ž…์„ ์ •๋ฆฌํ•ด๋†“์€ ๋ฌธ์„œ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. d.ts ํŒŒ์ผ์—์„œ ํƒ€์ž… ์ •์˜ํ•˜๊ธฐ d.ts ํŒŒ์ผ ๋‚ด์—์„œ๋Š” ์ฃผ๋กœ type ํ‚ค์›Œ๋“œ, interface, ํ•จ์ˆ˜ ํƒ€์ž… ์ •์˜๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•จ์ˆ˜ ๋ณธ๋ฌธ์„ ์ •์˜ํ•  ์ˆ˜๋Š” ์—†๊ณ , ํŒŒ๋ผ๋ฏธํ„ฐ๊ณผ return ํƒ€์ž…๋งŒ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. export type Age = number; export type Multiply ..

Review

[๋ชจ๋˜ ๋ฆฌ์•กํŠธ Deep Dive] ๋„์„œ ๋ฆฌ๋ทฐ

์•ˆ๋…•ํ•˜์„ธ์š”์˜ค๋Š˜ ๋ฆฌ๋ทฐํ•  ๋„์„œ๋Š” [๋ชจ๋˜ ๋ฆฌ์•กํŠธ Deep Dive] ์ž…๋‹ˆ๋‹ค. ์ œ๊ฐ€ ์›น ํ”„๋ก ํŠธ์—”๋“œ ํ•™์Šต์„ ํ•˜๋ฉด์„œ ๊ฐ€์žฅ ์ฃผ์š”ํ•˜๊ฒŒ ๊ณต๋ถ€ํ•˜๊ณ  ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ React ์ธ ๋งŒํผ, ์ •๋ง ์ฝ์–ด๋ณด๊ณ  ์‹ถ์—ˆ๋˜ ์ฑ…์ธ๋ฐ์š”.์ด ์ฑ…์—์„œ๋Š” React ๊ฐœ๋ฐœ์ž๋กœ์จ ์•Œ์•„๋‘์–ด์•ผ ํ•  ๋‚ด์šฉ์„ ์ •๋ง ๋‹ค์–‘ํ•˜๊ฒŒ ๋‹ค๋ฃจ๊ณ  ์žˆ์–ด์š”.์ฑ…์—์„œ ๋‹ค๋ฃจ๋Š” ๋‚ด์šฉ์„ ๋‚˜์—ดํ•ด๋ณด์ž๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. -๋ฆฌ์•กํŠธ์—์„œ ์ž์ฃผ ์“ฐ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ-ํ•จ์ˆ˜, ํด๋ž˜์Šค, ํด๋กœ์ €, ์ด๋ฒคํŠธ ๋ฃจํ”„, ๋น„๋™๊ธฐ ํ†ต์‹ ,-๋ฆฌ์•กํŠธ ์ฝ”๋“œ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ํ™œ์šฉ๋ฒ•-JSX, ๊ฐ€์ƒ DOM๊ณผ ๋ฆฌ์•กํŠธ ํŒŒ์ด๋ฒ„-ํ•จ์ˆ˜/ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ, ๋ Œ๋”๋ง-๋ฉ”๋ชจ์ด์ œ์ด์…˜, ๋ฆฌ์•กํŠธํ›…-์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง, Next.js ํ†บ์•„๋ณด๊ธฐ-์ƒํƒœ๊ด€๋ฆฌ, ๋””๋ฒ„๊น…ํ•˜๊ธฐ ์œ„ํ•œ ๋ฆฌ์•กํŠธ ๊ฐœ๋ฐœ ๋„๊ตฌ-์ข‹์€ ๋ฆฌ์•กํŠธ ์ฝ”๋“œ ์ž‘์„ฑ์„ ์œ„ํ•œ ํ™˜๊ฒฝ ๊ตฌ์ถ•, ๋ฆฌ์•กํŠธ..

Develop/TypeScript

[Typescript] declare & ambient module

JS ํŒŒ์ผ์— ์„ ์–ธ๋œ ๋ณ€์ˆ˜ TS ํŒŒ์ผ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ JS ํŒŒ์ผ์—์„œ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋ฅผ TS ํŒŒ์ผ์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ์—๋Š” declare ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. declare ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด TS ํŒŒ์ผ ๋‚ด์—์„œ JS ํŒŒ์ผ์— ์ •์˜๋œ ๋ณ€์ˆ˜๋‚˜ ํ•จ์ˆ˜์˜ ํƒ€์ž…์„ ๋ช…์‹œํ•  ์ˆ˜ ์žˆ๋‹ค. declare let a: number; ์œ„ ์˜ˆ์‹œ์ฒ˜๋Ÿผ TS ํŒŒ์ผ์— declare ๋ฅผ ์„ ์–ธํ•˜๋ฉด '๋ณ€์ˆ˜ a ๋Š” number ํƒ€์ž…์ด๋ฉฐ, ์ด๋ฏธ ์–ด๋”˜๊ฐ€์— ์ •์˜๋˜์–ด ์žˆ๋‹ค' ๋ผ๊ณ  TS ์ปดํŒŒ์ผ๋Ÿฌ์—๊ฒŒ ์•Œ๋ฆฌ๋Š” ๊ฒƒ์ด๋‹ค. declare global 'declare global' ์€ TS ๋ชจ๋“ˆ ๋‚ด์—์„œ ์ „์—ญ ๋ณ€์ˆ˜๋‚˜ ํƒ€์ž…์„ ์„ ์–ธํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ TS ํŒŒ์ผ์€ ์ž์ฒด scope ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด, ํŒŒ์ผ ๋‚ด์—์„œ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋‚˜ ํƒ€์ž…์€ ๊ทธ ํŒŒ์ผ ๋‚ด์—์„œ๋งŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ํ•˜์ง€๋งŒ ๋•Œ..

Develop/TypeScript

[Typescript] Tuple type

Tuple type Tuple ์€ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ ๊ณ ์ •๋œ ์ˆ˜์˜ ์š”์†Œ๋ฅผ ๊ฐ€์ง€๋ฉด์„œ, ๊ฐ ์š”์†Œ์˜ ํƒ€์ž…์ด ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •๋œ ๋ฐฐ์—ด์˜ ํƒ€์ž…์ด๋‹ค. ๊ฐ ์š”์†Œ์˜ ํƒ€์ž…์€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๊ณ , ๋ฐฐ์—ด์˜ ๊ธธ์ด๋Š” ๊ณ ์ •๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ฒซ๋ฒˆ์งธ ์š”์†Œ๊ฐ€ ๋ฌธ์ž์—ด์ด๊ณ , ๋‘๋ฒˆ์งธ ์š”์†Œ๊ฐ€ ์ˆซ์ž์ธ ๋ฐฐ์—ด์„ ์ •์˜ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. let exampleTuple: [string, number] = ['hello', 42]; Tuple ์‘์šฉ : Rest Parameters ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ '...' (rest ์—ฐ์‚ฐ์ž)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ธ์ž๋ฅผ ๋ฐฐ์—ด๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์„ tuple ์ด๋ž‘ ๊ฒฐํ•ฉํ•ด๋ณด์ž. ์˜ˆ๋ฅผ ๋“ค์–ด ์ฒซ๋ฒˆ์งธ ์ธ์ž๋Š” ๋ฌธ์ž์—ด์ด๊ณ , ๋‘๋ฒˆ์งธ ์ธ์ž๋Š” ์ˆซ์ž์—ฌ์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. args ๋ผ๋Š” ๋ฐฐ์—ด์— string..

Finds & Notes

README ์ž‘์„ฑ ๊ฟ€ํŒ / ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋„ ํŠธ๋ฆฌ ๋งŒ๋“ค๊ธฐ(feat. file-tree-generator)

README๋ฅผ ์ž‘์„ฑํ•˜๋‹ค๋ณด๋ฉด Architecture ์†Œ๊ฐœ ๋ถ€๋ถ„์— ์•„๋ž˜์™€ ๊ฐ™์ด ํด๋” ๊ตฌ์กฐ๋„๋ฅผ ๋„ฃ๊ณ ์‹ถ์€ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ๊ตฌ๊ธ€๋ง ํ•ด๋ณด๋‹ˆ๊นŒ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋Š” VSCode ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ๊ธธ๋ž˜ ์†Œ๊ฐœํ•œ๋‹ค. VSCode Extension ์—์„œ file-tree-generator ๋ฅผ ์„ค์น˜ํ•œ๋‹ค ์›ํ•˜๋Š” ํด๋”์—์„œ ์˜ค๋ฅธ์ชฝ ํด๋ฆญ์„ ํ•˜๊ณ  [Generate to Tree] ๋ฅผ ํด๋ฆญํ•œ๋‹ค ๊ทธ๋Ÿผ ์ด๋ ‡๊ฒŒ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋„๊ฐ€ ๋ณด๊ธฐ์ข‹๊ฒŒ ๋งŒ๋“ค์–ด์ ธ์„œ ๋‚˜์˜จ๋‹ค. ์•„์ด์ฝ˜์€ [icon on] [icon off] ๋ฒ„ํŠผ์„ ํ†ตํ•ด์„œ ๋งŒ๋“ค์ˆ˜๋„, ์ง€์šธ์ˆ˜๋„ ์žˆ๋‹ค. ๋‚ด์šฉ์„ ๋ณต์‚ฌํ•ด์„œ README ์ž‘์„ฑ ๋ž€์— ์ถ”๊ฐ€ํ•  ๋•Œ ์œ„ ์•„๋ž˜์— ๋ฐฑํ‹ฑ์„ 3๊ฐœ์”ฉ ์ถ”๊ฐ€ํ•˜๋ฉด ์™„์„ฑ! ``` (๋ณต์‚ฌํ•œ ๋‚ด์šฉ ๋ถ™์—ฌ๋„ฃ๊ธฐ) ``` ์ž์ฃผ ์“ธ ๊ฒƒ ๊ฐ™๋‹ค!

Review

[ํ”„๋กœ๋•ํŠธ ๋งค๋‹ˆ์ง€๋จผํŠธ์˜ ๊ธฐ์ˆ ] ๋„์„œ ๋ฆฌ๋ทฐ

์•ˆ๋…•ํ•˜์„ธ์š” dawonny์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ์— ์ฝ์–ด๋ณธ ๋„์„œ์˜ ์ œ๋ชฉ์€ [ํ”„๋กœ๋•ํŠธ ๋งค๋‹ˆ์ง€๋จผํŠธ์˜ ๊ธฐ์ˆ (๋งท ๋ฅด๋ฉ”์ด ์ง€์Œ)]์ž…๋‹ˆ๋‹ค ์ €๋Š” ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ํŒ€์›๋“ค๊ณผ ์†Œํ†ตํ•˜๋ฉฐ, PM ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํŒ€์›๊ณผ์˜ ํ˜‘์—… ๊ฒฝํ—˜๋„ ์ž์ฃผ ์žˆ์—ˆ๋Š”๋ฐ์š”. ํ˜‘์—… ๊ณผ์ • ์ค‘์— ์ €๋Š” ํ”„๋กœ๋•ํŠธ ๋งค๋‹ˆ์ €(PM) ์ง๋ฌด์— ๋Œ€ํ•ด ์ •๋ง ์กด๊ฒฝ์Šค๋Ÿฌ์›Œ์กŒ๊ณ  ๋˜ํ•œ ๋งค๋ ฅ์„ ๋А๋ผ๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ฑ…์€ ํ”„๋กœ๋•ํŠธ ๋งค๋‹ˆ์ €๊ฐ€ ํ”„๋กœ๋•ํŠธ์˜ ์„ฑ๊ณต์„ ์œ„ํ•ด ๋‚˜์•„๊ฐ€์•ผ ํ•  ๋ฐฉํ–ฅ๊ณผ ํ˜„์‹ค์ ์ธ ๋ฌธ์ œ๋“ค์„ ์†”์งํ•˜๊ฒŒ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ํŠนํžˆ, ๊ฐœ๋ฐœ์ž, ๋””์ž์ด๋„ˆ, ์ž„์›, ์‚ฌ์šฉ์ž์™€์˜ ํšจ์œจ์ ์ธ ์†Œํ†ต ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋‚ด์šฉ์€ ๋งค์šฐ ํฅ๋ฏธ๋กญ๊ฒŒ ๋‹ค๊ฐ€์™”์–ด์š”. ์ •๋ง ‘๋ชจ๋‘์™€’ ‘์ž˜’ ์†Œํ†ตํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์ด์–ด์•ผ ๋˜๊ฒ ๊ตฌ๋‚˜ ์‹ถ๋”๋ผ๊ตฌ์š”. ์ €์ž๋Š” ๋‹ค์–‘ํ•œ ๋ฌธ์ œ ์ƒํ™ฉ์„ ์‹œ๋‚˜๋ฆฌ์˜ค๋กœ ๋ณด์—ฌ์ฃผ๋ฉด์„œ, ์ด๋Ÿฐ ๋ฌธ์ œ์ƒํ™ฉ๋“ค์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์‹ค์งˆ์ ์ธ ์กฐ์–ธ์„..

Review

[๊ฐœ๋ฐœ์ž ์˜ค๋Š˜๋„ ๋งˆ์Œ ํŠผํŠผํ•˜๊ฒŒ ์„ฑ์žฅํ•˜๊ธฐ] ๋„์„œ๋ฆฌ๋ทฐ

์•ˆ๋…•ํ•˜์„ธ์š”, dawonny์ž…๋‹ˆ๋‹ค.์ด๋ฒˆ์— ์ฝ์–ด๋ณธ ์ฑ…์€ [๊ฐœ๋ฐœ์ž ์˜ค๋Š˜๋„ ๋งˆ์Œ ํŠผํŠผํ•˜๊ฒŒ ์„ฑ์žฅํ•˜๊ธฐ(ํ”ผ์˜ค๋‹ค๋ฅด ์„œ์žฌ๋‚˜๋ฒ ์ธ  ์ง€์Œ)] ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž ๊ด€๋ จ ์„œ์ ๋“ค๊ณผ๋Š” ์ œ๋ชฉ๊ณผ ํ‘œ์ง€์˜ ๋ถ„์œ„๊ธฐ๊ฐ€ ๋‹ฌ๋ผ์„œ ๊ทธ๋Ÿฐ์ง€ ์ฒซ์ธ์ƒ์ด ๊ท€์—ฌ์› ์–ด์š”. ์ด ์ฑ…์€ ๊ฐœ๋ฐœ์ž๋“ค์„ ์œ„ํ•œ ์ž๊ธฐ๊ณ„๋ฐœ์„œ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค!์ €๋Š” ์‚ฌ์‹ค ‘์–ด๋–ป๊ฒŒ ์‚ด์•„์•ผํ•œ๋‹ค.’, ‘์„ฑ๊ณตํ•˜๋Š” ๋ฐฉ์‹์€ ์ด๋ ‡๋‹ค’ -์™€ ๊ฐ™์ด ๋งํ•˜๋Š” ์ฑ…๋“ค์€ ๋น„ํŒ์ ์œผ๋กœ ์ฝ๊ณ  ๋ถ€๋‹ด์Šค๋Ÿฌ์›Œ์„œ ๊ฑฐ๋ฆฌ๋ฅผ ๋‘๊ฒŒ ๋˜๋Š”๋ฐ์š”.์ด ์ฑ…์—์„œ๋Š” ๊ฐœ๋ฐœ์ž๋“ค์ด ๋ณธ์ธ๋“ค์˜ ์ƒ์‚ฐ์„ฑ์„ ์–ด๋–ป๊ฒŒ ๋†’์ผ ์ˆ˜ ์žˆ๋Š”์ง€, ์ด๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•ด์„œ ์–ด๋–ค ๊ตฌ์ฒด์ ์ธ ๋ฐฉ๋ฒ•์„ ์ ์šฉํ•ด์•ผํ•˜๋Š”์ง€,์ด ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ณผํ•™์ ์ธ ๊ทผ๊ฑฐ๋Š” ๋ฌด์—‡์ธ์ง€์— ๋Œ€ํ•ด์„œ ์ž์„ธํ•˜๊ฒŒ ์„ค๋ช…ํ•ด์ค๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ต‰์žฅํžˆ ํฅ๋ฏธ๋กญ๊ฒŒ ์ฝ์—ˆ์–ด์š”. ๋˜์ƒˆ๊ธฐ๊ณ  ์‹ถ์€ ๋ฌธ์žฅ์—๋Š” ์ธ๋ฑ์Šค๋ฅผ ๋ถ™์ด๊ณ  ํ‘œ์‹œ๋„ ํ•ด๊ฐ€๋ฉด์„œ ์ฝ์—ˆ๋Š”๋ฐ, ๋•๋ถ„์— ์ž๊ธฐ๋ฐ˜์„ฑ์„..

Review

SPARCS ์„œ๋น„์Šค ํ•ด์ปคํ†ค 2024 ํ›„๊ธฐ(feat. ํ˜ธํ…”์—์„œ์˜ ํ•ด์ปคํ†ค๐Ÿ›๏ธ)

์•ˆ๋…•ํ•˜์„ธ์š”. dawonny ์ž…๋‹ˆ๋‹ค. ์–ผ๋งˆ์ „ ์นด์ด์ŠคํŠธ์—์„œ ์—ด๋ฆฌ๋Š” SPARCS 2024 ํ•ด์ปคํ†ค์— ๋‹ค๋…€์™”์Šต๋‹ˆ๋‹ค!์ „๊ตญ์—์„œ 80๋ช…, ์ด 20ํŒ€์ด ์ฐธ์—ฌํ•˜๊ฒŒ ๋˜๋Š” ํ•ด์ปคํ†ค์ด์—ˆ๋Š”๋ฐ์š”.์ €๋Š” PM / ๋””์ž์ธ / iOS / ์„œ๋ฒ„ ๊ฐœ๋ฐœ์ด ๋‹ค ๋˜๋Š”... ๋‹ค์žฌ๋‹ค๋Šฅํ•œ ์นœ๊ตฌ์—๊ฒŒ ๊ฐ™์ด ๋‚˜๊ฐ€์ž๊ณ  ์กธ๋ผ์„œ 2์ธ์œผ๋กœ ์ฐธ์—ฌํ•˜๊ฒŒ ๋˜์—ˆ์–ด์š”!(๊ฐœ์ธ ๋˜๋Š” 2์ธ ํŒ€ ์‹ ์ฒญ์ด ๊ฐ€๋Šฅํ–ˆ์Šต๋‹ˆ๋‹ค) ๋ฐ–์—์„œ ์ผ์ •์ด ๋๋‚˜๊ณ  ์นดํŽ˜์— ๊ฐ€์„œ ๋ถ€๋žด๋ถ€๋žด ์ง€์›์„œ๋ฅผ ์“ฐ๊ณ  ์ œ์ถœํ–ˆ๋Š”๋ฐ ํ•ฉ๊ฒฉํ–ˆ๋”๋ผ๊ตฌ์š”!์ง€์›์„œ๋Š” ์•„๋ž˜๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.[์ง€์› ๋™๊ธฐ]์ €๋Š” ์ปดํ“จํ„ฐ๊ณตํ•™๋ถ€์— ์ž…ํ•™ํ•œ ํ›„ ์ฒ˜์Œ์—” ๊ฐœ๋ฐœ์ž๋Š” ํ˜ผ์ž ๊ณต๋ถ€ํ•˜๊ณ  ์ผํ•˜๋Š” ์ง์—…์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ปดํ“จํ„ฐ๊ณตํ•™๋ถ€ ํ•™ํšŒ์žฅ์ด๋‚˜ ๊ตฌ๊ธ€ ํ•™์ƒ ๊ฐœ๋ฐœ์ž ๋™์•„๋ฆฌ ์šด์˜์ง„ ํ™œ๋™ ๋“ฑ์„ ํ•˜๋ฉด์„œ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ํ•„์š”ํ•œ ๊ฒƒ์€ ์†Œํ†ต๊ณผ ํ˜‘์—…์ด๋ฉฐ, ๋‹จ์ˆœํžˆ ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ..

Develop/React.js

[์˜ค๋ฅ˜] Vercel ๋ฐฐํฌ ์‹œ 404: NOT_FOUND react-router ๊ด€๋ จ ์—๋Ÿฌ ํ•ด๊ฒฐ (feat. React, Vite)

๋ฌธ์ œ Vite๋กœ ์ƒ์„ฑํ•œ React ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ๊ณผ์ •์—์„œ ๋‚˜๋Š” react-router-dom ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•ด์„œ ๋ผ์šฐํŒ…์„ ์ง„ํ–‰ํ–ˆ๋‹ค. import { Route, Routes } from "react-router-dom"; import TreeBranchView from "./pages/TreeBranchView"; import MemberBranchView from "./pages/MemberBranchView"; function App() { return ( ); } export default App; ์ฝ”๋“œ๋ฅผ ๋ชจ๋‘ ์ž‘์„ฑํ•˜๊ณ  Vercel ๋กœ ๋ฐฐํฌํ•œ ํ›„ ๋ฐฐํฌ๋œ ์ฃผ์†Œ๋กœ ์ ‘์†ํ•˜๋Š”๋ฐ ๋ถ„๋ช… ๋กœ์ปฌ์—์„œ๋Š” ์ž˜ ๋ผ์šฐํŒ… ๋˜์–ด ์ ‘์†๋˜์—ˆ๋˜ ์ฃผ์†Œ๊ฐ€, Vercel๋กœ ๋ฐฐํฌํ•œ ์ฃผ์†Œ๋กœ ๋“ค์–ด๊ฐ”์„ ๋•Œ์—๋Š” 404: NOT_FOUNT..

Finds & Notes

์•„์ดํฐ(๋ชจ๋ฐ”์ผ)์—์„œ localhost ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์—ด๊ธฐ

Vite ์œผ๋กœ ์ƒ์„ฑํ•œ React ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐœ๋ฐœ ์„œ๋ฒ„์—์„œ ์‹คํ–‰์‹œํ‚ฌ ๋•Œ ๋ณดํ†ต ํ„ฐ๋ฏธ๋„์—์„œ npm run dev ๋กœ ์‹คํ–‰ํ•˜๋Š”๋ฐ ๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ๋กœ๋„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์„œ ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๋ดค๋‹ค. ๋งฅ๋ถ๊ณผ ์•„์ดํฐ์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์ „์ œํ•˜์— ์„ค๋ช…ํ•ด๋ณด๊ฒ ๋‹ค. ๋ฐฉ๋ฒ• 1. ๋จผ์ € ์•„์ดํฐ๊ณผ ๋งฅ๋ถ์€ ๋™์ผํ•œ ์™€์ดํŒŒ์ด์— ์ ‘์†ํ•ด์•ผํ•œ๋‹ค. 2. ๋งฅ๋ถ ํ„ฐ๋ฏธ๋„์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•œ๋‹ค ipconfig getifaddr en0 ๊ทธ๋Ÿฌ๋ฉด IP ์ฃผ์†Œ๊ฐ€ ๋œจ๋Š”๋ฐ, https:// ๋กœ ๋ชจ๋ฐ”์ผ์—์„œ ์‚ฌํŒŒ๋ฆฌ๋กœ ์ ‘์†ํ•˜๋ฉด ๋œ๋‹ค. ํ•˜์ง€๋งŒ ๋‚˜๋Š” ์ œ๋Œ€๋กœ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์•„์„œ ์ถ”๊ฐ€์ ์ธ ๊ณผ์ •์„ ํ•˜๋‚˜ ๋” ํ•ด์ค˜์•ผํ–ˆ๋‹ค. ref:https://dev.to/bhendi/how-to-open-your-vite-dev-server-on-your-mobile-k1k 3. React ํ”„..

Develop/TypeScript

[Typescript] React์— Typescript ์‚ฌ์šฉํ•˜๋Š” ๋ฒ•

React ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์˜ ์…‹ํŒ…์ด ์™„๋ฃŒ๋œ ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฒ•์ด๋‹ค npx create-react-app ํ”„๋กœ์ ํŠธ๋ช… --template typescript ๋งŒ์•ฝ ๊ธฐ์กด ํ”„๋กœ์ ํŠธ์— ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋งŒ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ„ฐ๋ฏธ๋„์— ์ž…๋ ฅํ•œ๋‹ค npm install --save typescript @types/node @types/react @types/react-dom @types/jest Typescript๋กœ ๋งŒ๋“  React ํ”„๋กœ์ ํŠธ ์ผ๋ฐ˜ ํ”„๋กœ์ ํŠธ์™€ ๋‹ค๋ฅธ ์ ์€ ์ปดํฌ๋„ŒํŠธ ํŒŒ์ผ์— js ๊ฐ€ ์•„๋‹Œ tsx ํ™•์žฅ์ž๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ์—์„œ typescript ๋ฌธ๋ฒ•์„ ์–ด๋””์— ์‘์šฉํ•  ์ˆ˜ ์žˆ์„์ง€ ์•Œ์•„๋ณด์ž JSX ํƒ€์ž…์ง€์ • ๋ฆฌ์•กํŠธ์—์„œ๋Š” ๋ณ€์ˆ˜๋‚˜ ์ž๋ฃŒ์— ๋ฅผ ๋‹ด์•„์„œ ์“ธ ์ˆ˜ ์žˆ๋‹ค. ๋ฆฌ์•กํŠธ..

Review

[๋œ๋‹ค! ๋งฅ๋ถ&์•„์ด๋งฅ - ๋งฅOS ์†Œ๋…ธ๋งˆ] ๋„์„œ๋ฆฌ๋ทฐ

์•ˆ๋…•ํ•˜์„ธ์š” dawonny ์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž ์ง๋ฌด๋ฅผ ํฌ๋งํ•˜๋Š” ์ €๋Š” ๊ฐœ๋ฐœ์„ ํ•  ๋•Œ์— ๋งฅ๋ถ์ด ์ข‹๋‹ค๋Š” ๋ง์„ ์ •๋ง ์ˆ˜์—†์ด ๋“ค์–ด์™”๋Š”๋ฐ์š”.์•„์ดํฐ, ์•„์ดํŒจ๋“œ, ์• ํ”Œ์›Œ์น˜, ์—์–ดํŒŸ… ๋ชจ๋“  ๊ฒŒ ๋‹ค ์• ํ”Œ๊บผ๋ฉด์„œ ์ •์ž‘ ๋…ธํŠธ๋ถ์€ ๋‹ค๋ฅธ ๊ธฐ์—… ์ œํ’ˆ์„ ์“ฐ๊ณ  ์žˆ์—ˆ์–ด์š”.๊ทธ๋ž˜์„œ ์ €๋„ 6๊ฐœ์›” ์ „์ฏค์— ์ฒ˜์Œ์œผ๋กœ ๋งฅ๋ถ์„ ๊ตฌ๋งคํ•˜๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ, ์ •๋ง ๋‹ค๋ฅธ ๊ธฐ๊ธฐ๋“ค๊ณผ์˜ ์—ฐ๋™์„ฑ์ด ์ตœ๊ณ ๋”๋ผ๊ตฌ์š”. ํ˜„์žฌ ์•„์ฃผ ์ž˜ ์“ฐ๊ณ  ์žˆ์–ด์š”!ํ•˜์ง€๋งŒ ์ง€๊ธˆ๊นŒ์ง€ ์จ์™”๋˜ ์œˆ๋„์šฐ ๊ธฐ๋ฐ˜์ด๋ž‘์€ ๊ฝค ๋งŽ์ด ๋‹ค๋ฅด๊ธฐ์— ์ฒ˜์Œ์—” ๋งŽ์ด ํ—ค๋งธ๋˜ ๊ธฐ์–ต์ด ๋‚˜๋„ค์š”.์ฃผ๋ณ€ ๋งฅ๋ถ ์œ ์ € ์ง€์ธ๋“ค์„ ๋ณด๋ฉด์„œ ์„ค์ •์ด๋‚˜ ์œ ์šฉํ•œ ๊ธฐ๋Šฅ๋“ค์„ ํ•˜๋‚˜ํ•˜๋‚˜ ๋ฌผ์–ด๋ณด๊ณ  ๊ตฌ๊ธ€๋งํ•˜๋ฉด์„œ ์ €๋งŒ์˜ ๋งฅ๋ถ ํ™˜๊ฒฝ์„ ์—ด์‹ฌํžˆ ์ปค์Šคํ…€ ํ–ˆ์–ด์š”. ๊ทธ๋Ÿฌ๋‹ค ใ€Š๋œ๋‹ค! ๋งฅ๋ถ&์•„์ด๋งฅ - ๋งฅOS ์†Œ๋…ธ๋งˆใ€‹ ๋„์„œ๋ฅผ ์ข‹์€ ๊ธฐํšŒ๋กœ ๋ฐ›์•„๋ณด๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ์š”.์ฒ˜์Œ์— ๋งฅ๋ถ์„ ์ƒ€์„ ๋•Œ ์ด ์ฑ…์ด ์žˆ..

Develop/TypeScript

[Typescript] Generic

Generic function ํ•จ์ˆ˜(x: unknown[]) { return x[0]; } let a = ํ•จ์ˆ˜([4,2]) console.log(a) ์œ„์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ๋ณด์ž. unknown ํƒ€์ž…์˜ array ์ž๋ฃŒ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด, array์˜ ๋งจ ์•ž ์ฒซ๋ฒˆ์งธ์˜ ์š”์†Œ๋ฅผ ๋ฆฌํ„ดํ•ด์ฃผ๋Š” ํ•จ์ˆ˜๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•ด๋ณด์ž. console.log ๋กœ ์ฝ˜์†”์— ์ฐํžŒ a ์˜ ํƒ€์ž…์€ ๋ญ˜๊นŒ? unknown ์ด๋‹ค. ์ž…๋ ฅํ•˜๋Š” array ๋„ unknown ํƒ€์ž…์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. function ํ•จ์ˆ˜(x: unknown[]) { return x[0]; } let a = ํ•จ์ˆ˜([4,2]) console.log(a + 1) ๋•Œ๋ฌธ์— ์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” ์—๋Ÿฌ๊ฐ€ ๋‚  ๊ฒƒ์ด๋‹ค. ์™œ๋ƒํ•˜๋ฉด a ๋Š” unknown ํƒ€์ž…์ธ๋ฐ, ์ˆซ์ž์ธ 1์„ ๋”ํ•˜๋ ค๊ณ  ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ..

Develop/TypeScript

[Typescript] type import export & namespace

type import export a.ts ํŒŒ์ผ์— ์žˆ๋Š” ๊ฒƒ์„ b.ts์—์„œ ์“ฐ๊ณ ์‹ถ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. (a.ts) export type Name = string | boolean; export type Age = (a :number) => number; (b.ts) import {Name, Age} from './a' let ์ด๋ฆ„ :Name = 'kim'; let ํ•จ์ˆ˜ :Age = (a) => { return a + 10 } namespace ๊ณผ๊ฑฐ์—๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ import export ๋ฌธ๋ฒ•์ด ์—†์—ˆ๋‹ค ๊ทธ๋ž˜์„œ ์ฝ”๋“œ๋ฅผ ์จ์„œ ๋‹ค๋ฅธ ํŒŒ์ผ๋“ค์„ ์ผ์ข…์˜ ์ฒจ๋ถ€์ฒ˜๋Ÿผ ํ–ˆ๋Š”๋ฐ ์ด๋Ÿฌ๋ฉด ํŒŒ์ผ์ด ๋งŽ์•„์งˆ ์ˆ˜๋ก ๋ณ€์ˆ˜๋ช…์ด ๊ฒน์น˜๋Š” ์œ„ํ—˜์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์™ธ๋ถ€ํŒŒ์ผ์—์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๋ณ€์ˆ˜๋“ค์€ ํ•จ์ˆ˜๋กœ ๊ฐ์ŒŒ์—ˆ..

Develop/TypeScript

[Typescript] protected, static

protected class ์— ๊ด€๋ จํ•ด์„œ, extends ๋ผ๋Š” ๋ฌธ๋ฒ•์„ ์“ฐ๋ฉด class ๋ฅผ ๋ณต์‚ฌํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทผ๋ฐ private ์œผ๋กœ ์„ ์–ธํ•œ ๊ฒƒ์€ ๊ธฐ์กด class ์•ˆ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. extends ๋กœ ๋งŒ๋“  class ์—์„œ ์›๋ณธ์˜ class ์†์„ฑ์„ ์“ฐ๊ณ  ์‹ถ๋‹ค๋ฉด protected ๋กœ ์„ ์–ธํ•˜๋ฉด ๋œ๋‹ค. private ์ด๋ž‘ ๊ฐ™์œผ๋ฉด์„œ๋„, extends ๋œ class ์•ˆ์—์„œ๋„ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ค€๋‹ค. class User { protected x = 10; } class NewUser extends User { doThis(){ this.x = 20; } } NewUser class ๋Š” User class ๋ฅผ extends ํ•œ๋‹ค. NewUser ์—์„œ this.x ์ฒ˜๋Ÿผ x ๋ฅผ ์“ฐ๋ ค๊ณ  ํ•˜๋ฉด, ๊ธฐ์กด์— privat..

Develop/TypeScript

[Typescript] public, private

๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด์—์„œ ์ œ๊ณตํ•˜๋Š” public, private, static, protected ์™€ ๊ฐ™์€ ํ‚ค์›Œ๋“œ๋“ค์„ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค. public ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” class ์•ˆ์—์„œ public ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค class User { public name: string; constructor(){ this.name = 'kim'; } } let user1 = new User(); user1.name = 'park'; ์œ„ ์ฝ”๋“œ์—์„œ๋Š” public ์œผ๋กœ ์„ ์–ธ๋œ name ์ด๋ผ๋Š” ์†์„ฑ์ด ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ name ์ฒ˜๋Ÿผ public ์ด ๋ถ™์€ ์†์„ฑ์€ user1๊ณผ ๊ฐ™์€ ์ž์‹ object ๋“ค์ด ๋งˆ์Œ๋Œ€๋กœ ์‚ฌ์šฉ/์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋งŒ์•ฝ public ์„ ์•ˆ ๋ถ™์ธ ์ฑ„๋กœ ๋งŒ๋“ ๋‹ค๊ณ  ํ•ด๋„, ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž๋™์œผ๋กœ ์•„๋ฌด๊ฒƒ๋„ ์•ˆ๋ถ™์ธ ๊ฒฝ..

Develop/React.js

[React] ์Šคํฌ๋กค์— ๋”ฐ๋ผ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ ์šฉํ•˜๊ธฐ (feat. Framer Motion)

์„œ๋น„์Šค ํ™๋ณด ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค๋ฉด์„œ ์Šคํฌ๋กค์— ๋”ฐ๋ผ์„œ ํ™”๋ฉด์— ํŠน์ • ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‚˜ํƒ€๋‚  ๋•Œ, ์œ„์—์„œ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์˜ฌ๋ผ์˜ค๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ ์šฉํ•ด๋ณด๊ณ ์‹ถ์–ด์กŒ์Šต๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ ํƒ ๊ตฌ๊ธ€๋ง์„ ํ•ด๋ณด๋‹ˆ react-reveal ๊ณผ framer motion ์ด๋ผ๋Š” 2๊ฐ€์ง€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์—ˆ๋Š”๋ฐ, react-reveal ์€ ๋งˆ์ง€๋ง‰ ์—…๋ฐ์ดํŠธ๊ฐ€ ์˜ค๋ž˜๋˜๊ธฐ๋„ ํ–ˆ๊ณ  npm install ์„ ํ•ด๋ณด๋‹ˆ ๋ฒ„์ „๋•Œ๋ฌธ์— ์ถฉ๋Œ์ด ๋‚˜๋Š” ๋ถ€๋ถ„์ด ์žˆ์–ด, framer motion ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. framer motion ์„ค์น˜ npm install framer-motion ์ ์šฉ ๋ฐฉ๋ฒ• ์ผ๋‹จ ์ œ๊ฐ€ ๊ตฌํ˜„ํ•˜๋ ค๋Š” ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค. ์Šคํฌ๋กค์— ๋”ฐ๋ผ์„œ ํ™”๋ฉด์— ์ž์‹ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‚˜ํƒ€๋‚˜๋ฉด, ์ž์‹์ปดํฌ๋„ŒํŠธ์— ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ์‹คํ–‰๋  ๊ฒƒ. ์Šคํฌ๋กค์„ ์˜ฌ๋ ค์„œ ์ž์‹์ปดํฌ๋„ŒํŠธ๊ฐ€ ..

Finds & Notes

ai ๋กœ Flow Chart, ์‹œ์Šคํ…œ ๊ตฌ์กฐ๋„ ๊ทธ๋ฆฌ๊ธฐ (feat. mermaid.live)

ํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ธฐํšํ•˜๋ฉด์„œ, ์‹œ์Šคํ…œ ์„ค๊ณ„์— ๋Œ€ํ•œ ํ”Œ๋กœ์šฐ์ฐจํŠธ(flow chart)๋‚˜ ์‹œ์Šคํ…œ ๊ตฌ์กฐ๋„๋ฅผ ๊ทธ๋ฆด ์ผ์ด ๋งŽ์„ ๊ฒƒ์ด๋‹ค. ์ด ๋•Œ ai ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ทธ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•ด๋ณด๋ ค๊ณ ํ•œ๋‹ค. ๋‘ ๊ฐ€์ง€๋งŒ ์žˆ์œผ๋ฉด ๋˜๋Š”๋ฐ, chatGPT์™€ mermaid live ์‚ฌ์ดํŠธ์ด๋‹ค. Flow Chart ๊ทธ๋ฆฌ๊ธฐ ๋จผ์ €, chatGPT์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค. ๋‚˜๋Š” ์˜ˆ์‹œ๋กœ ํ•œ ํ”„๋กœ์ ํŠธ์˜ ํ”Œ๋กœ์šฐ์ฐจํŠธ๋ฅผ ๊ทธ๋ ค๋ณด๋ คํ•œ๋‹ค. ์ด ~~~ ํ”„๋กœ์ ํŠธ์—์„œ ํ•™์ƒ์ด ๊ฐ•์˜์‹ค์„ ๋Œ€์—ฌํ•˜๊ณ  ๋Œ€์—ฌ๋ฅผ ์ทจ์†Œํ•˜๋ฉฐ ๋Œ€์—ฌ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ์Šคํ…œ์„ mermaid.live์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ flowchart ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•ด์ค˜ ๋‚˜๋Š” ์ด ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•ด์„œ mermaid live ๋ผ๋Š” ์‚ฌ์ดํŠธ์— ๋“ค์–ด๊ฐ€ ์™ผ์ชฝ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„์— ๋ถ™์—ฌ๋„ฃ๊ธฐ๋ฅผ ํ–ˆ๋‹ค. https://mer..

Review

Mobile App Developer's Conference (MADC) ํ›„๊ธฐ

์•ˆ๋…•ํ•˜์„ธ์š”. ์–ผ๋งˆ์ „์— ๊ฑด๊ตญ๋Œ€ํ•™๊ต์—์„œ ์—ด๋ฆฐ MADC ์— ๋‹ค๋…€์™”์–ด์š”! ์ผ์‹œ 2023๋…„ 12์›” 02์ผ (ํ† ) ์˜คํ›„ 01:00 - ์˜คํ›„ 07:00 ์ฃผ์ตœ MobileAppDeveloper'sConference ํ–‰์‚ฌ ๊ฐœ์š” Mobile App Developer’s Conference (์ดํ•˜ MADC)๋Š” 12์›” 2์ผ, ๊ฑด๊ตญ๋Œ€ํ•™๊ต ํ•™์ƒํšŒ๊ด€์—์„œ ๊ฐœ์ตœ๋˜๋Š” Android, iOS, Flutter๋ฅผ ๋ชจ๋‘ ์•„์šฐ๋ฅด๋Š” ๊ตญ๋‚ด ์ตœ์ดˆ์˜ ๋ชจ๋ฐ”์ผ ๊ฐœ๋ฐœ์ž ์ปจํผ๋Ÿฐ์Šค์ž…๋‹ˆ๋‹ค. ์„ ์–ธํ˜• UI๋ผ๋Š” ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์˜ ๋“ฑ์žฅ์œผ๋กœ ์„ธ ํ”Œ๋žซํผ์˜ ์ฐจ์ด๊ฐ€ ์ ์  ์ค„์–ด๋“ค๊ณ  ์žˆ๋Š” ๊ฐ€์šด๋ฐ, MADC๋Š” ์„ธ ํ”Œ๋žซํผ์˜ ๊ณตํ†ต์ ๊ณผ ์ฐจ์ด์ ์„ ๋ชจ๋‘ ์‚ดํŽด๋ณด๊ณ , ๊ฐœ๋ฐœ์ž๋“ค์ด ์ž์‹ ์—๊ฒŒ ๋งž๋Š” ํ”Œ๋žซํผ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ์ž๋ฆฌ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ฃผ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž๋“ค์„ ์œ„ํ•œ ํŠน๋ณ„ํ•œ ์„ธ์…˜๋„ ๋งˆ๋ จ๋˜์–ด ์žˆ์Šต..

Ambassador/DEVOCEAN YOUNG

[๋ฐ๋ณด์…˜์˜] ๋ฐ๋ณด์…˜์˜ 2๊ธฐ ์ˆ˜๋ฃŒํ›„๊ธฐ & ๋ฐ๋ณด์…˜์˜์ด๋ž€?

์•ˆ๋…•ํ•˜์„ธ์š”. ๋ฐ๋ณด์…˜์˜ 2๊ธฐ๋กœ ํ™œ๋™ํ•œ ์„œ๋‹ค์›์ž…๋‹ˆ๋‹ค! ๋ฒŒ์จ ์ˆ˜๋ฃŒ์‹๊นŒ์ง€, 2๊ธฐ์˜ ๋ชจ๋“  ํ™œ๋™์ด ๋งˆ๋ฌด๋ฆฌ๋˜์—ˆ์–ด์š”. 9๊ฐœ์›” ๋™์•ˆ ๊ธธ๋‹ค๋ฉด ๊ธด ์‹œ๊ฐ„์ธ๋ฐ ์ •๋ง ๋น ๋ฅด๊ฒŒ ์ง€๋‚˜๊ฐ„ ๊ฒƒ ๊ฐ™์•„์š”. ์ œ๊ฐ€ ๋ฐ๋ณด์…˜์˜ 2๊ธฐ๋กœ ํ™œ๋™ํ•˜๋ฉด์„œ ์ฃผ๋ณ€์—์„œ ๋ฐ๋ณด์…˜์˜์— ๊ด€ํ•œ ์งˆ๋ฌธ์„ ๊ต‰์žฅํžˆ ๋งŽ์ด ๋ฐ›๊ณ , ์ธ์Šคํƒ€๋ฅผ ํ†ตํ•ด์„œ๋„ ๋ฒŒ์จ 3๊ธฐ์— ๋Œ€ํ•ด์„œ ๋ฌผ์–ด๋ณด์‹œ๋Š” ๋ถ„๋“ค๋„ ๊ณ„์‹ ๋ฐ์š”. ๊ทธ๋ž˜์„œ ํ•œ๋ฒˆ ์ˆ˜๋ฃŒ ํ›„๊ธฐ์™€ ํ•จ๊ป˜ ๋ฐ๋ณด์…˜์˜์— ๋Œ€ํ•ด์„œ ์†Œ๊ฐœํ•ด๋ณด๋Š” ํฌ์ŠคํŒ…์„ ์ž‘์„ฑํ•ด๋ณผ๊นŒํ•ฉ๋‹ˆ๋‹ค. ๋ฐ๋ณด์…˜์˜์ด ๋ญ์•ผ? ๋ฐ๋ณด์…˜์˜(DEVOCEAN YOUNG)์€ SKT ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ์ธ '๋ฐ๋ณด์…˜'์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ™œ๋™ํ•˜๋Š” ๋Œ€ํ•™์ƒ ํ…Œํฌ ์ธํ”Œ๋ฃจ์–ธ์„œ ์ธ๋ฐ์š”. ๊ฐœ๋ฐœ๊ณผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ด€๋ จ ์ฝ˜ํ…์ธ ๋“ค์„ ์ฐฝ์ž‘ํ•˜๋ฉฐ ๊ฐœ๋ฐœ์ž ์ƒํƒœ๊ณ„ ๋‚ด์˜ ์†Œํ†ต๊ณผ ๊ณต์œ  ๋ฌธํ™”๋ฅผ ํ™•์‚ฐํ•˜๋Š” ๊ฒƒ์ด ์ฃผ ํ™œ๋™์ด์—์š”! ๋ฐ๋ณด์…˜(DEVOCEAN) ์€ SKT๊ฐ€ SKํ•˜์ด๋‹‰์Šค,..

Review

2023 Devfest WebTech : ์ฑ…์“ฐ๋Š” ๊ฐœ๋ฐœ์ž ํ›„๊ธฐ

์˜ค๋žœ๋งŒ์˜ ํ›„๊ธฐ ์ปจํ…์ธ ์ธ ๊ฒƒ ๊ฐ™๋‹ค! ์ด๋ฒˆ์—” ์„ฑ์ˆ˜ ์•จ๋ฆฌ์Šค๋žฉ์—์„œ ์—ด๋ฆฐ 2023 Devfest WebTech ์— ๋‹ค๋…€์™”๋‹ค. GDG Korea WebTech์—์„œ ์ค€๋น„ํ•œ ์˜คํ”„๋ผ์ธ ์ด๋ฒคํŠธ์ธ๋ฐ, ์ด๋ฒˆ์—๋Š” "์ฑ…์“ฐ๋Š” ๊ฐœ๋ฐœ์ž"๋ผ๋Š” ์ฃผ์ œ์˜€๋‹ค. GDG DevFest ๋Š” GDG ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ์ „ ์„ธ๊ณ„์ ์œผ๋กœ ์ง„ํ–‰ํ•˜๋Š” ์บ ํŽ˜์ธ์ด๋ฉฐ ๊ทธ ์˜ˆ์‹œ๋กœ ํ˜„์žฌ GDG Songdo, Busan ๋“ฑ์—์„œ๋„ ์—์„œ๋„ DevFest ์ฐธ๊ฐ€์‹ ์ฒญ์„ ๋ฐ›๊ณ  ์žˆ๋Š” ์ค‘์ด๋‹ค. ๊ฐœ๋ฐœ์ž์ธ๋ฐ ์ฑ…์„ ์“ด๋‹ค- ๋ผ๋Š” ์ฃผ์ œ๊ฐ€ ๊ถ๊ธˆํ•˜๊ธฐ๋„ ํ–ˆ๊ณ , ์„ธ๋ฏธ๋‚˜ ์ค‘์— '๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ๋ฅผ ์šด์˜ํ•˜๋ฉฐ ๊ฐœ๋ฐœ ์กฐ์ง์˜ ์„ฑ์žฅ ๊ณผ์ •์„ ๊ธฐ๋กํ•˜๋Š” ๋ฐฉ๋ฒ•' ์— ๊ด€์‹ฌ์ด ์ƒ๊ธฐ๊ธฐ๋„ ํ•ด์„œ ์–ผ๋ฆฌ๋ฒ„๋“œ ํ‹ฐ์ผ“์„ ๊ตฌ๋งคํ•ด ๊ฐ”๋‹ค. ์‹œ๊ฐ„ํ‘œ 14:40 ~ 15:00 - ์ž…์žฅ ๋ฐ ์ฐธ๊ฐ€ ๋“ฑ๋ก 15:10 - ํ‚ค๋…ธํŠธ 15:10 - 15:40 ์ฑ…์“ฐ๋Š” ๊ฐœ๋ฐœ์ž..

Develop/Flutter & Dart

[Flutter][์˜ค๋ฅ˜] unable to load image asset ์ด๋ฏธ์ง€ ์ถ”๊ฐ€ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ

๋ฌธ์ œ ์ด๋ฏธ์ง€๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋Š”๋ฐ 'unable to load image asset' ์ด๋ผ๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋œจ๋ฉด์„œ ์ด๋ฏธ์ง€๊ฐ€ ๋ Œ๋”๋ง ๋˜์ง€ ์•Š๋Š”๋‹ค. 1. pubspec.yaml ํŒŒ์ผ ์ œ๋Œ€๋กœ ์ผ๋Š”์ง€ ํ™•์ธ ๋„์–ด์“ฐ๊ธฐ๋„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘์„ฑํ–ˆ๋‹ค. 2. ์ด๋ฏธ์ง€ ๊ฒฝ๋กœ๋ฅผ ์ž˜ ์ผ๋Š”์ง€ ํ™•์ธ ์˜คํƒ€์—†์ด ์ž˜ ์ž‘์„ฑํ–ˆ๋‹ค. 3. ์ตœํ›„์˜ ์ˆ˜๋‹จ ์‹คํ–‰์‹œํ‚ค๋˜ ๊ฑธ ์ค‘๋‹จํ•˜๊ณ , ํ„ฐ๋ฏธ๋„์— ๋“ค์–ด๊ฐ€ flutter clean ๋ช…๋ น์–ด๋ฅผ ์ž‘์„ฑํ•˜๊ณ  enter ๋ฅผ ๋ˆ„๋ฅธ๋‹ค. ์ดํ›„์— ์ฝ”๋“œ๋“ค์— ์˜ค๋ฅ˜๊ฐ€ ๊ฐ‘์ž๊ธฐ ์—„์ฒญ ๋งŽ์ด ์ƒ๊ธฐ๋Š”๋ฐ, ์‹ ๊ฒฝ์“ฐ์ง€๋ง๊ณ  ๋‹ค์‹œ ๋””๋ฒ„๊น…์„ ์‹คํ–‰ํ•œ๋‹ค. ์ด๋ฏธ์ง€๊ฐ€ ์ž˜ ๋ Œ๋”๋ง ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

Develop/React.js

[React.js] react-cookie / ๋งŒ๋ฃŒ์‹œ๊ฐ„ ์„ค์ •ํ•˜๊ธฐ

๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€์˜ ๊ฐ„๋‹จํ•œ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ํ•˜๋Š”๋ฐ ๋ฐฑ์—”๋“œ ์—†์ด ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด์•ผํ•˜๋Š” ์ƒํ™ฉ์ด์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‹จ์ˆœํ•˜๊ฒŒ ํŠน์ • ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ–ˆ์„ ๋•Œ ํŠน์ • ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋„๋ก ์ฝ”๋“œ๋ฅผ ์งœ๋ฉด ์ƒˆ๋กœ๊ณ ์นจ ํ–ˆ์„ ๋•Œ ๋‹ค์‹œ ๋กœ๊ทธ์ธ์„ ํ•ด์•ผํ•œ๋‹ค๋Š” ๋ถˆํŽธํ•จ์ด ์žˆ์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์–ด๋–ค ๋ฐฉ์‹์„ ์“ธ๊นŒ ์ƒ๊ฐํ•˜๋‹ค๊ฐ€ ์ฟ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค. ๋‚˜๋Š” ์ฟ ํ‚ค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ react-cookie(๋ฆฌ์•กํŠธ ์ฟ ํ‚ค)๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. ์ฟ ํ‚ค๋ž€ localStorage ๋ฅผ ์ด์ „์— ์“ด ์ ์ด ์žˆ๋Š”๋ฐ ์ด๊ฒƒ๊ณผ ์œ ์‚ฌํ•˜๋‹ค๊ณ  ๋А๊ผˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ key์™€ value, ๋งŒ๋ฃŒ๊ธฐํ•œ์ด ์žˆ๋Š” ์ €์žฅ์†Œ ๊ฐœ๋…์ด๋ฉฐ, ๋ธŒ๋ผ์šฐ์ €์— ์ €์žฅ์ด ๋œ๋‹ค. ๋ธŒ๋ผ์šฐ์ €(ํด๋ผ์ด์–ธํŠธ)์— 300๊ฐœ๊นŒ์ง€ ์ €์žฅ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ 1๊ฐœ์˜ ์ฟ ํ‚ค ๋‹น 4KB ์ •๋„์˜ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ ํ•œ๋‹ค. ์„ค์น˜ npm install reac..

wonny_dev
WonnyDocs

...