Files
2nd/10_Wiki/Topics/Frontend_Mastery/Next.js 기반 대규모 웹 애플리케이션.md
T

5.0 KiB

Next.js 기반 대규모 웹 애플리케이션

📌 Brief Summary

Next.js 기반 대규모 웹 애플리케이션은 비즈니스 로직과 UI를 체계적으로 분리하는 기능 및 도메인 중심(Feature-Driven/Domain-Driven)의 모듈형 아키텍처를 채택하여 장기적인 유지보수성과 확장성을 확보하는 현대적인 웹 개발 방식입니다 [1, 2]. 특히 최근의 Next.js App Router 환경에서는 React Server Components(RSC)와의 호환성 문제로 인해 런타임 오버헤드가 있는 CSS-in-JS 대신 Tailwind CSS, CSS Modules, 또는 zero-runtime 방식의 CSS-in-JS(vanilla-extract 등)와 같은 정적 스타일링 전략을 선택하는 것이 필수적입니다 [3-5]. 이러한 구조와 스타일링 접근은 팀 간의 협업을 돕고 기술 부채를 최소화하여, 대규모 프로젝트에서도 "예쁘게"가 아닌 "유지보수 가능한" 시스템을 구축할 수 있게 합니다 [1, 5, 6].

📖 Core Content

  • 기능 및 도메인 중심 아키텍처 (Feature-Driven Architecture): 대규모 Next.js 프로젝트가 성장함에 따라 컴포넌트, 훅, 비즈니스 로직을 파일 유형별로 단순 그룹화하거나 라우팅을 담당하는 app/ 디렉토리에 모두 넣는 것은 관리를 불가능하게 만듭니다 [1]. 이를 해결하기 위해 실제 도메인(예: market-data, user-profile, auth)을 기반으로 하는 기능 중심의 폴더 구조(예: src/features/...)를 도입해야 합니다 [1, 2]. app/ 디렉토리 내의 파일(page.tsx, layout.tsx 등)은 라우팅과 레이아웃 등 최소한의 역할만 수행하게 하고, 실제 비즈니스 로직과 UI 컴포넌트는 features/ 하위로 위임하여 코드를 캡슐화합니다 [2, 7].

  • Next.js App Router와 CSS 아키텍처 전략: 대규모 Next.js 애플리케이션, 특히 App Router를 사용하는 프로젝트에서 기존의 CSS-in-JS(styled-components, Emotion 등)는 브라우저에서 런타임에 CSS를 생성하여 성능을 저하시킬 뿐만 아니라, React [Server Components|Server Components]에는 Context가 존재하지 않아 본질적으로 호환되지 않는 문제를 발생시킵니다 [3, 4]. 따라서 2025년 기준 대규모 프로젝트에서는 런타임 비용이 없는 Tailwind CSS나 CSS Modules를 사용하거나, 빌드 타임에 정적 CSS를 생성하는 vanilla-extract를 사용하는 것이 권장됩니다 [4, 5, 8]. 특히 다중 테마가 필요한 대규모 디자인 시스템에서는 런타임 오버헤드 없이 타입 안정성을 제공하는 vanilla-extract가 가장 이상적입니다 [5].

  • 유지보수성을 위한 프로젝트 구조화 규칙:

    • 디렉토리 및 경로 관리: 초기 프로젝트 설정 시 src/ 디렉토리를 사용하여 tailwind.config.ts, next.config.mjs 등의 루트 설정 파일과 소스 코드를 물리적으로 분리합니다 [9]. 또한, 중첩된 상대 경로(../../../)로 인한 혼란을 막기 위해 @/components/...와 같은 절대 경로 임포트(Absolute Imports)를 강제해야 합니다 [6, 9, 10].
    • 관심사 분리 ([[뇌와 팔다리의 분리 - 관심사의 분리 (Separation of Concerns)|Separation of Concerns]]): 데이터 패칭이나 API 호출 같은 네트워크 로직은 UI 컴포넌트와 분리하여 별도의 레이어(예: services/ 폴더)에서 관리해야 백엔드 변경이나 유지보수에 유연하게 대응할 수 있습니다 [2, 11].
    • 확장성 도구 활용: 대규모 시스템의 경우 Storybook을 통해 재사용 가능한 UI 컴포넌트 시스템을 구축하여 일관성을 높이고, 여러 앱과 공유 패키지를 효과적으로 관리하기 위해 Turborepo나 Nx와 같은 Monorepo 도구를 도입하는 것이 권장됩니다 [6, 11].

🔗 Knowledge Connections

  • Related Topics: Feature-Driven Architecture, React Server Components (RSC), Tailwind CSS, CSS Modules, Zero-Runtime CSS-in-JS
  • Projects/Contexts: Next.js App Router 기반 프로젝트 환경, 대규모 엔터프라이즈 프론트엔드 시스템
  • Contradictions/Notes: 소스에 따르면, 과거에는 동적 스타일링과 테마 적용의 이점 때문에 CSS-in-JS(styled-components, Emotion 등)가 널리 사용되었으나, 최근 Next.js의 App Router 및 RSC 환경의 도입으로 인해 컨텍스트(Context) 기반의 런타임 CSS-in-JS는 작동하지 않거나 심각한 성능 오버헤드를 유발하여 사용이 지양되고 있습니다. 그 대안으로 Tailwind CSS나 CSS Modules 같은 정적 렌더링 호환 스타일링 방식이 새로운 표준으로 자리 잡았습니다 [3-5].

Last updated: 2026-04-26