FrontEnd/React

[React, Next.js] Next.js? 꼭 써야하나? 어떤것을 써야 할까?

김중앙 2024. 7. 16. 01:03

프론트엔드와 백엔드를 React를 사용해서 개발 할 예정 React로 만들려고 했는데..Next.js? 꼭 써야 할까?

 

일단 정의부터 살펴보자.

 

React와 Next.js

 React.js

정의: React.js는 Facebook에서 개발한 오픈 소스 JavaScript 라이브러리로, 사용자 인터페이스(UI)를 구축하기 위해 사용됩니다. React는 컴포넌트 기반 아키텍처를 통해 UI 컴포넌트를 쉽게 만들고 재사용할 수 있게 합니다. 주로 단일 페이지 애플리케이션(SPA) 개발에 사용됩니다.

주요 특징:

  • 컴포넌트 기반 아키텍처: UI를 독립적인 컴포넌트 단위로 나누어 개발할 수 있습니다.
  • Virtual DOM: 실제 DOM을 효율적으로 업데이트하기 위해 가상 DOM을 사용합니다.
  • One-way Data Binding: 데이터가 한 방향으로 흐르며, 상태 관리를 단순하게 합니다.
  • JSX: JavaScript와 XML을 결합한 문법을 사용하여 컴포넌트를 정의합니다.
  • 커뮤니티와 생태계: 풍부한 라이브러리와 도구들, 커뮤니티의 지원을 받습니다.

Next.js

정의: Next.js는 Vercel에서 개발한 오픈 소스 React 프레임워크로, 서버 사이드 렌더링(SSR)과 정적 사이트 생성(SSG)을 지원합니다. Next.js는 React 애플리케이션을 쉽게 구축하고 최적화할 수 있는 다양한 기능을 제공합니다.

주요 특징:

  • 서버 사이드 렌더링(SSR): 클라이언트가 아닌 서버에서 페이지를 렌더링하여 초기 로드 속도와 SEO를 개선합니다.
  • 정적 사이트 생성(SSG): 빌드 시점에 페이지를 생성하여 빠른 로드 속도와 SEO를 최적화합니다.
  • 파일 기반 라우팅: pages 디렉터리 내 파일 구조에 따라 자동으로 라우팅이 설정됩니다.
  • API 라우트: pages/api 디렉터리에 API 엔드포인트를 정의하여 서버리스 함수처럼 사용할 수 있습니다.
  • 이미지 최적화: 빌드 시점과 런타임에 이미지 최적화를 자동으로 수행합니다.
  • CSS 및 Sass 지원: 글로벌 및 모듈화된 스타일링을 쉽게 적용할 수 있습니다.
  • 개발자 경험: 핫 리로딩, 자동 빌드 및 배포 등 개발 효율성을 높이는 도구들을 제공합니다.

요약

  • React.js: 사용자 인터페이스를 구축하기 위한 JavaScript 라이브러리로, 컴포넌트 기반 아키텍처를 통해 UI를 효율적으로 개발할 수 있습니다.
  • Next.js: React를 기반으로 한 프레임워크로, 서버 사이드 렌더링과 정적 사이트 생성을 지원하여 성능과 SEO를 최적화할 수 있습니다.

 

그렇다면 react.js와 next.js 어디에 어떤것이 더 적합할까?

 

 

Next.js와 React.js는 모두 프론트엔드 개발에 사용되지만, 특정 상황에 따라 백엔드에서도 일부 역할을 수행할 수 있습니다. 각 라이브러리의 특성과 적합한 사용 사례를 아래에 정리해 보겠습니다.

React.js

적합한 영역: 프론트엔드

  • 용도: React.js는 사용자 인터페이스(UI)를 구축하는 JavaScript 라이브러리입니다. 컴포넌트 기반 아키텍처를 통해 재사용 가능한 UI 컴포넌트를 쉽게 만들 수 있습니다.
  • 사용 사례:
    • 단일 페이지 애플리케이션(SPA)
    • 인터랙티브한 사용자 인터페이스
    • 상태 관리 및 데이터 바인딩이 중요한 애플리케이션
    • 모바일 앱 (React Native를 사용)

Next.js

