Skip to content

Commit eab9f68

Browse files
committed
fix: maximum callstack 오류 수정
1 parent f4b8164 commit eab9f68

File tree

6 files changed

+46
-36
lines changed

6 files changed

+46
-36
lines changed

package-lock.json

Lines changed: 18 additions & 18 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,13 @@
11
import axios, { AxiosError } from 'axios';
22

3-
// 서버 사이드 여부
4-
const isServer = typeof window === 'undefined';
5-
6-
const apiClient = axios.create({
7-
baseURL: isServer ? `${process.env.NEXT_PUBLIC_ROOT_URL}/api` : process.env.NEXT_PUBLIC_BASE_URL,
3+
const clientApiClient = axios.create({
4+
baseURL: process.env.NEXT_PUBLIC_BASE_URL,
85
timeout: 10_000,
96
headers: { 'Content-Type': 'application/json' },
107
});
118

129
// 에러 처리
13-
apiClient.interceptors.response.use(
10+
clientApiClient.interceptors.response.use(
1411
(res) => res.data,
1512
async (error: AxiosError) => {
1613
if (!error.response) {
@@ -23,4 +20,4 @@ apiClient.interceptors.response.use(
2320
},
2421
);
2522

26-
export default apiClient;
23+
export default clientApiClient;

src/app/api/serverApiClient.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import axios from 'axios';
2+
3+
const serverApiClient = axios.create({
4+
baseURL: process.env.NEXT_PUBLIC_SERVER_BASE_URL,
5+
timeout: 10_000,
6+
headers: { 'Content-Type': 'application/json' },
7+
});
8+
9+
export default serverApiClient;

src/app/api/todo.ts

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,24 +6,29 @@ import {
66
UpdateItemRequest,
77
} from '@/types/TodoTypes';
88

9-
import apiClient from './apiClient';
9+
import clientApiClient from './clientApiClient';
10+
import serverApiClient from './serverApiClient';
1011

1112
export const addItem = (data: AddItemRequest): Promise<ItemDetail> => {
12-
return apiClient.post(`${process.env.NEXT_PUBLIC_TENANT_ID}/items`, data);
13+
return clientApiClient.post(`${process.env.NEXT_PUBLIC_TENANT_ID}/items`, data);
1314
};
1415

1516
export const getItemList = (): Promise<Item[]> => {
16-
return apiClient.get(`${process.env.NEXT_PUBLIC_TENANT_ID}/items`, {});
17+
return clientApiClient.get(`${process.env.NEXT_PUBLIC_TENANT_ID}/items`, {});
18+
};
19+
20+
export const getItemListServer = () => {
21+
return serverApiClient.get(`/${process.env.NEXT_PUBLIC_TENANT_ID}/items`);
1722
};
1823

1924
export const getItem = (itemId: number): Promise<ItemDetail> => {
20-
return apiClient.get(`${process.env.NEXT_PUBLIC_TENANT_ID}/items/${itemId}`);
25+
return clientApiClient.get(`${process.env.NEXT_PUBLIC_TENANT_ID}/items/${itemId}`);
2126
};
2227

2328
export const updateItem = (itemId: number, data: UpdateItemRequest): Promise<ItemDetail> => {
24-
return apiClient.patch(`${process.env.NEXT_PUBLIC_TENANT_ID}/items/${itemId}`, data);
29+
return clientApiClient.patch(`${process.env.NEXT_PUBLIC_TENANT_ID}/items/${itemId}`, data);
2530
};
2631

2732
export const deleteItem = (itemId: number): Promise<DeleteItemResponse> => {
28-
return apiClient.delete(`${process.env.NEXT_PUBLIC_TENANT_ID}/items/${itemId}`);
33+
return clientApiClient.delete(`${process.env.NEXT_PUBLIC_TENANT_ID}/items/${itemId}`);
2934
};

src/app/page.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
import { getItemList } from '@/app/api/todo';
1+
import { getItemListServer } from '@/app/api/todo';
22
import HydrationWrapper from '@/components/HydrationWrapper';
33
import TodoContent from '@/components/TodoContent';
44

55
export default async function Page() {
66
return (
77
<>
8-
<HydrationWrapper prefetchQueries={[{ queryKey: ['todos'], queryFn: getItemList }]}>
8+
<HydrationWrapper prefetchQueries={[{ queryKey: ['todos'], queryFn: getItemListServer }]}>
99
<div className='flex justify-center pt-6 bg-gray-50 min-h-[calc(100vh-3.75rem)]'>
1010
<TodoContent />
1111
</div>

src/components/HydrationWrapper.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,10 @@ const HydrationWrapper = async ({ prefetchQueries, children }: HydrationWrapperP
1313
await Promise.all(
1414
prefetchQueries.map(async ({ queryKey, queryFn }) => {
1515
try {
16-
const result = await queryFn();
17-
return queryClient.prefetchQuery({ queryKey, queryFn: async () => result });
16+
queryClient.prefetchQuery({ queryKey, queryFn });
1817
} catch (err) {
1918
console.error('prefetchQuery 실패:', queryKey, err);
20-
queryClient.setQueryData(queryKey, null);
19+
queryClient.setQueryData(queryKey, []);
2120
}
2221
}),
2322
);

0 commit comments

Comments
 (0)