별 거 아닌데 삽질했던 대장정...
백엔드 없이 테스트하고 싶을 때, 비동기 통신을 사용하지 않고 로컬에 저장한 json 파일 데이터를 가져와 mock data로 활용하는 방법에 대해 정리하는 글
리액트에선 json mock data도 axios로 fetching했지만 next.js에선 이 방법이 안 통했다.
// 파일 경로: /public/data/data.json
[
{
"id": 1,
"title": "abc",
"image": "http://example.com/1234.jpg",
},
{
"id": 2,
"title": "def",
"image": "http://example.com/5678.jpg",
},
{
"id": 3,
"title": "ghi",
"image": "http://example.com/9012.jpg",
},
.....
]
require()
node.js에서 제공하는 함수.
Next.js에서 /public 디렉토리에 있는 정적 파일은 자동으로 서버와 클라이언트 모두에게 노출된다.
따라서 public에 있는 파일은 require 함수를 사용하여 가져올 수 있다.
알다시피 next 13 버전에서는 getStaticProps같은 함수들을 지원하지 않는다.
Data Fetching이 궁금하다면 공식문서를 참고하자.
비동기 통신을 하는 것이 아니므로 getData 함수나 json파일을 변환해줄 필요없이 가져오기만 하면 된다.
import React from 'react'
export default function page() {
// JSON 파일 가져오기
const datas = require('/public/data/data.json')
return (
<div>
<h1>{datas.title}</h1>
<section>
{datas?.map((data) => (
<div key={data.id}>
<Link href={`/data/${data.id}`}>
<Image
src={data.image}
alt={data.title}
width={200}
height={200}
/>
<p>{data.title}</p>
</Link>
</div>
))}
</div>
)
}
이런 식으로 가져오면 된다.
데이터를 구현하는 것이 목적이라면 여기까지 보고 나가시면 된다.
공식문서 참고
// next.config.js
const nextConfig = {
images: {
domains: ['assets.example.com'],
},
};
이렇게 구현하면 이미지까지 띄우게 된다 !!!!
오래 걸려서 자괴감이 컸는데 이미지 파일이 보일 때 너무 기뻐서 울 뻔했다. 💦