profile
ํ”„๋ก ํŠธ๋Š” ์ˆœํ•ญ์ค‘ ยฟยฟ
ํƒœ๊ทธ ๋ชฉ๋ก
์ „์ฒด๋ณด๊ธฐ (79)TIL(26)JavaScript(13)next.js(11)React(10)typescript(7)reactjs(6)Tailwind CSS(6)์•Œ๊ณ ๋ฆฌ์ฆ˜(4)WIL(3)Modifier(3)tailwind(3)nextjs(3)setState(2)zod(2)git(2)useForm(2)useEffect(2)gradient(1)generateMetadata(1)migrations(1)hooks(1)CloudFlare Images(1)edge runtime(1)register(1)Dynamic Routes(1)prisma(1)data fetching(1)link(1)Loading Components(1)invalid(1)matcher(1)superRefine(1)framework(1)library(1)mobile first(1)image(1)classes(1)responsive(1)Prisma Studio(1)plugin(1)has-[](1)1password(1)validation(1)yarn(1)create-next-app@latest(1)useSetRecoilState(1)useformstate(1)useActionState(1)createObjectURL(1)animate-bounce(1)react hook form(1)router(1)ํ•˜์ด๋“œ๋ ˆ์ด์…˜(Hydration)(1)peer(1)Recoil(1)await(1).safeParse(1)globals.css(1)abstract class(1)empty(1)Non-null assertion operator(1)async(1)Just-in-Time Mode(1)prisma client(1)useformstatus(1)useParams(1)useRecoilValue(1)ํšŒ์›๊ฐ€์ž…ํ”„๋กœ์„ธ์Šค์š”์•ฝ(1)useRouteMatch(1)React-query devtools(1)php(1)group-focus-within(1)๋ฌธ์ž์—ด(1)Refine(1)Parallel Requests(1)์„ค์น˜(1)์ธ์Šคํ„ด์Šค(1)arraybuffer(1)๋А๋‚Œํ‘œ(1)Route Groups(1)layouts(1)tailwind.config.ts(1)interface(1)Tailwind CSS IntelliSense(1)lg(1)bcrypt(1)build(1)watch(1)react-query(1)Group(1)coerce(1)sqlite(1)Route Handlers(1)middleware(1)animate()(1)repository(1)xl(1)hook(1)animate-ping(1)CSR(1)SSR(1)not found(1)type(1)animate-pulse(1)error handling(1)onsubmit(1)sm(1)Metadata(1)models(1)daisyui(1)dynamic metadata(1)remote remove(1)Fetch(1)spa(1)Vercel(1)github(1)validator(1)JSX(1)2xl(1)use client(1)z.NEVER(1)rendering(1)password generator(1)heroicons(1)Iron-session(1)animate-spin(1)์ƒํƒœ๊ด€๋ฆฌ(1)fallback(1)Suspense(1)promise.all(1)์ƒ์„ฑ์ž(1)Server Actions(1)ring(1)vscode(1)usePathname(1)prefetch(1)scope(1)md(1).parse()(1)

[TIL] ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ - ! (๋А๋‚Œํ‘œ) ์ด๊ฒŒ ๋ญ๊ธธ๋ž˜? Non-Null Assertion Operator

์˜ค๋Š˜ ๊ณต๋ถ€ํ•œ๊ฒƒ & ๊ธฐ์–ตํ•˜๊ณ  ์‹ถ์€ ๋‚ด์šฉ typescript์™€ next.js๋ฅผ ์ ‘๋ชฉ์‹œ์ผœ์„œ ์ฝ”๋“œ๋ฅผ ์งœ๊ณ  ์žˆ๋Š”๋ฐ, ๊ฐ€๋”์”ฉ ๋А๋‚Œํ‘œ๊ฐ€ ๋‚˜์™”๋‹ค. ๋‚ด๊ฐ€ ์•„๋Š” ๋А๋‚Œํ‘œ๋Š” ๋ถ€๋“ฑํ˜ธ์™€ ํ•จ๊ป˜ ์•ž์— ์‚ฌ์šฉํ•˜๋Š” not์˜ ์˜๋ฏธ๋ฐ–์— ๋ชฐ๋ž๋Š”๋ฐ, ๋“œ๋ฌธ๋“œ๋ฌธ ๋’ค์— ๋А๋‚Œํ‘œ๊ฐ€ ์ฐํžˆ๋Š” ๊ฒƒ์ด๋‹ค. ์ €๊ฒŒ ๋ญ˜๊นŒ ์ €๊ฒŒ ๋ญ˜

2024๋…„ 12์›” 6์ผ
ยท
0๊ฐœ์˜ ๋Œ“๊ธ€
ยท

