ChamomileGuides 3.0.4 Help

리엑트 초기 설정

1.1 Import Project

  • Chamomile Admin React를 로컬 환경에서 시작하는 과정을 설명합니다.

준비 사항

  • nodejs : 16.14.0 이상 필요 (Nextjs 13버전 최소 사양)

  • vscode 설치 (VSCode 다운로드)

1. GitLab에서 프로젝트 클론하기

  • GitLab에 로그인하고 admin-front-react 프로젝트로 이동합니다.

  • "Clone" 버튼을 클릭하고 HTTPS 또는 SSH URL을 복사하고 터미널에서 실행하여 클론합니다.

  • 소스코드 압축파일을 다운로드하여 로컬 경로에 압축해제하여 사용해도 됩니다.

2. nodejs 설치 확인 및 npm 패키지 설치

  • 노드 설치 확인

node -v
  • 프로젝트 루트 경로에서 npm 패키지 설치

npm i

3. local 환경변수 파일 확인

  • 루트 경로에 .env.dev를 복사하여 .env.local 파일을 생성해주고, NEXTAUTH_URL, NEXT_PUBLIC_API_URL_BASE 에 개발서버 URL 을 입력하는 등의 환경변수 셋팅을 합니다.

4. 프로젝트 실행

  • 아래 명령어로 프로젝트를 실행합니다.

npm run local

VSCode Extension

  • VSCode 확장기능을 설치하면 코드 편집, 디버깅, 소스 제어, 코드 형식화 등 다양한 작업을 더 쉽게 수행할 수 있습니다.

  • Auto Close Tag: HTML/XML 태그를 자동으로 닫아주는 확장 기능입니다.

  • Color Highlight: 코드 내 색상 값을 시각적으로 표시해주는 확장 기능입니다.

  • Comment Anchors: 주석에 앵커를 추가하여 코드 내 중요한 위치를 쉽게 찾을 수 있도록 도와줍니다.

  • ESLint: JavaScript 및 TypeScript 코드의 문법 오류를 실시간으로 검사하고 수정할 수 있도록 도와줍니다.

  • Prettier - Code formatter: 코드 형식화를 자동으로 수행해주는 확장 기능입니다.

  • Tailwind CSS IntelliSense: Tailwind CSS 클래스 이름에 대한 자동 완성 및 IntelliSense 기능을 제공합니다.

1.2 ESLint

이 문서는 프로젝트에서 사용되는 ESLint 설정과 관련된 컨벤션 및 가이드를 설명합니다. 이 가이드를 통해 팀원들이 일관된 코드 스타일을 유지하고, 코드 품질을 높일 수 있습니다.

Introduction

이 프로젝트는 ESLint를 사용하여 코드 품질을 유지하고, 일관된 코드 스타일을 적용합니다. ESLint는 JavaScript 및 TypeScript 코드에서 문제를 식별하고 수정하는 데 도움을 줍니다.

Installation

프로젝트에서 ESLint를 사용하는 방법은 다음과 같습니다:

  1. 설치: 프로젝트의 루트 디렉토리에서 ESLint와 필요한 플러그인 및 확장을 설치합니다.

    npm install eslint eslint-config-next eslint-config-prettier eslint-plugin-react eslint-plugin-tailwindcss @typescript-eslint/parser @tanstack/eslint-plugin-query --save-dev
  2. 검사: 다음 명령어를 사용하여 코드 검사를 수행합니다.

    npx eslint .
  3. 자동 수정: 다음 명령어를 사용하여 자동으로 수정할 수 있는 문제를 해결합니다.

    npx eslint . --fix
  4. Prettier와 통합: Prettier와 ESLint를 통합하여 코드 포맷팅을 자동으로 적용합니다.

    npx prettier --write .

기본 설정

프로젝트의 ESLint 설정은 .eslintrc.json 파일에 정의되어 있습니다. 이 파일은 프로젝트의 루트 디렉토리에 위치하며, 다음과 같은 기본 설정을 포함합니다:

{ "$schema": "https://json.schemastore.org/eslintrc", "root": true, "extends": [ "next/core-web-vitals", "prettier", "plugin:tailwindcss/recommended", "plugin:@tanstack/eslint-plugin-query/recommended" ], "plugins": ["tailwindcss"], "rules": { "@next/next/no-html-link-for-pages": "off", "react/jsx-key": "off", "tailwindcss/no-custom-classname": "off", "react-hooks/exhaustive-deps": "off", "@tanstack/query/exhaustive-deps": "off" }, "settings": { "tailwindcss": { "callees": ["cn"], "config": "tailwind.config.js" }, "next": { "rootDir": ["./"] } }, "overrides": [ { "files": ["*.ts", "*.tsx"], "parser": "@typescript-eslint/parser" } ] }

