[์‚ฌ๋žŒ๋ณ„] Next.js ์—๋Ÿฌ ํ•ธ๋“ค๋ง (error.tsx)

๋ฌธ์ œ ์ƒํ™ฉNext.js๋ฅผ ์‚ฌ์šฉํ•ด ์บ˜๋ฆฐ๋” ํŽ˜์ด์ง€๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ์ค‘,Supabase ํ†ต์‹  ์ค‘ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ๋ฅผ ํŽ˜์ด์ง€ ๋ผ์šฐํ„ฐ ์„ธ๊ทธ๋จผํŠธ ๋‚ด์˜ error.tsx๋กœ ํ†ตํ•ฉํ•ด์„œ ์ฒ˜๋ฆฌํ•˜๋ ค ํ–ˆ๋‹ค.ํ•˜์ง€๋งŒ ์—๋Ÿฌ๋ฅผ ๋˜์งˆ ๋•Œ ๋‚ด๊ฐ€ ์ง€์ •ํ•œ ๋ฉ”์‹œ์ง€์™€ ๋Ÿฐํƒ€์ž„ ์ค‘ ๋ฐœ์ƒํ•˜๋Š” ์‹œ์Šคํ…œ ๋ฉ”์‹œ์ง€๊ฐ€ ์„ž์—ฌ ๋‚˜์˜ค๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค.๋˜ํ•œ, app/api/**/route.ts (๋ผ์šฐํŠธ ํ•ธ๋“ค๋Ÿฌ)supabase ํ˜ธ์ถœ ํ•จ์ˆ˜(fetch)ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ (page.tsx)ํƒ ์Šคํƒ ์ฟผ๋ฆฌ(useQuery)์ด๋ ‡๊ฒŒ ์—ฌ๋Ÿฌ ๋ ˆ์ด์–ด๋ฅผ ๊ฑฐ์น˜๋ฉด์„œ ์—๋Ÿฌ ํ๋ฆ„์„ ๊น”๋”ํ•˜๊ฒŒ ์žก๋Š” ๊ฒƒ๋„ ๊ณ ๋ฏผ์ด ํ•„์š”ํ–ˆ๋‹ค. ์ตœ์ข…์ ์ธ ์—๋Ÿฌ ํ๋ฆ„์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.๋ผ์šฐํŠธ ํ•ธ๋“ค๋Ÿฌ์„ฑ๊ณตor์—๋Ÿฌ๋ฅผ ๊ฐ์ฒด ํ˜•ํƒœ๋กœ ๋ฐ›์•„์„œ return ๐Ÿ‘‰๐Ÿป ํŽ˜์ด์ง€์—์„œ ์—๋Ÿฌ ๊ฐ์ฒด๋ฅผ ์žก์•„์„œ throw ๐Ÿ‘‰๐Ÿป error.tsx ์žก์Œ ๋”๋ณด๊ธฐimpo..

Language/Next 2025. 4. 26. 23:07
[/\/] Route Handler, Server-Action

์ง€๋‚œ ๊ฐœ์ธ ๊ณผ์ œ๋ถ€ํ„ฐ ๋„ˆ๋ฌด ํ—ท๊ฐˆ๋ฆฌ๋Š” ๋ผ์šฐํŠธ ํ•ธ๋“ค๋Ÿฌ, ์„œ๋ฒ„ ์•ก์…˜๋”๋ณด๊ธฐ[๊ธฐ์กด ์ง€์‹]๋ผ์šฐํŠธ ํ•ธ๋“ค๋Ÿฌ๋Š” ์ฃผ๋กœ ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋ฉฐ GET, POST ๋“ฑ์„ ์ด์šฉํ•ด์„œ ์„œ๋ฒ„๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ ,๋‚˜์˜ ๋กœ์ปฌํ˜ธ์ŠคํŠธ ์„œ๋ฒ„๋กœ ์‘๋‹ต์„ ์ค€๋‹ค. ์„œ๋ฒ„ ์•ก์…˜์€ ์ฃผ๋กœ ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋ฉฐ ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์š”์ฒญํ•˜๊ณ  ์‘๋‹ต์„ ๋ฐ›๋Š”๋‹ค.์ •๋„๋กœ ์•Œ๊ณ  ์žˆ์—ˆ๋‹ค. ๋‘˜์˜ ์ฐจ์ด์ ์€ ์‘๋‹ต์„ ์‚ฌ์šฉํ•˜๋Š” ๋ถ€๋ถ„์— ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.๋ผ์šฐํŠธ ํ•ธ๋“ค๋Ÿฌ : ํ•ธ๋“ค๋Ÿฌ -> ๋‚ด ์„œ๋ฒ„ ํ•จ์ˆ˜ -> ์‹ค์ œ ์‚ฌ์šฉ์„œ๋ฒ„ ์•ก์…˜ : ํ•จ์ˆ˜ -> ์‹ค์ œ ์‚ฌ์šฉ๋‘˜์˜ ํŠน์ง•์„ ํ™•์‹คํžˆ ๋น„๊ตํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค.Route Handler// app/api/hello/route.tsimport { NextResponse } from "next/server";// 1. GET ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•ธ๋“ค๋Ÿฌexport ..