[TIL] Next.js ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ - createObjectURL, arrayBuffer, CloudFlare Images

์˜ค๋Š˜ ๊ณต๋ถ€ํ•œ๊ฒƒ & ๊ธฐ์–ตํ•˜๊ณ  ์‹ถ์€ ๋‚ด์šฉ createObjectURL URL.createObjectURL์€ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋กœ์ปฌ ํŒŒ์ผ์„ ๋กœ๋“œํ•˜์—ฌ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค. ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋กœ์ปฌ ํŒŒ์ผ์„ ๊ฐ„๋‹จํžˆ ๋กœ๋“œ ๊ฐ€๋Šฅ ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜๊ธฐ ์ „์— ์‚ฌ์šฉ์ž์—๊ฒŒ

2024๋…„ 12์›” 5์ผ
ยท
0๊ฐœ์˜ ๋Œ“๊ธ€
ยท

[TIL] Zod - superRefine, z.NEVER

์˜ค๋Š˜ ๊ณต๋ถ€ํ•œ๊ฒƒ & ๊ธฐ์–ตํ•˜๊ณ  ์‹ถ์€ ๋‚ด์šฉ .superRefine ctx.addIssue๋ฅผ ํ†ตํ•ด ์›ํ•˜๋Š” ๋งŒํผ ์ด์Šˆ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•จ์ˆ˜ ์‹คํ–‰ ์ค‘์— ctx.addIssue๊ฐ€ ํ˜ธ์ถœ๋˜์ง€ ์•Š์œผ๋ฉด ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๊ฐ€ ํ†ต๊ณผ fatal: true ์„ค์ • ์‹œ, ๊ทธ ๋‹ค์Œ refine์ด ์‹คํ–‰

2024๋…„ 12์›” 4์ผ
ยท
0๊ฐœ์˜ ๋Œ“๊ธ€
ยท

[TIL] Next.js - Image ์ปดํฌ๋„ŒํŠธ

์˜ค๋Š˜ ๊ณต๋ถ€ํ•œ๊ฒƒ & ๊ธฐ์–ตํ•˜๊ณ  ์‹ถ์€ ๋‚ด์šฉ Image ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ณธ jsx img๊ฐ€ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ฐ•๋ ฅํ•œ๊ธฐ๋Šฅ์„ ์ง€์›ํ•œ๋‹ค. ๋กœ๋”ฉ ์ „ํ›„๋กœ ์ปดํฌ๋„ŒํŠธ ์œ„์น˜๊ฐ€ ๋ฐ€๋ฆฌ๋Š” content shift๋ฅผ ๋ฐฉ์ง€ํ•œ๋‹ค. ์••์ถ•๋ฅ ์ด๋‚˜, ํ™”๋ฉด ํฌ๊ธฐ๋ณ„ ์••์ถ• ์˜ต์…˜์„ ์ œ๊ณตํ•œ๋‹ค. ํ•„์ˆ˜ prop์œผ๋กœ

2024๋…„ 12์›” 3์ผ
ยท
0๊ฐœ์˜ ๋Œ“๊ธ€
ยท

[TIL] Next.js - Middleware, Matcher, Edge Runtime

๋ง ๊ทธ๋Œ€๋กœ ์ค‘๊ฐ„์—์„œ ๋™์ž‘ํ•˜๋Š” ์ผ์ข…์˜ ์†ŒํŠธํ”„์›จ์–ด๋ฅผ ๋œปํ•œ๋‹ค. ์–ด๋–ค ๊ฒƒ๊ณผ ๋‹ค๋ฅธ๊ฒƒ ์‚ฌ์ด์—์„œ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ.๋ฏธ๋“ค์›จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด request๊ฐ€ ์™„๋ฃŒ๋˜๊ธฐ ์ „์— ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.์ด๋ฏธ์ง€, CSS, JS, Favicon ์š”์ฒญ ๋“ฑ ์›น ์‚ฌ์ดํŠธ์˜ ๋ชจ๋“  ๋‹จ์ผ request ํ•˜๋‚˜ํ•˜๋‚˜ ๋งˆ

2024๋…„ 12์›” 2์ผ
ยท
0๊ฐœ์˜ ๋Œ“๊ธ€
ยท

[TIL] Database Validation, bcrypt, iron-session