확장 및 플러그인

확장

프로젝트에서는 다음과 같은 ESLint 확장을 사용합니다:

  • next/core-web-vitals: Next.js 프로젝트의 핵심 웹 바이탈 규칙을 포함합니다. 이 확장은 Next.js 애플리케이션의 성능과 접근성을 향상시키는 데 도움을 줍니다.

  • prettier: Prettier와의 통합을 통해 코드 포맷팅을 자동으로 적용합니다. 이 확장은 코드 스타일을 일관되게 유지하는 데 도움을 줍니다.

  • plugin:tailwindcss/recommended: Tailwind CSS와 관련된 권장 규칙을 포함합니다. 이 확장은 Tailwind CSS를 사용하는 프로젝트에서 일관된 스타일을 유지하는 데 도움을 줍니다.

  • plugin:@tanstack/eslint-plugin-query/recommended: TanStack Query와 관련된 권장 규칙을 포함합니다. 이 확장은 TanStack Query를 사용하는 프로젝트에서 올바른 쿼리 사용을 보장하는 데 도움을 줍니다.

플러그인

프로젝트에서는 다음과 같은 ESLint 플러그인을 사용합니다:

  • tailwindcss: Tailwind CSS와 관련된 규칙을 추가합니다. 이 플러그인은 Tailwind CSS 클래스 이름의 유효성을 검사하고, 잘못된 사용을 방지하는 데 도움을 줍니다.

사용자 정의 규칙

다음은 프로젝트에서 사용자 정의한 규칙들입니다:

  • @next/next/no-html-link-for-pages: Next.js 페이지 링크에 대한 규칙을 비활성화합니다. 이 규칙은 Next.js의 Link 컴포넌트를 사용하지 않고도 HTML 링크를 사용할 수 있도록 허용합니다.

  • react/jsx-key: JSX 요소에 키를 지정하는 규칙을 비활성화합니다. 이 규칙은 리스트 렌더링 시 키를 지정하지 않아도 경고를 발생시키지 않습니다.

  • tailwindcss/no-custom-classname: 사용자 정의 Tailwind CSS 클래스 이름 사용을 비활성화합니다. 이 규칙은 Tailwind CSS의 기본 클래스 이름만 사용하도록 권장합니다.

  • react-hooks/exhaustive-deps: React 훅의 의존성 배열을 검사하는 규칙을 비활성화합니다. 이 규칙은 훅의 의존성 배열을 명시적으로 관리하지 않아도 경고를 발생시키지 않습니다.

  • @tanstack/query/exhaustive-deps: TanStack Query 훅의 의존성 배열을 검사하는 규칙을 비활성화합니다. 이 규칙은 TanStack Query 훅의 의존성 배열을 명시적으로 관리하지 않아도 경고를 발생시키지 않습니다.

설정

Tailwind CSS 설정

  • callees: Tailwind CSS 클래스 이름을 포함하는 함수 이름을 지정합니다. 이 프로젝트에서는 cn 함수를 사용합니다.

  • config: Tailwind CSS 설정 파일의 경로를 지정합니다. 기본값은 tailwind.config.js입니다.

Next.js 설정

  • rootDir: Next.js 프로젝트의 루트 디렉토리를 지정합니다. 기본값은 ./입니다.

타입스크립트 설정

타입스크립트 파일(*.ts, *.tsx )에 대해 다음과 같은 설정을 적용합니다:

  • parser: 타입스크립트 파일을 파싱하기 위해 @typescript-eslint/parser를 사용합니다.

.eslintignore 파일 설명

