Next.js에서는 서버 없이도 API를 만들 수 있다는데 그게 잘 와닿지 않아서 어떤 뜻인지 물어봤다.
next.js가 서버 없이도 API를 만들어서 데이터를 처리할 수 있다는 말을 더 자세히 알고 싶어요. 무슨 뜻인가요? 원래는 서버가 있어야 데이터를 처리할 수 있는데 NEXT.JS는 그렇지 않고도 할 수 있다는 건가요?
좋은 질문이에요! Next.js에서 "서버 없이도 API를 만들 수 있다"는 말이 무슨 뜻인지 쉽게 설명해볼게요.
일반적으로, 웹사이트에서 데이터를 처리하려면 서버(백엔드)가 필요해요.
예를 들어, 웹사이트에서 사용자의 정보를 가져오는 경우를 생각해볼게요.
즉, 데이터를 처리하려면 별도의 서버(Node.js, PHP, Python 등)를 따로 만들어야 했어요.
그런데 Next.js에서는 별도의 서버를 만들지 않아도 API를 만들 수 있어요!
Next.js 자체가 "서버 역할도 할 수 있는 프레임워크"이기 때문이에요.
🔹 Next.js에서 API를 만드는 방법
Next.js에서는 pages/api/ 폴더 안에 파일을 만들면 자동으로 API가 생성돼요!
예를 들어, pages/api/hello.js 파일을 만들고 이렇게 작성하면:
export default function handler(req, res) {
res.status(200).json({ message: "Hello, Next.js API!" });
}
✅ 브라우저에서 http://localhost:3000/api/hello를 입력하면 { message: "Hello, Next.js API!" }가 나타나요.
즉, Next.js 자체가 백엔드 서버처럼 동작하며 API를 실행해주는 거예요!
✔ 보통 데이터를 처리하려면 백엔드 서버가 필요하지만,
✔ Next.js는 API Routes 기능을 이용해 백엔드 없이도 API를 만들 수 있음
✔ pages/api/ 폴더에 파일을 만들기만 하면 Next.js가 자동으로 서버 역할을 해줌
✔ 클라이언트가 fetch("/api/hello")처럼 요청하면, Next.js가 API를 실행해서 데이터를 반환
1) 개발 중 (localhost) → 내 PC에서 실행됨
2) 배포 후 (Vercel 같은 곳에 올린 경우) → 서버리스 환경에서 실행됨
즉, Next.js API는 요청이 있을 때만 실행되므로, 별도로 서버를 유지할 필요가 없어요!
그래서 서버 없이도 API를 만들 수 있다고 하는 거죠. 😊
그런데 당신은 아까전에 이렇게 말했어요: getServerSideProps를 사용하면 서버에서 데이터를 가져와서 화면에 바로 출력 가능하다!
서버가 없는데 서버에서 데이터를 가지고 온다구요?
좋은 질문이에요! "서버 없이도 API를 만들 수 있다"와 "서버에서 데이터를 가져온다"는 말이 모순처럼 들릴 수 있어요. 하지만 Next.js의 작동 방식을 이해하면 둘 다 맞는 말이라는 걸 알 수 있어요.
Next.js의 API Routes는 서버리스(Serverless) 방식이에요.
즉, 항상 실행되는 서버가 있는 게 아니라, 요청이 있을 때만 서버 역할을 하는 함수가 실행되는 것이에요.
✔ 일반적인 백엔드 서버 (예: Express, Django, PHP) → 항상 켜져 있음
✔ Next.js의 API Routes → 요청이 있을 때만 실행됨 (서버리스 환경)
즉, Next.js는 "전통적인 의미의 서버"가 없는 것이지, 아예 서버가 없는 것은 아니에요!
필요할 때만 서버처럼 동작하는 "서버리스 API"가 있다고 생각하면 돼요.
Next.js에는 데이터를 가져오는 여러 가지 방법이 있는데,
getServerSideProps()는 "서버에서 데이터를 가져와서 화면을 렌더링하는 방식"이에요.
📌 getServerSideProps()는 언제 실행될까?
✔ 사용자가 페이지를 요청할 때마다 실행됨
✔ Next.js의 서버(서버리스 함수)가 실행됨
✔ API나 데이터베이스에서 데이터를 가져와서 HTML을 만들어서 클라이언트에게 보냄
💡 즉, Next.js가 백엔드 서버처럼 동작하면서 데이터를 불러오는 거예요.
따라서 Next.js 자체가 "서버 역할"을 하므로 "서버에서 데이터를 가져온다"는 말이 맞는 거죠!
export async function getServerSideProps() {
const res = await fetch("https://jsonplaceholder.typicode.com/posts/1");
const data = await res.json();
return { props: { post: data } };
}
export default function Post({ post }) {
return (
<div>
<h1>{post.title}</h1>
<p>{post.body}</p>
</div>
);
}
이 코드가 실행될 때:
1. 사용자가 페이지를 요청하면 Next.js의 서버가 getServerSideProps()를 실행
2. 서버에서 데이터를 가져와서 HTML을 만든 뒤 사용자에게 보냄
3. 클라이언트는 이미 데이터가 채워진 HTML을 받음
✔ 여기서 Next.js는 마치 백엔드 서버처럼 동작하는 거예요!
아하, 그러니까 내가 백엔드 개발을 따로 하지 않아도 백엔드 역할을 할 수 있는 무언가가 이미 next.js에 내장되어 있다는 얘기로군요?
네, 정확해요! Next.js 안에 이미 백엔드 역할을 할 수 있는 기능(API Routes 등)이 내장되어 있어서, 별도의 백엔드 서버 없이도 데이터를 처리할 수 있는 거예요.