์˜ค๋Š˜ ๊ณต๋ถ€ํ•œ๊ฒƒ & ๊ธฐ์–ตํ•˜๊ณ  ์‹ถ์€ ๋‚ด์šฉ bcrypt ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํ•ด์‹œํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ•ด์‹œํ•จ์ˆ˜๋Š” ๋‹จ๋ฐฉํ–ฅ ๋ฉฑ๋“ฑ์„ฑ ํ•จ์ˆ˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๊ทธ๋Œ€๋กœ ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.(ํ•ดํ‚น์˜ ์œ„ํ—˜์„ฑ) ์ •ํ•ด์ง„ ์ž…๋ ฅ์— ๋”ฐ๋ผ ์ •ํ•ด์ง„ ๋‚œ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•จ bcryptํ•˜๋Š” ์ด์œ  ๋ณด์•ˆ์ƒ ๋ฐ์ดํ„ฐ๊ฐ€

2024๋…„ 12์›” 1์ผ
ยท
0๊ฐœ์˜ ๋Œ“๊ธ€
ยท

[TIL] Validation - validator, coerce

๋ฌธ์ž์—ด ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌcoerce๋Š” ๊ธฐ๋ณธ ๊ฐ’์„ ๊ฐ•์ œ๋กœ ๋ณ€ํ™˜๋‚ด์žฅ ์ƒ์„ฑ์ž(String(input), Number(input), new Date(input) ๋“ฑ))๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ์ž…๋ ฅ์„ ๊ฐ•์ œํ•จinput์˜ ๊ฐ’์€ ํ•ญ์ƒ string์œผ๋กœ ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ์ „ํ™”๋ฒˆํ˜ธ ๊ฐ™์€๊ฑด ๊ผญ n

2024๋…„ 11์›” 30์ผ
ยท
0๊ฐœ์˜ ๋Œ“๊ธ€
ยท

[TIL] Prisma ๊ธฐ์ดˆ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‚ฌ์ด์—์„œ ํ†ต์—ญ์‚ฌ ์—ญํ• ์„ ํ•ด์ฃผ๋Š” ๋„๊ตฌ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋งž์ถฐ ํ•„์š”ํ•œ ํŒŒ์ผ์ด๋‚˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํŒŒ์ผ์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์ •๋ง ์œ ์šฉํ•จSQL์„ ๋ชฐ๋ผ๋„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ค˜์„œ ๊ฐœ๋ฐœ ์ดˆ๋ณด์ž์—๊ฒŒ๋„ ์œ ์šฉํ•จ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

2024๋…„ 11์›” 28์ผ
ยท
0๊ฐœ์˜ ๋Œ“๊ธ€
ยท

[TIL] Next.js - Zod (refine, ์ •๊ทœํ‘œํ˜„์‹ ํ‘œํ˜„)