.eslintignore 파일은 ESLint가 무시해야 할 파일 및 디렉토리를 지정하는 데 사용됩니다. 이 파일에 정의된 경로는 ESLint 검사에서 제외됩니다. 아래는 이 프로젝트의 .eslintignore 파일에 포함된 항목과 그 설명입니다:

  • dist/*: 빌드 결과물이 저장되는 dist 디렉토리 내의 모든 파일을 무시합니다. 빌드된 파일은 일반적으로 린트 검사를 필요로 하지 않습니다.

  • .cache: 캐시 파일이 저장되는 .cache 디렉토리를 무시합니다. 캐시 파일은 린트 검사에서 제외해야 합니다.

  • public: 정적 파일이 저장되는 public 디렉토리를 무시합니다. 이 디렉토리에는 이미지, 폰트, HTML 파일 등이 포함될 수 있으며, 린트 검사가 필요하지 않습니다.

  • node_modules: 프로젝트의 종속성 패키지가 저장되는 node_modules 디렉토리를 무시합니다. 이 디렉토리에는 외부 라이브러리 코드가 포함되어 있으며, 린트 검사가 필요하지 않습니다.

  • *.esm.js: 확장자가 .esm.js인 모든 파일을 무시합니다. 이 파일들은 일반적으로 ES 모듈 형식으로 번들된 파일로, 린트 검사가 필요하지 않습니다.

.eslintignore 파일 예시

dist/* .cache public node_modules *.esm.js

1.3 Prettier

Introduction

prettier.config.js 파일은 Prettier의 설정을 정의하는 파일입니다. Prettier는 코드 포맷터로, 일관된 코드 스타일을 유지하고 자동으로 코드 포맷팅을 적용하는 데 사용됩니다.

아래는 이 프로젝트의 prettier.config.js 파일에 포함된 설정과 그 설명입니다

설정에 관련된 자세한 사항은 아래 문단를 확인해세요

/** @type {import('prettier').Config} */ module.exports = { endOfLine: 'lf', semi: true, singleQuote: true, tabWidth: 2, printWidth: 100, useTabs: false, bracketSpacing: true, trailingComma: 'es5', arrowParens: 'always', importOrder: [ '^(react/(.*)$)|^(react$)', '^(next/(.*)$)|^(next$)', '<THIRD_PARTY_MODULES>', '', '^types$', '^@/types/(.*)$', '^@/config/(.*)$', '^@/utils/(.*)$', '^@/hooks/(.*)$', '^@/components/ui/(.*)$', '^@/components/(.*)$', '^@/styles/(.*)$', '^@/app/(.*)$', '', '^[./]', ], importOrderSeparation: false, importOrderSortSpecifiers: true, importOrderBuiltinModulesToTop: true, importOrderParserPlugins: ['typescript', 'jsx', 'decorators-legacy'], importOrderMergeDuplicateImports: true, importOrderCombineTypeAndValueImports: true, plugins: ['@ianvs/prettier-plugin-sort-imports', 'prettier-plugin-tailwindcss'], };

Installation

먼저, 프로젝트 디렉토리에서 Prettier를 설치합니다. npm 또는 yarn을 사용하여 설치할 수 있습니다.

npm install --save-dev prettier
yarn add --dev prettier

Prettier 플러그인 설치

프로젝트 설정 파일에서 사용된 플러그인들을 설치합니다.

npm install --save-dev @ianvs/prettier-plugin-sort-imports prettier-plugin-tailwindcss
yarn add --dev @ianvs/prettier-plugin-sort-imports prettier-plugin-tailwindcss

Prettier 포맷팅 적용

아래 명령어를 프로젝트 루트경로에서 실행하여 프로젝트 전체에 Prettier 포맷팅을 적용할 수 있습니다.

npx prettier --write .