Language/Next 2025. 3. 22. 02:05
[/\/] Next.js์—์„œ ๋งํ•˜๋Š” '์„œ๋ฒ„'๋ž€?

Next.js๋Š” ์›น์„ ๋งŒ๋“ค๊ธฐ ๋•Œ๋ฌธ์— ์›น ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค.๊ทธ๋ ‡๋‹ค๋ฉด Next์—์„œ์˜ '์›น ์„œ๋ฒ„'๋ž€ ๋ฌด์—‡์ผ๊นŒ? React์˜ ์›น ์„œ๋ฒ„์˜ ์—ญํ• ์€ ๋นŒ๋“œ ์‹œ์ ์— ๋นˆ html(id๊ฐ€ root์ธ ๋นˆ divํƒœ๊ทธ)๊ณผ JS ๋ฒˆ๋“ค ํŒŒ์ผ์„ ์ œ๊ณตํ•œ๋‹ค.๊ทธ๊ฒƒ์„ ๋ฐ›์€ ๋ธŒ๋ผ์šฐ์ €๋Š” ์•Œ์•„์„œ JS๋ฅผ ํ•ด์„ํ•˜์—ฌ ๋นˆ ํƒœ๊ทธ์— JS ํŒŒ์ผ๋“ค์„ ๋ฐ”๊ฟ” ๋ผ์šฐ๋Š” ํ˜•์‹์œผ๋กœ ํŽ˜์ด์ง€๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค.๋ธŒ๋ผ์šฐ์ €๋Š” ๋นˆ html์„ ๋ฐ›์•˜๊ธฐ ๋•Œ๋ฌธ์— JS๋ฅผ ์ธ์‹ํ•  ๋•Œ๊นŒ์ง€ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ์ˆ˜ ๋ฐ–์— ์—†๋‹ค. ์ฆ‰, TTV๊ฐ€ ๊ธธ๋‹ค.ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(CSR)์ด ๋ฐ”๋กœ ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์ด๋‹ค. Next.js์˜ ์›น ์„œ๋ฒ„์˜ ์—ญํ• ์€ ๋นŒ๋“œ ์‹œ์ (SSG)๊ณผ ์š”์ฒญ ์‹œ์ (SSR)์— HTML์„ ์ƒ์„ฑํ•˜๊ณ  API ๋ผ์šฐํŠธ๋ฅผ ํ†ตํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.๋‚˜๋ˆ„์ž๋ฉด html์€ ํ”„๋ก ํŠธ์—”๋“œ, API๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฑด ..

Language/Next 2025. 3. 19. 22:19
[/\/] Error Handling

Next.js๋ฅผ ํ™œ์šฉํ•œ ๊ฐœ์ธ ๊ณผ์ œ๋ฅผ Vercel์—์„œ ๋ฐฐํฌํ•ด๋ณด์•˜๋‹ค.๋ถ„๋ช… ๊ฐœ๋ฐœ ๋ชจ๋“œ์—์„œ๋Š” ์•„๋ฌด ๋ฌธ์ œ ์—†์ด ์ž‘๋™ํ•˜๋˜ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋นŒ๋“œ ๊ณผ์ •์—์„œ ๋งŽ์€ ์˜ค๋ฅ˜๋ฅผ ๋ฑ‰์–ด๋ƒˆ๋‹ค. ์—ฌ๋Ÿฌ ์›์ธ์ด ์žˆ์—ˆ๊ณ  ํŒŒ์ผ ๋ช…์ด ๋‚˜์™€์žˆ์ง€๋งŒ, ์—๋Ÿฌ์˜ ์ตœ์ข… ํŽ˜์ด์ง€(?)๋งŒ ๋‚˜ํƒ€๋‚˜์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์—์ •ํ™•ํžˆ ์–ด๋А ๊ณผ์ •์—์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฑด์ง€ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ค์› ๋‹ค.  ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ๋Š” useQuery๋ฅผ ํ†ตํ•ด ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.๋˜ํ•œ ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ผ์šฐํ„ฐ ํ•ธ๋“ค๋Ÿฌ์—์„œ๋„ ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.๋”๋ณด๊ธฐ// rotation > page.tsx...export default function Rotationpage() { const { data: imgUrl, isPending, isError, error } = getIm..

Language/Next 2025. 3. 19. 11:34
[/\/] Next์˜ Tanstack Query

Tanstack Query ๐Ÿ“Tanstack : ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ์—์„œ ์„œ๋ฒ„ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌํƒ ์Šคํƒ์€ useQuery ๊ฐ™์€ ํ›…์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.๋•Œ๋ฌธ์— Provider ์ปดํฌ๋„ŒํŠธ๋Š” ๋ฐ˜๋“œ์‹œ ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ์ด๋‹ค.QueryClientProvider๋Š” React Context๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ „์—ญ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌReact์˜ Context API๋Š” ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ์—์„œ๋งŒ ์‚ฌ์šฉ์ „์—ญ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์ƒ๋‹จ(root layout)์— ์ ์šฉ๐Ÿค”ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ์—์„œ๋งŒ ์ ์šฉ์‹œํ‚ค๋Š”๋ฐ ์™œ ์ „์—ญ์— ์ ์šฉํ•ด์•ผ ํ• ๊นŒ?ํŽ˜์ด์ง€ ์ด๋™ ์‹œ ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ๊ฐ€ ์ดˆ๊ธฐํ™”๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ „์—ญ์—์„œ ์บ์‹ฑ๋ชจ๋“  ํ•˜์œ„ ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋™์ผํ•œ QueryClient ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉ ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ์™€ ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ ๐Ÿ“์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ์™€ ํด๋ผ์ด..