Zod์—๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ž์—ด ๊ด€๋ จ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.(https://zod.dev/?id=strings)๋ฌธ์ž์—ด ์Šคํ‚ค๋งˆ๋ฅผ ๋งŒ๋“ค ๋•Œ ๋ช‡ ๊ฐ€์ง€ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.const name = z.string({required_error: "Name์€

2024๋…„ 11์›” 27์ผ
ยท
0๊ฐœ์˜ ๋Œ“๊ธ€
ยท

[TIL] Next.js - Zod

npm i zodserver action์œผ๋กœ ๋ณด๋‚ด๋Š” ๋ฐ์ดํ„ฐ์˜ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์— ๋„์›€์„ ์ค€๋‹ค. ๋˜ํ•œ ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜(์˜ˆ: ๊ธฐ๋ณธ๊ฐ’ ์ถ”๊ฐ€, ํ˜•์‹ ๋ณ€ํ™˜)์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.์˜ˆ๋ฅผ ๋“ค์–ด Username์„ 3์ž~10์ž๋กœ ์„ค์ •ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด Zod์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด์ฃผ๋ฉด Zod๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ๋ชจ๋“  i

2024๋…„ 11์›” 26์ผ
ยท
0๊ฐœ์˜ ๋Œ“๊ธ€
ยท

[TIL] Next.js - Server Actions, useFormStatus, useFormState, useActionState

Next.js๋Š” POST ์š”์ฒญ ์ฒ˜๋ฆฌ๋ฅผ ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” Server Actions๋ฅผ ์ œ๊ณตํ•œ๋‹ค.Next.js 13 ์ด์ƒ ๋ฒ„์ „์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ํ•˜๋‹ค.์ด์ „์—๋Š” POST ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด route handler๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ–ˆ์ง€๋งŒ, ์ด์ œ "use server" ํ‚ค์›Œ๋“œ

2024๋…„ 11์›” 25์ผ
ยท
0๊ฐœ์˜ ๋Œ“๊ธ€
ยท

[TIL] Next.js - Route Handlers

๊ธฐ์กด next.js ๋ฒ„์ „์—์„œ๋Š” API route๋ฅผ ๋งŒ๋“ค์–ด์„œ post, delete, get ๋“ฑ์˜ ๋ชจ๋“  ์š”์ฒญ์„ ๋ณด๋ƒˆ๋‹ค.ํ•˜์ง€๋งŒ ์ตœ์‹ ๋ฒ„์ „(14)์—๋Š” ์ด ๋ฐฉ๋ฒ• ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋” ํŽธํ•œ ๋ฐฉ๋ฒ•์ด ๋„์ž…๋˜์—ˆ๋‹ค.์–ด๋–จ๋•Œ๋Š” GET ์š”์ฒญ์„ ๋ฐ›์„ ๊ฒƒ์ด๊ณ , ์–ด๋–จ ๋•Œ๋Š” POST ์š”์ฒญ์„ ๋ฐ›์„ ๊ฒƒ์ด๋‹ค.

2024๋…„ 11์›” 24์ผ
ยท
0๊ฐœ์˜ ๋Œ“๊ธ€
ยท

[TIL] Tailwind CSS ๊ธฐ์ดˆ - 6 (Heroicons)

Tailwind CSS ์ œ์ž‘์ž๊ฐ€ ์†์œผ๋กœ ๋งŒ๋“  ์•„๋ฆ„๋‹ค์šด SVG ์•„์ด์ฝ˜ (๋ฌด๋ฃŒ ์•„์ด์ฝ˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)์ˆœ์ˆ˜ SVG ์•„์ด์ฝ˜์œผ๋กœ. Tailwind์˜ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค์™€ ์‰ฝ๊ฒŒ ๊ฒฐํ•ฉํ•˜์—ฌ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ๊ฐ€๋Šฅhttps://heroicons.com์„ค์น˜: npm install @hero

2024๋…„ 11์›” 23์ผ
ยท
0๊ฐœ์˜ ๋Œ“๊ธ€
ยท

[TIL] Tailwind CSS ๊ธฐ์ดˆ - 5 (Just-in-Time, tailwind.config.ts, globals.css, plugin)

์˜ค๋Š˜ ๊ณต๋ถ€ํ•œ๊ฒƒ & ๊ธฐ์–ตํ•˜๊ณ  ์‹ถ์€ ๋‚ด์šฉ TailWind๋Š” ๊ธฐ์กด์˜ css ํ”„๋ ˆ์ž„์›Œํฌ์ฒ˜๋Ÿผ ๊ณ ์ •๋œ cssํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค ๊ธฐ๋ฐ˜์˜ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ณ , ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์ง•์„ ๊ฐ–๊ณ  ์žˆ๋‹ค. (์š”์ฒญ์— ๋”ฐ๋ผ ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์ž„) ํŠน์ง• ๋ฏธ๋ฆฌ ์ •์˜๋œ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜

2024๋…„ 11์›” 22์ผ
ยท
0๊ฐœ์˜ ๋Œ“๊ธ€
ยท

[TIL] Tailwind CSS ๊ธฐ์ดˆ - 4 (odd, even, first, last, animate, empty, group)

์˜ค๋Š˜ ๊ณต๋ถ€ํ•œ๊ฒƒ & ๊ธฐ์–ตํ•˜๊ณ  ์‹ถ์€ ๋‚ด์šฉ odd: ์ž์‹ ์š”์†Œ ์ค‘ ํ™€์ˆ˜๋ฒˆ์งธ์—๋งŒ ์Šคํƒ€์ผ ์ค„๋•Œ ์‚ฌ์šฉ odd:bg-gray-100 CSS์—์„œ :nth-child(odd) ์— ํ•ด๋‹น even: ์ž์‹ ์š”์†Œ ์ค‘ ์ง์ˆ˜๋ฒˆ์งธ์—๋งŒ ์Šคํƒ€์ผ ์ค„๋•Œ ์‚ฌ์šฉ even:bg-cyan-100 CSS์—์„œ

2024๋…„ 11์›” 21์ผ
ยท
0๊ฐœ์˜ ๋Œ“๊ธ€
ยท

[TIL] Tailwind CSS ๊ธฐ์ดˆ - 3 (gradient, invalid:, peer: )

์˜ค๋Š˜ ๊ณต๋ถ€ํ•œ๊ฒƒ & ๊ธฐ์–ตํ•˜๊ณ  ์‹ถ์€ ๋‚ด์šฉ gradient: Search .bg-gradient-to-tr { background-image: linear-gradient(to top right, var(--tw-gradient-stops)); } .from-cy

2024๋…„ 11์›” 20์ผ
ยท
0๊ฐœ์˜ ๋Œ“๊ธ€
ยท

[TIL] Tailwind CSS ๊ธฐ์ดˆ - 2 (Responsive Modifiers)

Tailwind CSS๋Š” ๋ชจ๋ฐ”์ผ ์šฐ์„ ์ด๋‹ค.์ž‘์„ฑํ•˜๋Š” css๋Š” ๋ชจ๋‘ ์†Œํ˜• ๊ธฐ๊ธฐ์— ์ ์šฉ๋œ๋‹ค๋Š” ๋œป์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋” ํฐ ํ™”๋ฉด์— ์ ์šฉ์‹œํ‚ค๋Š” modifier๋“ค์ด ์กด์žฌํ•œ๋‹ค. Tailwind Css๋Š” ๋ชจ๋ฐ”์ผ ๋””์ž์ธ์„ ๋จผ์ € ๊ตฌํ˜„ํ•˜๊ณ  ๊ทธ ๋’ค์— ํฐ ํ™”๋ฉด์œผ๋กœ ํ‚ค์›Œ๊ฐ€๋Š” ๊ฒƒ์„ ๋ช…์‹ฌํ•˜์ž.๋‹ค

2024๋…„ 11์›” 19์ผ
ยท
0๊ฐœ์˜ ๋Œ“๊ธ€
ยท

[TIL] Tailwind CSS ๊ธฐ์ดˆ - 1 (modifier, ring)

Tailwind๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ์— ์•ž์„œ vscode์— ๊ผญ ์„ค์น˜ํ•ด์•ผ ํ•˜๋Š” ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค.์ž๋™์™„์„ฑ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ณ , ์‚ฌ์šฉํ•  ์ƒ‰์ƒ ๊ฐ’์ด๋‚˜ ๊ธฐ์กด css ์ฝ”๋“œ๋ฅผ ์•Œ๋ ค์ค˜์„œ ๋ณด๊ธฐ๊ฐ€ ํŽธํ•˜๋‹ค.class ์ค‘๋ณต์ด ์žˆ๊ฑฐ๋‚˜ ์˜คํƒ€๊ฐ€ ์žˆ์„๋•Œ๋„ ์•Œ๋ ค์ฃผ๊ธฐ์— ๊ต‰์žฅํžˆ ์œ ์šฉํ•˜๋‹ค.tailwind.config

2024๋…„ 11์›” 18์ผ
ยท
0๊ฐœ์˜ ๋Œ“๊ธ€
ยท

Next.js ํ”„๋กœ์ ํŠธ ๋งŒ๋“ค๊ธฐ(์ดˆ๊ธฐํ™”)

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด next.js ์ตœ์‹  ๋ฒ„์ „์ด ์„ค์น˜ ๋œ๋‹ค.๋‹ค๋ฅธ ๋ฒ„์ „ ์„ค์น˜๋ฅผ ์›ํ•œ๋‹ค๋ฉด latest๋Œ€์‹  ๋ฒ„์ „์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.ex) nextjs14๋ฒ„์ „ ์„ค์น˜๋ฅผ ์›ํ•œ๋‹ค๋ฉด npx create-next-app@14 ์ž…๋ ฅ!์„ค์น˜๋ฅผ ํ•˜๊ฒŒ๋˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์งˆ๋ฌธ์ด ๋‚˜์˜จ๋‹ค!๊ทธ๋ƒฅ ์—”ํ„ฐ์น˜๋ฉด ๋จ!!

2024๋…„ 11์›” 18์ผ
ยท
0๊ฐœ์˜ ๋Œ“๊ธ€
ยท

Vercel๋กœ ๋ฐฐํฌํ•˜๊ธฐ

package.json์— ์ฝ”๋“œ ์ถ”๊ฐ€ -> ์ด ๋ช…๋ น์–ด๋“ค์€ ์ง์ ‘ ํ˜ธ์ถœํ•˜์ง„ ์•Š๊ณ  vercel์ด ํ˜ธ์ถœํ•˜๋Š” ์šฉ์œผ๋กœ ๋„ฃ์–ด์คŒvercel ํ™ˆํŽ˜์ด์ง€ ๋“ค์–ด๊ฐ 1\. Add New > Project2\. ๋‚ด ๊นƒํ—ˆ๋ธŒ ๋””๋ ‰ํ† ๋ฆฌ๋ž‘ ์—ฐ๊ฒฐํ•ด์„œ ๋งž๋Š” ํ”„๋กœ์ ํŠธ import3\. Project Name

2024๋…„ 11์›” 15์ผ
ยท
0๊ฐœ์˜ ๋Œ“๊ธ€
ยท