i18n 라이브러리 비교: next-i18next vs i18next vs next-intl

박기범·2025년 6월 5일

홈페이지 언어 변환 작업을 하기 전 다국어 지원을 위한 라이브러리를 사용하려고 하는데 어떤 i18n 라이브러리를 쓸지 고민을 했었음

  • next-i18next
  • i18next
  • next-intl

npm trends에서 지난 1년간 다운로드를 했던 수를 보았다.

다음은 라이브러리에 관한 정의를 해놓았다.

1. i18next: 범용적으로 강력한 국제화 엔진

2. next-i18next: i18next를 Next.js에 통합한 래퍼 라이브러리 (pages router 중심)

3. next-intl: App Router 기반 Next.js 프로젝트를 위한 경량화된 i18n 솔루션

추세는 i18next를 많이 쓰지만 그럼에도 불구하고
이 세가지 중에 나는 마지막 next-intl 라이브러리를 쓰려고 결정했다. 이유는 다음과 같다.

✅ App Router 완전 지원

  • Next.js 13부터 도입된 App Router는 server components, layout.tsx, metadata, loading.tsx 등 새로운 패러다임을 중심으로 동작한다.
  • i18next나 next-i18next는 기본적으로 pages router에 최적화된 구조다.
  • 특히 next-i18next는 getStaticProps, getServerSideProps 기반이라 server component와 동작하지 않는다.
  • 반면 next-intl은 App Router에 최적화된 설계이며, layout.tsx, server components, metadata에서의 다국어 처리를 기본으로 지원한다.
  • 예를 들어, app/[locale]/layout.tsx에서 NextIntlClientProvider를 감싸기만 하면 모든 하위 컴포넌트에서 번역이 작동한다.

✅ 설정 간편성 및 학습 곡선

  • next-intl: 설정이 매우 간단하다. locale 파일을 JSON으로 만들고, <NextIntlClientProvider>로 감싸기만 하면 끝.
  • i18next, next-i18next: 다양한 옵션이 많아 유연성은 크지만, 설정이 복잡하고 boilerplate도 많다.
  • 빠르게 MVP 또는 프로덕션을 만들려는 입장에서는 next-intl의 간결함이 결정적인 장점이다.

✅ 실제 번들 사이즈
next-intl | 12~15KB | 매우 가볍고 퍼포먼스 최적
i18next | 45~55KB | 무겁고 부가 설정 많음
next-i18next | 약 50~60KB | 가장 무거움 (의존성 + 설정용 코드 포함)


요약을 하자면

  • 가장 가볍고 직관적이며, 서버 컴포넌트와 완벽히 연동된다.
  • 러닝 커브 측면에서도 다른 라이브러리보다 훨씬 쉽기 때문에 이것을 선택하였다. (강력한 이유)
  • 따라서 빠르게 빠르게 개발하는 것이 좋은 상황인 나에게 매우 적합한 라이브러리라고 생각되었다.

또한 라이브러리를 도입하기 이전 서치를 통해 알아내었던 next-intl 설정 방법이다.

(기존 방법 삭제 및 수정)

역시 정답은 공식문서에 있다.!!!!!!!!!!!!!

공식문서 링크 (next-intl in app-router 동적라우팅)
https://next-intl.dev/docs/getting-started/app-router/with-i18n-routing

  • 위 문서를 따라서 하다보니 정상 작동을 하게 되었다.

대략적인 방법은 아래와 같다.
1. json 파일 생성
2. config 파일 수정
3. 루트 디렉토리에서 i18n폴더를 만든 후 라우팅, 탐색 파일을 만든다.
4. 위 파일을 가지고 미들웨어 설정
5. 중앙모듈 구성
6. 레이아웃 파일에 provider 설정
끝!


또한 이것은 서버 컴포넌트, 클라이언트 컴포넌트 둘 다 다른 훅을 이용하여 사용할 수 있다.!!!
아래의 링크를 참고하면 사용할 수 있을 것이다.
https://next-intl.dev/docs/getting-started/app-router/with-i18n-routing#page

profile
프론트엔드 개발공부를 하고있습니다.

0개의 댓글