Language/Next 2025. 3. 19. 00:29
[/\/] Loading UI - Suspense ์™€ Streaming SSR

๋กœ๋”ฉ๊นŒ์ง€ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋Š” ํŽ˜์ด์ง€๋กœ ์ด๋™์„ ํ•œ๋‹ค๊ณ  ํ•ด๋ณด์ž.  ์˜์ƒ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด ํŽ˜์ด์ง€๊ฐ€ ๋ชจ๋‘ ๊ทธ๋ ค์งˆ ๋•Œ๊นŒ์ง€ ๋„˜์–ด๊ฐ€์ง€ ์•Š๊ณ  ์Šคํ”ผ๋„ˆ๊ฐ€ ๋Œ๊ฒŒ ๋œ๋‹ค.์ด๋ฅผ ๋ณด์™„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. ๋น„๋™๊ธฐ ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ [ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ] ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ฒƒ์—์„œ ๋น„๋™๊ธฐ๋ฅผ ๋งํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ŒํŽ˜์ด์ง€๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์— ์žˆ์–ด์„œ ๋น„๋™๊ธฐ ํ˜•์‹์„ ๋งํ•œ๋‹ค. isLoading ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๊ฐ€์ ธ์˜ค๋Š” ๋™์•ˆ 'Loading...' ์„ ํ‘œ์‹œํ•˜๊ณ  ๋ฐ์ดํ„ฐ๊ฐ€ ์ค€๋น„๋˜๋ฉด UI๋ฅผ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.๋”๋ณด๊ธฐ๋”๋ณด๊ธฐ'use client';import React, { useState, useEffect } from 'react';import { Product } from '@/types';const HomePage = () => { ..

Language/Next 2025. 3. 11. 12:01
[/\/] SSG, ISR, SSR, CSR

์šฐ๋ฆฌ๊ฐ€ ํ‰์†Œ์— ์“ฐ๋Š” ๊ฐœ๋ฐœ ๋ชจ๋“œ๋Š” yarn dev๋ฅผ ํ–ˆ์„ ๋•Œ, ๋ธŒ๋ผ์šฐ์ €์˜ ‘๊ฐœ๋ฐœ์ž๋„๊ตฌ’์—์„œ ์ฝ˜์†”์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.yarn build๋ฅผ ํ•˜๊ฒŒ ๋˜๋ฉด ์‹ค์ œ ๋ฐฐํฌ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํ”„๋กœ๋•์…˜ ๋ชจ๋“œ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด๋‹ค๋”ฐ๋ผ์„œ (ํŠนํžˆ react)๋Š” ๊ฐœ๋ฐœ์ž๋„๊ตฌ์—์„œ ๋ณด๋˜ ํƒœ๊ทธ๋‚˜ ๋‹ค๋ฅธ ํ˜•ํƒœ๊ฐ€ ์•„๋‹Œ ์ผ๊ทธ๋Ÿฌ์ง„ ํ˜•ํƒœ๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.react๋Š” html์š”์†Œ๊ฐ€ ๊ฑฐ์˜ ์—†์œผ๋ฉฐ JS๋ฅผ ํ†ตํ•ด ํ™”๋ฉด์— ๊ทธ๋ ค๋‚ด๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. build๋ฅผ ํ•˜๊ฒŒ ๋˜๋ฉด ๋นŒ๋“œ ์‹œ์ ์—์„œ์˜ ๋กœ์ง์ด ํ”„๋กœ๋•์…˜ ๋ชจ๋“œ๋กœ ์ƒ์„ฑ๋œ๋‹ค. SSG (Static Site Generation)SSG๋Š” ์ตœ์ดˆ ๋นŒ๋“œ ์‹œ์˜ ์ƒํƒœ๋ฅผ ์บ์‹ฑํ•ด๋‘์—ˆ๋‹ค๊ฐ€ ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์— ๋”ฐ๋ผ ๊ณ ์ •๋œ HTML์„ ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌํ•˜๊ณ  ํ™”๋ฉด์— ๋ฟŒ๋ ค์ค€๋‹ค.์ด๋ฏธ ์„œ๋ฒ„ ์ธก์—์„œ HTML์„ ๋นŒ๋“œํ•ด๋‘์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž์—๊ฒŒ ์ •๋ง ๋น ๋ฅด๊ฒŒ ๋ณด์—ฌ์ค„..

Language/Next 2025. 3. 10. 23:26
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
TAG
more
ยซ   2026/03   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
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
๊ธ€ ๋ณด๊ด€ํ•จ