[FE] Next.js - export default vs export
2025. 2. 11. 19:20ㆍFE/Next.js
Next.js로 작업 시 한 번쯤 왜?라는 의문이 생기는 부분이라 생각하여 정리하기로 했다.
오늘 주제와 관련하여 에피소드 하나가 있어 간략히 소개하고 시작하려고 한다.
※ 하기 에피소드는 Next.js 없이 React만 사용하여 개발할 때의 이야기이다.
작업하실 때 export default 쓰지 마세요.
- Senior 개발자님
이유는 명확했다.
- 나의 코드에서 export와 export default의 정확한 차이점을 모르고 쓰는 것이 보임
- 1의 이유에 따라 export default를 사용함으로써 생길 수 있는 네이밍 오류 예방하기 위함
첫 회사에서 받은 피드백은 꽤 큰 영향을 끼쳐 export default 혐오(?)증 까지 생겼었다.
그런데.
Next를 공부하니까 export default를 안쓰면 오류가 발생하네?
그냥 넘어갈 수 있는 문제가 아니었다.그래서 조금 찾아봤다.
export default vs export(named export)
비교 항목 | export default | export(named export) |
내보낼 수 있는 개수 | 파일당 1개 | 여러 개 가능 |
가져올 때 이름 | 아무거나 가능 | 반드시 같은 이름 |
import 방식 | import 아무이름 from './src' | import { 정해준 이름 } from './src' |
example | export default function A() {} | export function B() {} |
Next.js 라우팅 컴포넌트 필수 여부 | ✅필수 | ❌ 그 외 추가적인 컴포넌트 or 함수에 사용 |
왜 필수일까
- Framework에서 정한 규칙이니까
- Next.js 는 파일 시스템 기반 라우팅을 사용하기 때문이니까 - Next.js 공식문서
그럼 내부 규칙이 어떻게 구성되어있길래 그럴까?
코드를 다 보진 않고 이해가 되지는 않았지만 대충 이렇지 않을까 하는 생각을 해봤다
const PageComponent = await import("../pages/about.tsx");
const Page = PageComponent.default; // 👈 여기서 default export된 컴포넌트를 찾음
return <Page />
이렇게 되어있다면.. export default한 페이지 컴포넌트가 해당 경로에 없다면 오류가 발생하지 않을까?
모든 것을 알려주는 ChatGPT에게 물어보았다
결론
- Next.js의 file-system based routing은 pages 폴더 내부 파일을 자동으로 URL과 연결 작업함
- 각 파일을 import() 하여 export default된 컴포넌트를 찾음 => 없으면 라우팅 오류 남( 맨 위 이미지 )
- 각 페이지 파일은 반드시 export default로 내보내야 함