nextjs/마이그레이션 예제
Next.js로 마이그레이션하기 - React Router에서(영화 목록1)
lamarcK
2025. 4. 12. 03:47
React Router 기반 코드를 Next.js로 마이그레이션하는 주요 이유들 중 가장 큰 이유는 SEO(검색 엔진 최적화) 성능 향상이다.
- Next.js는 서버 사이드 렌더링(SSR)을 기본적으로 지원
- 검색 엔진이 JavaScript를 실행하지 않고도 콘텐츠를 크롤링 가능
- 초기 페이지 로드 시 완성된 HTML을 제공하여 검색 엔진 최적화에 유리
장점:
- SEO 최적화
- 서버 사이드 렌더링(SSR) 기본 지원
- 메타 태그 관리 용이
- 검색 엔진이 콘텐츠를 더 잘 인식
- 성능 향상
- 자동 코드 분할
- 이미지 최적화
- 정적 페이지 생성(SSG)
- 증분 정적 재생성(ISR)
- 개발 편의성
- 파일 기반 라우팅
- API 라우트 내장
- 자동 Hot Reloading
- TypeScript 기본 지원
- 빌드 최적화
- 자동 번들링
- 미리 렌더링
- 자동 폴리필
단점:
- 학습 곡선
- Next.js만의 규칙과 패턴 학습 필요
- 새로운 개념들 습득 필요
- 유연성 제한
- 파일 구조가 정해져 있음
- 라우팅 커스터마이징 제한
- Next.js 규칙을 따라야 함
- 복잡성
- 프로젝트 설정이 더 복잡
- 배포 환경 고려 필요
- 리소스 사용
- 초기 번들 크기가 더 큼
- 서버 리소스 추가 필요
변경점
//1. import 부분
// 이전
import { getMovieDetails, MovieDetail } from '../services/movieApi';
import { useParams, useNavigate } from 'react-router-dom';
// 바뀐 코드
'use client'
import { getMovieDetails, MovieDetail } from '@/services/movieApi';
import { useParams, useRouter } from 'next/navigation';
//2. hooks 사용 부분
// 이전
const { id } = useParams<{ id: string }>();
const navigate = useNavigate();
// 바뀐 코드
const params = useParams<{ id: string }>();
const router = useRouter();
//3. useEffect 내부의 id 참조
// 이전
if (!id) throw new Error('Movie ID is required');
const data = await getMovieDetails(id);
}, [id]);
// 바뀐 코드
if (!params.id) throw new Error('Movie ID is required');
const data = await getMovieDetails(params.id);
}, [params.id]);
//4. 뒤로가기 버튼
// 이전
<BackButton onClick={() => navigate(-1)}>← 이전</BackButton>
// 바뀐 코드
<BackButton onClick={() => router.back()}>← 이전</BackButton>