Next.jsλ λ§μ κΈ°λ₯μ μ 곡ν©λλ€. κ·Έ μ€ μ°μ°ν λ°κ²¬ν μ΅μ ν κ³Όμ μ λν΄ μμλ³΄κ² μ΅λλ€.
Next.jsμ μ± λΌμ°ν°μμ MSWλ₯Ό μ°λνκ³ μ νμ΅λλ€. κ·Έλ¬λ μ± λΌμ°ν°λ‘ λ³κ²½λλ©΄μ MSWλ₯Ό μ°λνλλ° λ¬Έμ κ° μμλλ°,
SSR λμμ κ·Έ μ μ MSW μλ²κ° λμν΄μ mock apiλ₯Ό νμ±ν ν΄μΌνλ λ¬Έμ μμ΅λλ€.
MSW μ체μμλ λ
Έλ ν¨ν€μ§λ₯Ό μ 곡ν΄μ μλ²λ₯Ό μ€ν μν¬μ μμμΌλ, Next.jsμ SSR λμ μ΄μ μ ν΄λΉ μλ²λ₯Ό μ νν λμ μν¬ λ°©λ²μ΄ μμμ΅λλ€.
κ·Έλμ μ¬λ¬κ°μ§ μ΄μλ₯Ό μ°Ύμ보μμΌλ μμλ°©νΈμ ν΄κ²°λ°©λ² λΏμ΄μμ΅λλ€.
MSW μμ λ ν¬μ§ν 리μμ μ± λΌμ°ν° νκ²½μ λν PRμ΄ μ¬λΌμ μμμ΅λλ€. ν΄λΉ PRμ μμ§ λ¨Έμ§κ° μλμμ§λ§
ν΄λΉ μ κ·Ό λ°©μμΌλ‘ μ΄λμ λ λ¬Έμ κ° ν΄κ²°λμμ΅λλ€.
ν΄κ²°λ°©μμ μλμ κ°μ΅λλ€. μ½λλ₯Ό 보면 window κ°μ²΄λ₯Ό μ΄μ©ν΄ μλ²μ ν΄λΌμ΄μΈνΈλ₯Ό νλ³νκ³ μ΄λ κ² μ€μ νλ©΄ SSRλ‘ μλ΅μ΄ μ€κΈ°μ μ νμ MSW μλ²κ° μ€νμ΄ λ³΄μ₯λ©λλ€.
'use client';
import { PropsWithChildren, use } from 'react';
const shouldMockRequest = (url: string) => {
return !url.includes('_rsc') && !url.includes('/_next/') && url.includes('api');
};
const mockingEnabledPromise =
typeof window !== 'undefined'
? import('./browser').then(async ({ worker }) => {
await worker.start({
onUnhandledRequest: (request, print) => {
if (shouldMockRequest(request.url)) {
print.warning();
}
},
});
})
: import('./mocks/server').then(async ({ server }) => {
await server.listen({
onUnhandledRequest: (request, print) => {
if (shouldMockRequest(request.url)) {
print.warning();
}
},
});
});
μ΄ μ½λλ₯Ό λ³΄κ³ Next.jsμμλ λ΄λΆμμ λ λλ§μ νκΈ° μ μ μ΄λ° μ½λλ₯Ό μ΄λ»κ² νκ°ν κ²μΈμ§μ λν΄μ κΆκΈμ¦μ΄ μκ²Όμ΅λλ€.
κ·Έλ¬λ€κ° Next.jsμ SSR νλ‘μΈμ€μ μ½λ μ€μ μλμ κ°μ μ½λλ₯Ό λ°κ²¬νμ΅λλ€.
await Promise((res) => setTimeout(() => res()));
μ΄ μ½λλ μλ°μ€ν¬λ¦½νΈ μμ§μ μ΄λ²€νΈ 루νλ₯Ό νλ² κ±΄λλ°κ³ λ€μ μ΄λ²€νΈ 루νμ λμνλλ‘ λ³΄μ₯νλ μ½λμ
λλ€.
κ·Έλ¦¬κ³ μ£ΌμμΌλ‘ Next.jsλ λκΈ°μ μΈ λ λλ§ νλ‘μΈμ€λ₯Ό μνλ건 μλμ§λ§ preloadμ κ΄λ ¨λ μ΅μ νλ₯Ό μννκΈ° μν΄ λ λλ§μ μΌλΆλ¬ μ§μ°νλ€λ λ΄μ©μ΄μμ΅λλ€.
μ¦, λ€μ΄λλ―Ή μν¬νΈμ κ°μ λμμ΄ λ§μ΄ν¬λ‘νμ€ν¬λ‘ μνλ λ μ΄λ¬ν λμμ΄ λ¨Όμ μνλμ΄μ Next.jsμμ μ΄λ€ 리μμ€λ€μ κ°λ°μκ° μν¬νΈνλμ§ λΆμνκ³ μ΅μ ν νκΈ° μν¨μ΄μμ΅λλ€.
Next.jsλ μ΄λ κ² μμ§ν μ 보λ₯Ό ν΅ν΄ λ©μΈ νμ΄μ§λ₯Ό λ°ννλ μλ΅ ν€λλ‘ preload μμ±μ λ£μ΄μ HTML νμ±νμ§ μκ³ λΈλΌμ°μ κ° μ΄λ€ 리μμ€λ₯Ό λ€μ΄ λ°μμΌ ν μ§ μ 곡νλ―λ‘μ¨ μ΅μ νλ₯Ό μνν©λλ€.
μ΄λ° λ΄μ©μ 곡μλ¬Έμμ μ 곡λμ§ μμμ μ§μ μ°Ύμλ³΄μ§ μμΌλ©΄ μμ§ λͺ»νλ λ΄μ©μ΄μμ΅λλ€.
μ΄μ²λΌ Next.jsλ μ°λ¦¬κ° μμ§λͺ»νλ μ΅μ νλ₯Ό λ΄λΆμ μΌλ‘ λ§μ΄ μνν©λλ€.
κ·Έλμ μ΄λ° νλ μμν¬λ μ€μ λ‘ λ§μ΄ μ¬μ©ν΄λ³΄μ§ μμΌλ©΄ μμμΉ λμμ λ§μ΄ ν μ μκΈ° λλ¬Έμ μ μν΄μΌ ν©λλ€.