설정설명

  • endOfLine: 'lf': 줄바꿈 문자를 Unix 스타일(\n )로 설정합니다. 이는 크로스 플랫폼 호환성을 유지하는 데 도움을 줍니다.

  • semi: true: 모든 문장의 끝에 세미콜론을 추가합니다.

  • singleQuote: true: 문자열에 홑따옴표(' )를 사용합니다.

  • tabWidth: 2: 들여쓰기에 사용할 스페이스의 개수를 2칸으로 설정합니다.

  • printWidth: 100: 한 줄의 최대 길이를 100자로 설정합니다. 이는 코드 가독성을 높이는 데 도움을 줍니다.

  • useTabs: false: 들여쓰기에 탭 대신 스페이스를 사용합니다.

  • bracketSpacing: true: 객체 리터럴의 중괄호 내에 스페이스를 추가합니다. 예: { foo: bar }

  • trailingComma: 'es5': ES5에서 유효한 곳에만 후행 쉼표를 추가합니다. 예: 객체, 배열, 함수 매개변수 목록 등.

  • arrowParens: 'always': 화살표 함수의 매개변수가 하나일 때도 괄호를 항상 추가합니다. 예: (x) => x

  • importOrder: import 문을 정렬하는 규칙을 정의합니다. 특정 패턴에 따라 import 문을 그룹화하고 정렬합니다.

    • ^(react/(.*)$)|^(react$): React 관련 import를 최상단에 배치합니다.

    • ^(next/(.*)$)|^(next$): Next.js 관련 import를 그 다음에 배치합니다.

    • <THIRD_PARTY_MODULES>: 서드파티 모듈을 그 다음에 배치합니다.

    • '^types$': types 모듈을 그 다음에 배치합니다.

    • '^@/types/(.*)$': 프로젝트 내 타입 정의를 그 다음에 배치합니다.

    • '^@/config/(.*)$': 프로젝트 내 설정 파일을 그 다음에 배치합니다.

    • '^@/utils/(.*)$': 유틸리티 함수들을 그 다음에 배치합니다.

    • '^@/hooks/(.*)$': 커스텀 훅을 그 다음에 배치합니다.

    • '^@/components/ui/(.*)$': UI 컴포넌트를 그 다음에 배치합니다.

    • '^@/components/(.*)$': 나머지 컴포넌트를 그 다음에 배치합니다.

    • '^@/styles/(.*)$': 스타일 파일을 그 다음에 배치합니다.

    • '^@/app/(.*)$': 애플리케이션 관련 파일을 그 다음에 배치합니다.

    • ^[./]: 상대 경로 import를 마지막에 배치합니다.

  • importOrderSeparation: false: import 그룹 사이에 빈 줄을 추가하지 않습니다.

  • importOrderSortSpecifiers: true: import 문 내에서 명시자를 정렬합니다.

  • importOrderBuiltinModulesToTop: true: 내장 모듈을 최상단에 배치합니다.

  • importOrderParserPlugins: import 정렬 시 사용할 파서 플러그인을 지정합니다. 여기서는 typescript, jsx, decorators-legacy를 사용합니다.

  • importOrderMergeDuplicateImports: true: 중복된 import 문을 병합합니다.

  • importOrderCombineTypeAndValueImports: true: 타입과 값 import를 병합합니다.

  • plugins: Prettier 플러그인을 지정합니다. 여기서는 @ianvs/prettier-plugin-sort-importsprettier-plugin-tailwindcss를 사용합니다.

1.4 File Structure

Chamomile Admin React ├─ public : 정적 파일들이 위치하는 폴더 │ ├─ favicon.ico : 브라우저 탭 아이콘 파일 │ ├─ fonts : 웹 폰트 파일들이 위치하는 폴더 │ ├─ icons : 아이콘 파일들이 위치하는 폴더 │ ├─ images : 이미지 파일들이 위치하는 폴더 │ └─ tinymce : TinyMCE 에디터 관련 파일들이 위치하는 폴더. L-UI 설치시 자동 생성됨. ├─ src : 소스 코드가 위치하는 폴더 │ ├─ app : nextjs App Router 폴더 │ │ ├─ [lng] : 다국어를 위한 segment │ │ │ ├─ (home) : 로그인 이후의 레이아웃 폴더 │ │ │ │ ├─ (root) : root 폴더 │ │ │ │ │ ├─ dashboard : root 대시보드 화면 │ │ │ │ │ └─ page.tsx : root 기본 화면 │ │ │ │ ├─ _components : (home)폴더 이하의 화면/컴포넌트에서 사용하는 공통 컴포넌트 폴더 │ │ │ │ │ ├─ button │ │ │ │ │ │ ├─ excel-download-button.tsx │ │ │ │ │ │ ├─ excel-style.ts │ │ │ │ │ │ ├─ excel-template-download-button.tsx │ │ │ │ │ │ ├─ excel-upload-button.tsx │ │ │ │ │ │ └─ excel-utils.ts │ │ │ │ │ ├─ file │ │ │ │ │ │ ├─ file-download-button.tsx │ │ │ │ │ │ ├─ file-guideline.tsx │ │ │ │ │ │ ├─ file-input.tsx │ │ │ │ │ │ ├─ file-upload-button.tsx │ │ │ │ │ │ └─ file-utils.ts │ │ │ │ │ ├─ fnb.tsx │ │ │ │ │ └─ form │ │ │ │ │ ├─ form-item-checkbox.tsx │ │ │ │ │ ├─ form-item-file.tsx │ │ │ │ │ ├─ form-item-radio.tsx │ │ │ │ │ ├─ form-item-select.tsx │ │ │ │ │ ├─ form-item-text-field.tsx │ │ │ │ │ └─ search-form.tsx │ │ │ │ ├─ admin : 시스템관리 GNB 이하 메뉴 라우팅 폴더 │ │ │ │ │ ├─ authority : 권한관리 LNB 이하 메뉴 라우팅 폴더 │ │ │ │ │ │ ├─ auth │ │ │ │ │ │ │ └─ managing-auth : 권한 등록 관리 page │ │ │ │ │ │ ├─ auth-hierarchy │ │ │ │ │ │ │ └─ managing-auth-hierarchy : 권한상하관계등록 page │ │ │ │ │ │ ├─ auth-menu │ │ │ │ │ │ │ └─ managing-auth-menu : 메뉴권한관리(권한->메뉴) page │ │ │ │ │ │ ├─ menu-auth │ │ │ │ │ │ │ └─ managing-menu-auth : 메뉴권한관리(메뉴->권한) page │ │ │ │ │ │ └─ resource-auth │ │ │ │ │ │ └─ managing-resource-auth : 리소스권한관리 page │ │ │ │ │ ├─ mobile : 모바일 LNB 이하 메뉴 라우팅 폴더 │ │ │ │ │ │ ├─ app │ │ │ │ │ │ │ └─ managing-app : 앱 관리 page │ │ │ │ │ │ ├─ app-device │ │ │ │ │ │ │ └─ managing-app-device : 모바일 기기 관리 page │ │ │ │ │ │ └─ app-file │ │ │ │ │ │ └─ managing-app-file : 앱 파일 관리 page │ │ │ │ │ ├─ resources : 자원관리 LNB 이하 메뉴 라우팅 폴더 │ │ │ │ │ │ ├─ common-code │ │ │ │ │ │ │ └─ managing-code : 공통코드관리 page │ │ │ │ │ │ ├─ menu │ │ │ │ │ │ │ └─ managing-menu : 메뉴관리 page │ │ │ │ │ │ ├─ message │ │ │ │ │ │ │ └─ managing-message : 다국어관리 page │ │ │ │ │ │ ├─ notice │ │ │ │ │ │ │ └─ managing-notice : 게시글관리 page │ │ │ │ │ │ ├─ privacy-policy │ │ │ │ │ │ │ └─ managing-privacy-policy : 개인정보 처리방침 관리 page │ │ │ │ │ │ ├─ resource │ │ │ │ │ │ │ └─ managing-resource : 리소스관리 page │ │ │ │ │ │ ├─ user │ │ │ │ │ │ │ └─ managing-user : 사용자관리 page │ │ │ │ │ │ └─ user-group │ │ │ │ │ │ └─ managing-group : 사용자그룹관리 page │ │ │ │ │ └─ systems : 시스템설정 LNB 이하 메뉴 라우팅 폴더 │ │ │ │ │ ├─ exception │ │ │ │ │ │ └─ managing-exception : 예외처리관리 page │ │ │ │ │ ├─ file │ │ │ │ │ │ └─ file-history : 파일이력조회 page │ │ │ │ │ ├─ history │ │ │ │ │ │ └─ login-log-page : 로그인로그 page │ │ │ │ │ ├─ logger │ │ │ │ │ │ └─ log-config-list : 로그관리 page │ │ │ │ │ ├─ privacy │ │ │ │ │ │ └─ privacy-use-log-page : 개인정보 로그관리 page │ │ │ │ │ └─ weblog │ │ │ │ │ └─ menu-access-log-page : 메뉴접근로그 page │ │ │ │ ├─ layout.tsx : home 레이아웃. (로그인 제외 모든 화면의 레이아웃) │ │ │ │ └─ loading.tsx : home 레이아웃의 로딩화면 │ │ │ ├─ (login) : 로그인 이후의 레이아웃 폴더 │ │ │ │ ├─ layout.tsx : 로그인 레이아웃 │ │ │ │ └─ login : 로그인 page │ │ │ └─ _components : [lng]폴더 이하의 화면/컴포넌트에서 사용하는 공통 컴포넌트 폴더 │ │ │ ├─ alert.tsx │ │ │ ├─ common-code.tsx │ │ │ ├─ recaptcha.tsx │ │ │ └─ toast.tsx │ │ ├─ api : next-auth 인증 처리 │ │ │ └─ auth │ │ │ ├─ [...nextauth] : NextAuth의 엔드포인트를 설정하는 데 사용 │ │ │ │ └─ route.ts │ │ │ └─ types │ │ │ └─ auth.d.ts : NextAuth의 TypeScript 타입 정의 │ │ ├─ i18n : 다국어 설정 │ │ │ ├─ client.ts : i18n CSR 설정 파일 │ │ │ ├─ index.ts : i18n 설정 파일 │ │ │ ├─ locales : 다국어 번역 파일 폴더 │ │ │ │ ├─ en │ │ │ │ │ └─ common.json │ │ │ │ ├─ it │ │ │ │ │ └─ common.json │ │ │ │ ├─ ja │ │ │ │ │ └─ common.json │ │ │ │ ├─ ko │ │ │ │ │ └─ common.json │ │ │ │ ├─ vi │ │ │ │ │ └─ common.json │ │ │ │ └─ zh │ │ │ │ └─ common.json │ │ │ └─ settings.ts │ │ ├─ auth-session.tsx : 세션 Provider │ │ ├─ error.tsx : 에러 페이지 │ │ ├─ global-error.tsx : 전역 에러 처리 페이지 │ │ ├─ layout.tsx : ROOT Layout │ │ ├─ not-found.tsx : 404 페이지 │ │ ├─ query-provider.tsx : Tanstack Query Provider │ │ └─ theme-provider.tsx : Next themes Provider │ ├─ auth.ts : NextAuth 인증 구현 │ ├─ axios-client.ts : axiosInstance interceptors 설정 │ ├─ middleware.ts : Next 미들웨어 │ ├─ config │ │ └─ site.ts │ ├─ constants │ │ └─ index.ts │ ├─ hooks : 커스텀 훅 폴더 │ │ ├─ useCommonCode.ts │ │ ├─ useFetchMessages.tsx │ │ ├─ useGetFile.ts │ │ ├─ useGetQuery.ts │ │ └─ useMutationQuery.ts │ ├─ store : Zustand를 전역 상태 Store │ │ ├─ forPersist : persist를 통해서 local storage에 저장 │ │ │ └─ index.ts │ │ ├─ alert.ts │ │ ├─ common-code.ts │ │ ├─ menu.ts │ │ ├─ mdi-tabs.ts │ │ └─ toast.ts │ ├─ styles : css 폴더 │ │ ├─ globals.css │ │ └─ pagetabs.css │ ├─ types : Typescript type 정의 폴더 │ │ ├─ common.ts │ │ ├─ file.ts │ │ ├─ form.ts │ │ ├─ language.ts │ │ ├─ menu.ts │ │ ├─ message.ts │ │ ├─ nav.ts │ │ └─ user.ts │ └─ utils : 공통 Utils 폴더 │ ├─ commonUtils.ts │ ├─ cssUtils.ts │ ├─ encryptUtil.ts │ └─ menuUtils.ts ├─ .editorconfig ├─ .eslintignore : ESLint가 무시할 파일 및 디렉토리 지정. ├─ .eslintrc.json : ESLint 설정 파일. ├─ .gitignore : Git이 무시할 파일 및 디렉토리 지정. ├─ .prettierignore : Prettier가 무시할 파일 및 디렉토리 지정. ├─ README.md : README 파일 ├─ components.json : ├─ custom.d.ts : 사용자 정의 TypeScript 타입 정의. ├─ next-env.d.ts : Next.js 타입 정의 파일. ├─ next.config.mjs : Next.js 설정 파일. ├─ package-lock.json : 의존성 트리 고정 파일. ├─ package.json : 프로젝트 메타데이터 및 의존성 정의. ├─ postcss.config.js : PostCSS 설정 파일. ├─ prettier.config.js : Prettier 설정 파일. ├─ tailwind.config.js : Tailwind CSS 설정 파일. └─ tsconfig.json : TypeScript 설정 파일.

1.5 Layout Structure

  • 화면 레이아웃 구성입니다

(home) Layout ├── <Gnb /> │ ├── <GnbMenu /> │ └── <GnbInfo /> │ └── <LanguageSelector /> ├── <Lnb /> │ ├── <LnbToggle /> │ ├── <LnbLogo /> ├── <MdiTabs /> └── <각 Page /> └── <PageHeader /> ├── <PageHeaderBreadcrumb /> └── <PageHeaderButtonList />
레이아웃 이미지
Last modified: 21 4월 2025