Next.js server와 client의 λ‹€λ₯Έ fetch...

πŸš€ μ„œλ²„(Server)μ—μ„œλŠ” URL이 ν•„μš” μ—†λŠ” 이유

Next.js μ„œλ²„λŠ” λ°°μ½”λ“œ ν™˜κ²½(Node.js)μ—μ„œ μ‹€ν–‰λ˜κΈ° λ•Œλ¬Έμ—, μ„œλ²„ λ‚΄λΆ€μ—μ„œ APIλ₯Ό ν˜ΈμΆœν•  λ•ŒλŠ” μ ˆλŒ€ URL이 ν•„μš”ν•˜μ§€ μ•ŠμŒ.
μƒλŒ€ 경둜(/api/something)만 μ‚¬μš©ν•΄λ„ μš”μ²­μ„ μ²˜λ¦¬ν•  수 μžˆλ‹€.

예제 μ½”λ“œ

// pages/api/example.ts
export default function handler(req, res) {
  res.status(200).json({ message: "Hello from API!" });
}

// pages/index.tsx (μ„œλ²„μ—μ„œ μ‹€ν–‰)
export async function getServerSideProps() {
  const res = await fetch(`/api/example`); // μ ˆλŒ€ URL λΆˆν•„μš”
  const data = await res.json();

  return { props: { data } };
}

이유

  1. fetch("/api/example") ν•˜λ©΄ Next.js μ„œλ²„ λ‚΄λΆ€μ—μ„œ μ²˜λ¦¬λ˜λŠ” 것이기 λ•Œλ¬Έμ—, μ ˆλŒ€ URL 없이 μƒλŒ€ 경둜만으둜 μš”μ²­ κ°€λŠ₯.
  2. API 라우트(/api/*)λŠ” Next.js μ„œλ²„κ°€ 직접 μ²˜λ¦¬ν•˜λŠ” 것이기 λ•Œλ¬Έμ—, μš”μ²­μ„ μ™ΈλΆ€ λ„€νŠΈμ›Œν¬λ‘œ 보내지 μ•ŠμŒ.

🌍 ν΄λΌμ΄μ–ΈνŠΈ(Client)μ—μ„œλŠ” URL이 ν•„μš”ν•œ 이유

ν΄λΌμ΄μ–ΈνŠΈλŠ” λΈŒλΌμš°μ €μ—μ„œ μ‹€ν–‰λ˜λŠ”λ°, API μš”μ²­μ„ ν•  λ•ŒλŠ” μ ˆλŒ€ URL이 ν•„μš”ν•˜λ‹€.
fetchλ₯Ό μ‚¬μš©ν•  λ•Œ http://localhost:3000/api/something λ˜λŠ” 배포된 도메인(예: https://myapp.com/api/something)을 λͺ…μ‹œν•΄μ•Ό ν•œλ‹€.

예제 μ½”λ“œ

// components/Example.tsx (ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ‹€ν–‰)
import { useEffect, useState } from "react";

export default function Example() {
  const [data, setData] = useState(null);

  useEffect(() => {
    fetch("http://localhost:3000/api/example") // μ ˆλŒ€ URL ν•„μš”
      .then((res) => res.json())
      .then((data) => setData(data));
  }, []);

  return <div>{data ? data.message : "Loading..."}</div>;
}

이유

  1. λΈŒλΌμš°μ €λŠ” Next.js μ„œλ²„μ™€ λΆ„λ¦¬λœ ν™˜κ²½μ—μ„œ μ‹€ν–‰λ˜κΈ° λ•Œλ¬Έμ—, API ν˜ΈμΆœμ‹œ **μ •ν™•ν•œ μ£Όμ†Œ(μ ˆλŒ€ URL)**κ°€ ν•„μš”ν•¨.
  2. ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ fetch("/api/example")만 μ‚¬μš©ν•˜λ©΄, ν˜„μž¬ νŽ˜μ΄μ§€ URL κΈ°μ€€μœΌλ‘œ μš”μ²­ν•΄μ„œ κ²½λ‘œκ°€ 꼽일 수 있음.
  3. 배포된 ν™˜κ²½μ—μ„œλŠ” localhostκ°€ μ•„λ‹ˆλΌ μ‹€μ œ 도메인(https://myapp.com/api/something)을 μ‚¬μš©ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έ.

client와server의fetch

βœ… 정리

μ‹€ν–‰ ν™˜κ²½URL ν•„μš” μ—¬λΆ€μ΄μœ 
μ„œλ²„ (Next.js API, getServerSideProps)❌ ν•„μš” μ—†μŒμ„œλ²„ λ‚΄λΆ€μ—μ„œ μ‹€ν–‰λ˜λŠ”λ° μƒλŒ€ 경둜 μ‚¬μš© κ°€λŠ₯
ν΄λΌμ΄μ–ΈνŠΈ (React μ»΄ν¬λ„ŒνŠΈ, useEffect)βœ… ν•„μš”ν•¨λΈŒλΌμš°μ €μ—μ„œ API ν˜ΈμΆœν•  λ•Œ μ ˆλŒ€ URL ν•„μš”

λŒ“κΈ€