적합한 영역: 프론트엔드와 일부 백엔드 기능

  • 용도: Next.js는 React를 기반으로 한 프레임워크로, 서버 사이드 렌더링(SSR)과 정적 사이트 생성(SSG)을 지원합니다. 또한 API 라우트를 통해 백엔드 기능을 일부 제공할 수 있습니다.
  • 사용 사례:
    • 서버 사이드 렌더링을 통한 빠른 초기 로드 속도
    • 정적 사이트 생성으로 SEO 최적화
    • 다이나믹한 라우팅과 페이지 기반의 코드 스플리팅
    • API 라우트를 사용하여 간단한 백엔드 엔드포인트 구현

비교 및 결론

  • 프론트엔드 개발:
    • React.js는 주로 UI 컴포넌트를 구축하고 관리하는 데 중점을 두며, SPA 개발에 매우 적합합니다.
    • Next.js는 React를 기반으로 하여 SEO 최적화와 성능 향상을 위한 SSR 및 SSG를 제공하며, 보다 정교한 페이지 기반 애플리케이션에 적합합니다.
  • 백엔드 개발:
    • React.js는 전통적인 백엔드 기능을 제공하지 않습니다.
    • Next.js는 기본적인 API 라우팅 기능을 통해 간단한 백엔드 엔드포인트를 만들 수 있지만, 복잡한 백엔드 로직은 일반적인 백엔드 프레임워크(예: Express.js, Nest.js)와 결합하여 사용해야 합니다.

따라서, 프론트엔드 개발에는 React.js와 Next.js 모두 적합하지만, Next.js는 SSR 및 SSG와 같은 추가 기능을 제공하여 보다 다양한 프론트엔드 요구사항을 충족할 수 있습니다. 백엔드 개발의 경우, Next.js의 API 라우트를 통해 간단한 엔드포인트를 만들 수 있지만, 보다 복잡한 백엔드 로직이 필요한 경우 다른 백엔드 프레임워크와 함께 사용하는 것이 좋습니다.

 
 
 
그렇다면  구조는 어떻게 다를까?
 

React.js 디렉터리 구조

React 프로젝트는 보통 Create React App (CRA)을 사용하여 시작됩니다. 기본적인 디렉터리 구조는 다음과 같습니다:

 
 
  • public/: 정적 파일 (HTML, 이미지 등)을 보관합니다.
  • src/: 모든 React 컴포넌트와 자바스크립트 파일들이 위치합니다.
    • assets/: 이미지, 폰트, CSS 파일 등을 보관합니다.
    • components/: 재사용 가능한 React 컴포넌트를 보관합니다.
    • pages/: 페이지 컴포넌트를 보관합니다 (React Router를 사용하는 경우).
    • App.js: 메인 컴포넌트.
    • index.js: ReactDOM.render()를 호출하여 React 애플리케이션을 초기화하는 파일.
  • package.json: 프로젝트 메타데이터 및 종속성 목록.

Next.js 디렉터리 구조

Next.js 프로젝트는 서버 사이드 렌더링(SSR)과 정적 사이트 생성(SSG)을 지원하는 특성에 맞게 구성됩니다. 기본적인 디렉터리 구조는 다음과 같습니다:

 

  • public/: 정적 파일 (HTML, 이미지 등)을 보관합니다. 루트 URL 경로로 제공됩니다.
  • pages/: Next.js의 페이지 컴포넌트가 위치합니다.
    • api/: API 라우트 파일들이 위치하며, 서버리스 함수처럼 동작합니다.
    • _app.js: 글로벌 앱 컴포넌트를 정의하여 페이지 전환 시 유지되는 레이아웃을 설정합니다.
    • index.js: 메인 페이지 컴포넌트.
  • components/: 재사용 가능한 React 컴포넌트를 보관합니다.
  • styles/: CSS 파일들을 보관합니다.
    • Home.module.css: 모듈화된 CSS 파일 예시.
    • globals.css: 글로벌 CSS 파일.

결론

  • React.js: 자유로운 디렉터리 구조를 가질 수 있지만, 보통 src 폴더에 컴포넌트, 페이지, 스타일 등을 구분하여 배치합니다.
  • Next.js: pages 폴더를 중심으로 한 구조로, 파일 기반 라우팅과 API 라우트를 기본적으로 지원합니다.

이 디렉터리 구조들은 기본적인 예시이며, 프로젝트의 규모와 요구사항에 따라 커스터마이징이 가능합니다.