mir.pe (일반/밝은 화면)
최근 수정 시각 : 2024-11-22 19:40:48

Next.js

NextJS에서 넘어옴
웹 프레임워크 기술
{{{#!wiki style="margin:0 -10px"
{{{#!folding [ 펼치기 / 접기 ]
{{{#!wiki style="margin:-5px 0px -10px; word-break:keep-all"
$ 유료 포함 • 취소선 단종 및 중단
<colbgcolor=#f6f6f9,#2f3241> 프론트엔드 <colbgcolor=#fcfcfd,#272935> CSS Bootstrap Tailwind CSS Bulma Foundation Skeleton Pico
JSX React SolidJS Astro Preact Gatsby Remix Inferno Qwik
JS Angular Svelte Backbone.js jQuery Astro htmx Ember.js Lit 11ty Marko VanJS Alpine.js
Vue Vue.js VuePress Gridsome Quasar Astro
Python Reflex
백엔드 Java Spring Struts GWT Grails Jooby Play! Framework Scala
Kotlin Ktor
JS Express NestJS koa Hono fastify
.NET ASP.NET$
PHP Laravel Codeigniter Reasonable phalcon Symfony zend CakePHP FuelPHP Yii Slim PHPixe
Python Django Flask FastAPI
Ruby Ruby on Rails Sinatra
Go Gin echo Fiber
풀스택 JSX Next.js Astro SolidStart Remix Qwik City
JS SvelteKit Fresh Astro Marko
Vue Nuxt.js Astro
Java Vaadin$
Python Streamlit Reflex
Rust Rocket Actix Leptos Axum
하이브리드 .NET Blazor
Dart Flutter
Kotlin Kotlin Multiplatform
}}}}}}}}} ||

<colcolor=#000,#fff> Next.js
파일:NEXT_logo_white.svg 파일:NEXT_logo_black.svg
종류 React 프레임워크
라이선스 MIT 라이선스
개발 Vercel
언어 JavaScript
지원 문법 JSX
렌더링 방식 SSR / SSG
버전 v15.0.3
파일:홈페이지 아이콘.svg 파일:GitHub 아이콘.svg 파일:GitHub 아이콘 화이트.svg 파일:Bluesky 아이콘.svg
1. 개요2. 상세
2.1. 앱 라우터2.2. 서버 컴포넌트2.3. 서버 액션2.4. 예시
2.4.1. 프로젝트 시작
3. 특징
3.1. 장점3.2. 단점
4. Next.js를 사용하는 기업이나 서비스5. 강의
5.1. 유튜브5.2. 웹사이트
6. 관련 문서7. 외부 링크

[clearfix]

1. 개요


Vercel이 개발한 오픈 소스 React 프레임워크.

2. 상세

기본적으로 SSR 위주의 풀스택 프레임워크를 주력으로 성장하고 있으며, 풀스택 프레임워크답게 API 기능 및 서버 컴포넌트를 통한 서버측 기능과, React 컴포넌트를 통한 클라이언트 기능으로 나뉘어 통합 제공하는 프레임워크이다. 현재 node.js 기반의 안정적인 풀스택 프레임워크로 사랑받고 있으며, SSG 방식 또한 제공한다. React 공식 시작하기 문서를 열람할 시, 가장 먼저 이 Next.js 프레임워크를 통한 시작하기가 최상단에 표시될 정도로 React의 거의 대표급 프레임워크이다.

파일 페이지 라우터(기존)과 13부터 안정화된 폴더 방식의 앱 라우터(아래 참조) 두가지 라우팅 방식을 지원하며, 라우팅 규칙이 충돌하지 않는 내에서 두 라우팅 방식을 모두 사용할 수 있다. 또한, 앱 라우터가 완전히 안정화한다 해도, 기존 페이지 라우팅 방식은 지속적으로 관리하기 때문에 차기 개발 시에도 취향이나 정책에 맞게 적절히 사용하면 된다.

한국시각으로 2024년 10월 22일, 15.0.0 버전이 발표되었다. 라우팅 캐시가 기본적으로 비활성화되며, 곧 나오게 될 React 19 대응, 아직 실험적 단계지만 라우팅 후 후처리 기능을 제공할 after 기능, 그리고 웹 어플리케이션 전역 오류 관리가 가능한 instrumentation.js 기능에 셀프 호스팅 기능 향상등의 전반적인 향상 기능이 제공된다.
라우팅 방식에 따라 버전 요구사항이 다르다.

2.1. 앱 라우터


파일:file-conventions-component-hierarchy.webp
App router.

Next.js 12 버전에서 알파, 베타 테스트를 시작하면서 13.4에서 안정화된 기능으로, 간단히 요약하면, 기존의 파일 기반의 라우팅에서 폴더 기반 라우팅으로 바뀌면서, 여기에 폴더 하위에 여러 기능을 조합하여 사용할 수 있는 강력한 앱 라우팅 기능을 제공한다. 물론 기존 파일 기반의 라우팅을 사용할 수도 있으나, 폴더 기반의 앱 라우팅 기능을 사용하기 위해 폴더 기반의 경로에 아래와 같이 각각의 역할이 담긴 파일명과 js, ts, jsx, tsx 확장자를 작성하면 된다.

현재 Next.js 외에 폴더 기반 라우팅을 채택한 풀스택 프레임워크는 Next.js 보다 더 빨리, 베타 도중 갑작스레 도입하여 정식 출시한 SvelteKit가 있다.

2.2. 서버 컴포넌트


파일:thinking-in-server-components.webp
Server components

react 공식 팀과 협력하고 있는 서버 컴포넌트는 말 그대로 컴포넌트를 서버에서 관리하여 서버가 가지는 기능(DB 및 파일, 보안 등)에 대해 React가 가지는 기능과 결합하여 서비스를 제공하는 매우 강력한 기능으로, 아직 RFC 단계인 이 서버 컴포넌트의 구현체를 Next.js 에서 앞서 제공하고 있다. 이 기술이 React에 정식 출시되면 Remix 등의 다른 React 기반 프레임워크에서도 사용이 가능하다.

2.3. 서버 액션

Forms and Mutations
앱 라우터와 함께 실험적 기능이었다가 14.0.0부터 정식 출시한 기능. 이 기능 또한 서버 컴포넌트와 같이 React에서 공식적으로 제공할 예정인 기능이다.
서버 컴포넌트가 서버로부터 정보를 가져오기 위해 태어났다면, 서버 액션은 반대로 정보를 보내기 위해 태어난 Next.js의 기능.
submit 이벤트 대신 함수를 선언하고, 함수 본문에 'use server' 지시자를 추가하여 서버 함수로 동작함으로써 데이터를 서버 내에서 처리할 수 있도록 하는 기능이다.

다른 UI 프론트엔드의 경우, SvelteKit가 프레임워크 차원에서 제공하고 있고, 같은 기술의 Remix 프레임워크에서는 자체적인 서버 액션 방식을 지원하고 있다.

2.4. 예시

2.4.1. 프로젝트 시작

npx create-next-app@latest

3. 특징

3.1. 장점

  1. 정적인 구축
    정적으로 빠르게 구축할 수 있다.
  2. 서버 사이드 렌더링 (SSR)
    클라이언트에 주는 부담을 줄인다.

3.2. 단점

  1. 속도
    SSR의 단점으로 서버가 느리면 웹사이트가 기하급수적으로 느려진다.
  2. 너무 엄격한 캐시 정책
    Next.js 13 버전부터 사용자들의 원성을 사고 있는 너무 엄격한 캐시 정책 때문에 앱 라우터 사용을 꺼리는 경우가 많다. 기본적으로 캐시는 앱 최적화의 필수 요소이긴 하지만, 사용자가 원하는 조건에 캐시를 갱신하거나, 아예 캐시가 없어야 하는 시나리오임에도 캐시 정책이 원치 않게 작동하여, 컨텐츠 전달 시 어려움으로, 이로 인한 이슈가 지속적으로 제기되고 있으나, 활발한 커뮤니티 참여를 통해 14.1 부터 고질적인 자체 호스팅 내 유연하지 못한 캐시 문제를 개선하여 직접 캐시 관리를 꾀할 수 있는 설정을 제공함으로써 Redis 같은 DB등을 통한 공유 캐시를 사용할 길이 열고, 실험적으로 전역 캐시 시간 설정이 가능해 지며 이는 15 버전에서 기본값으로 캐시를 비활성화하도록 하고, 사용자가 캐시 여부와 시간을 선택하는 폭을 늘려 해결했다. 아직 100% 캐시 문제를 해결할 수 있는 일부 옵션이 실험적 기능으로 제공하고 있기 때문에 지켜볼 단계지만, 대부분 해소되었다.
  3. 불친절한 오류 안내
    Next.js 개발 시 오류가 발생했을 때, 내부적인 Stack Trace만 제공하여 다른 SSR 프레임워크 개발 환경 대비 불편한 오류 대응이 드디어 14.1 에 친절하게 오류 위치를 알려주는 방식으로 개선되었다. 하지만 런타임 오류 상에서 나타나는 일부 불친절한 오류가 나는 케이스가 있는데, 이는 Next.js 가 아닌 React 문제이다. 이는 React 19 버전에서 개선 예정.
  4. 개발 서버 메모리 누수 등의 메모리 관리 문제
    공식 이슈에서 내부적으로 작년부터 제기된 이슈로, 공식 팀이 지속적으로 확인하고 해결하고 있다고는 하나, 이슈 제기 이후에도 사용자 사이에서 적게는 1GB, 많게는 14GB, 심하면 Out of memory로 인한 서버 종료 사례까지 보고되고 있다.
    주로 메모리 누수가 발견된 사례는,
    • react 아이콘 컴포넌트 적재, 아이콘 컴포넌트 라이브러리들이 보통 많은 컴포넌트(많게는 수만개)를 제공하기 때문.
    • 컴포넌트 간의 순환 참조
    • webpack 커스터마이징
    • Next.js 제공 fetch 함수와 관련된 문제 (Axios 를 써서 해결했다는 사례가 있다.)

    현재 이 이슈는 최근 버전인 15.0.1 에서도 사례가 보고되고 있으며, 현재 가능한 해결 방법은 개발 서버를 필요한 만큼만 사용하고 종료하는 것 뿐이다.
    공식 팀 및 기여자들은 Next.js 와 webpack 간 연계 문제로 추정하고 있으며, React SPA 앱이나 Remix(프레임워크) 같은 타 생태계를 쓰는 프레임워크에서는 해당하지 않는다.

4. Next.js를 사용하는 기업이나 서비스

5. 강의

5.1. 유튜브

5.2. 웹사이트

6. 관련 문서

7. 외부 링크



[1] 폴더명에 @로 시작하는 명칭, 주로 인스타그램처럼 팝업이나 모달을 표시하면서 공유를 위해 당 경로를 표시할 때 사용.