Skip to content

[PR] 배포 테스트 및 전체 구조 반영#3

Merged
Dobbymin merged 31 commits intomainfrom
develop
Feb 8, 2026
Merged

[PR] 배포 테스트 및 전체 구조 반영#3
Dobbymin merged 31 commits intomainfrom
develop

Conversation

@Dobbymin
Copy link
Member

@Dobbymin Dobbymin commented Feb 8, 2026

📝 요약 (Summary)

x

✅ 주요 변경 사항 (Key Changes)

x

💻 상세 구현 내용 (Implementation Details)

x

🚀 트러블 슈팅 (Trouble Shooting)

x

⚠️ 알려진 이슈 및 참고 사항 (Known Issues & Notes)

x

📸 스크린샷 (Screenshots)

x

#️⃣ 관련 이슈 (Related Issues)

- printWith를 120 에서 80으로 수정
@Dobbymin Dobbymin self-assigned this Feb 8, 2026
Copilot AI review requested due to automatic review settings February 8, 2026 13:37
@Dobbymin Dobbymin added the 🚀 Deploy 배포 관련 작업을 진행하는 경우 label Feb 8, 2026
@Dobbymin Dobbymin merged commit 1f9f9f9 into main Feb 8, 2026
3 checks passed
@Dobbymin Dobbymin deleted the develop branch February 8, 2026 13:37
@gemini-code-assist
Copy link

Summary of Changes

Hello @Dobbymin, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

이 PR은 프로젝트의 초기 개발 환경을 설정하고, 확장 가능하며 유지보수하기 쉬운 애플리케이션 구조를 구축하는 데 중점을 둡니다. 주요 변경 사항은 코드 품질 도구의 통합, React Query 및 Chakra UI와 같은 핵심 라이브러리 도입, 그리고 모듈화된 라우팅 및 UI 컴포넌트 구조를 포함합니다. 이는 향후 기능 개발을 위한 견고한 기반을 제공하며, 개발 효율성을 높이는 데 기여할 것입니다.

Highlights

  • 개발 환경 설정 및 코드 품질 도구 도입: Husky pre-commit 훅을 설정하여 커밋 전에 lint-staged, ESLint, TypeScript 검사를 자동으로 실행하도록 구성했습니다. 또한 Prettier 설정을 업데이트하고 .eslintcache.gitignore에 추가하여 개발 워크플로우를 개선했습니다.
  • 새로운 애플리케이션 구조 도입: 기존 Vite + React 보일러플레이트 코드를 제거하고, @emotion/react, @tanstack/react-query, axios 등의 핵심 라이브러리를 추가하여 새로운 애플리케이션 구조를 구축했습니다. 이는 src/app, src/pages, src/shared, src/widgets 디렉토리로 구성됩니다.
  • 상태 관리 및 UI 프레임워크 통합: React Query를 사용하여 비동기 데이터 상태 관리를 위한 QueryProvider를 설정하고, Chakra UI를 테마 시스템으로 도입하여 ThemeProvider를 구성했습니다. 이를 통해 일관된 UI와 효율적인 데이터 관리를 위한 기반을 마련했습니다.
  • 라우팅 시스템 구현: React Router를 사용하여 애플리케이션의 기본 라우팅 시스템을 구현했습니다. RootLayout을 통해 공통 레이아웃을 제공하고, MainPage를 기본 경로에 연결했습니다.
  • 빌드 및 개발 도구 설정 업데이트: package.jsonlint:fix, tsc, format, prepare 스크립트를 추가하고, tsconfig.jsonvite.config.ts를 업데이트하여 @emotion/react의 JSX 런타임 및 경로 별칭을 올바르게 설정했습니다.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • .gitignore
    • .eslintcache 파일을 무시 목록에 추가했습니다.
  • .husky/pre-commit
    • 새로운 pre-commit 훅을 추가하여 lint-staged, pnpm run lint:fix, pnpm run tsc를 실행하도록 설정했습니다.
  • .prettierignore
    • .config.js.config.ts 파일을 Prettier 무시 목록에서 제외했습니다.
  • .prettierrc
    • printWidth를 120에서 80으로 변경했습니다.
    • importOrder 배열의 형식을 가독성 좋게 변경했습니다.
  • eslint.config.js
    • ESLint 설정 파일의 import 순서를 재정렬하고, 문자열 리터럴을 큰따옴표로 변경하며 세미콜론을 추가했습니다.
  • package.json
    • lint:fix, tsc, format, prepare 스크립트를 추가했습니다.
    • lint-staged 설정을 추가하여 .js, .jsx, .ts, .tsx 파일에 대해 Prettier와 ESLint를 실행하도록 했습니다.
    • @emotion/react, @tanstack/react-query, axios 종속성을 추가했습니다.
  • pnpm-lock.yaml
    • 새로운 종속성 추가에 따라 pnpm-lock.yaml 파일을 업데이트했습니다.
  • src/App.css
    • 기존 Vite + React 보일러플레이트 CSS 파일을 삭제했습니다.
  • src/App.tsx
    • 기존 보일러플레이트 코드를 제거하고 ApplicationProvidersRouter를 사용하여 애플리케이션의 진입점을 재구성했습니다.
  • src/app/index.ts
    • providersroutes 모듈을 내보내도록 추가했습니다.
  • src/app/providers/ApplicationProviders.tsx
    • 애플리케이션 전역 프로바이더(QueryProvider, ThemeProvider)를 래핑하는 ApplicationProviders 컴포넌트를 추가했습니다.
  • src/app/providers/components/QueryProvider.tsx
    • React Query를 위한 QueryClientProvider를 설정하는 QueryProvider 컴포넌트를 추가했습니다.
  • src/app/providers/components/ThemeProvider.tsx
    • Chakra UI를 위한 ChakraProvider를 설정하는 ThemeProvider 컴포넌트를 추가했습니다.
  • src/app/providers/components/index.ts
    • QueryProviderThemeProvider를 내보내도록 추가했습니다.
  • src/app/providers/index.ts
    • ApplicationProviders를 내보내도록 추가했습니다.
  • src/app/routes/Router.tsx
    • React Router를 사용하여 애플리케이션의 기본 라우팅(RootLayout, MainPage)을 정의하는 Router 컴포넌트를 추가했습니다.
  • src/app/routes/index.ts
    • Router 컴포넌트를 내보내도록 추가했습니다.
  • src/index.css
    • 기존 Vite + React 보일러플레이트 CSS 파일을 삭제했습니다.
  • src/main.tsx
    • StrictMode를 제거하고 index.css 임포트를 삭제하여 애플리케이션 렌더링 로직을 간소화했습니다.
  • src/pages/index.ts
    • main 페이지 모듈을 내보내도록 추가했습니다.
  • src/pages/main/MainPage.tsx
    • 기본 MainPage 컴포넌트를 추가했습니다.
  • src/pages/main/index.ts
    • MainPage 컴포넌트를 내보내도록 추가했습니다.
  • src/shared/assets/react.svg
    • 기존 React 로고 SVG 파일을 삭제했습니다.
  • src/shared/constants/index.ts
    • route-path 상수를 내보내도록 추가했습니다.
  • src/shared/constants/route-path.ts
    • 기본 라우트 경로(ROUTE_PATHS)를 정의하는 파일을 추가했습니다.
  • src/shared/index.ts
    • libs, constants, theme, types 모듈을 내보내도록 업데이트했습니다.
  • src/shared/libs/index.ts
    • query-client 라이브러리를 내보내도록 추가했습니다.
  • src/shared/libs/query-client.ts
    • React Query의 QueryClient 인스턴스를 기본 옵션과 함께 설정하는 파일을 추가했습니다.
  • src/shared/theme/config/index.ts
    • style-system-config를 내보내도록 추가했습니다.
  • src/shared/theme/config/style-system-config.ts
    • Chakra UI의 시스템 설정을 정의하는 파일을 추가했습니다.
  • src/shared/theme/global/global-style.ts
    • 전역 스크롤바 스타일을 정의하는 파일을 추가했습니다.
  • src/shared/theme/global/index.ts
    • global-style을 내보내도록 추가했습니다.
  • src/shared/theme/index.ts
    • configglobal 테마 모듈을 내보내도록 추가했습니다.
  • src/shared/types/api.type.ts
    • API 응답 데이터의 타입을 정의하는 ApiResponse 타입을 추가했습니다.
  • src/shared/types/index.ts
    • api.type을 내보내도록 추가했습니다.
  • src/widgets/index.ts
    • layout 위젯 모듈을 내보내도록 추가했습니다.
  • src/widgets/layout/components/header/Header.tsx
    • 기본 Header 컴포넌트를 추가했습니다.
  • src/widgets/layout/components/header/index.ts
    • Header 컴포넌트를 내보내도록 추가했습니다.
  • src/widgets/layout/components/index.ts
    • header 컴포넌트 모듈을 내보내도록 추가했습니다.
  • src/widgets/layout/index.ts
    • ui 레이아웃 모듈을 내보내도록 추가했습니다.
  • src/widgets/layout/ui/RootLayout.tsx
    • 애플리케이션의 기본 레이아웃을 정의하는 RootLayout 컴포넌트를 추가했습니다.
  • src/widgets/layout/ui/index.ts
    • RootLayout 컴포넌트를 내보내도록 추가했습니다.
  • tsconfig.json
    • references 배열의 형식을 변경하고, jsxImportSource@emotion/react로 설정했습니다.
  • vite.config.ts
    • Vite React 플러그인에 jsxImportSource: "@emotion/react" 옵션을 추가했습니다.
Ignored Files
  • Ignored by pattern: .github/workflows/** (1)
    • .github/workflows/sync.yml
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

이번 PR은 프로젝트의 전체적인 구조를 설정하고 배포를 위한 기반을 마련하는 중요한 변경사항들을 포함하고 있습니다. Feature-Sliced Design에 기반한 폴더 구조, react-query, Chakra UI 등의 라이브러리 도입, 그리고 ESLint, Prettier, Husky를 이용한 코드 품질 관리 설정이 인상적입니다. 전반적으로 훌륭한 시작이지만, 몇 가지 개선할 점이 있어 리뷰를 남깁니다. 특히 react-router-dom 설정과 StrictMode 사용에 대한 부분을 확인해주시면 좋겠습니다.

@@ -0,0 +1,17 @@
import { BrowserRouter, Route, Routes } from "react-router";

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

critical

웹 애플리케이션에서는 react-router-dom 패키지를 사용해야 합니다. BrowserRouter, Route, Routes 컴포넌트는 react-router가 아닌 react-router-dom에서 export합니다. 이 부분이 수정되지 않으면 애플리케이션이 정상적으로 동작하지 않습니다.

이 변경과 함께 package.json의 의존성도 react-router에서 react-router-dom으로 변경해주세요.

Suggested change
import { BrowserRouter, Route, Routes } from "react-router";
import { BrowserRouter, Route, Routes } from "react-router-dom";

Comment on lines +1 to +5
import { createRoot } from "react-dom/client";

createRoot(document.getElementById('root')!).render(
<StrictMode>
<App />
</StrictMode>,
)
import App from "./App.tsx";

createRoot(document.getElementById("root")!).render(<App />);

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

StrictMode가 제거되었습니다. StrictMode는 애플리케이션의 잠재적인 문제를 식별하는 데 도움이 되므로, 특히 개발 환경에서는 유지하는 것이 좋습니다. StrictMode를 다시 추가하는 것을 권장합니다.

Suggested change
import { createRoot } from "react-dom/client";
createRoot(document.getElementById('root')!).render(
<StrictMode>
<App />
</StrictMode>,
)
import App from "./App.tsx";
createRoot(document.getElementById("root")!).render(<App />);
import { StrictMode } from "react";
import { createRoot } from "react-dom/client";
import App from "./App.tsx";
createRoot(document.getElementById("root")!).render(
<StrictMode>
<App />
</StrictMode>
);

Comment on lines +3 to +4
pnpm run lint:fix
pnpm run tsc

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

lint-staged가 이미 staged된 파일에 대해 eslint --fix를 실행하도록 package.json에 설정되어 있습니다. pnpm run lint:fix는 전체 프로젝트에 대해 다시 lint를 실행하므로 중복되며 커밋 속도를 저하시킬 수 있습니다. lint-staged만으로 충분하므로 아래 두 라인을 제거하는 것이 좋습니다.

msOverflowStyle: "none" /* IE and Edge */,
scrollbarWidth: "none" /* Firefox */,
},
"html, body": {},

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

html, body에 대한 스타일 객체가 비어있습니다. 불필요하므로 이 라인을 제거하는 것이 좋습니다.

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR establishes a new baseline application structure (routing + layout + shared modules) and updates build/dev tooling (Vite/TS config, lint/format hooks, dependencies) to support deployment testing and the overall project scaffold.

Changes:

  • Add app-level routing/providers (Chakra UI theme system + TanStack Query) and initial page/layout components.
  • Introduce shared building blocks (route constants, API response types, query client, Chakra global styles/system config) and barrel exports.
  • Update tooling: Vite/TS config for Emotion, ESLint/Prettier setup, Husky + lint-staged, dependency lockfile, and a GitHub Actions workflow.

Reviewed changes

Copilot reviewed 41 out of 53 changed files in this pull request and generated 10 comments.

Show a summary per file
File Description
vite.config.ts Switch to node:path and configure Emotion JSX import source; keeps @ alias to src/.
tsconfig.json Reformats project references; includes Emotion jsxImportSource and @/* path mapping.
src/widgets/layout/ui/index.ts Barrel export for layout UI.
src/widgets/layout/ui/RootLayout.tsx Adds RootLayout using Chakra Flex/Box and Outlet.
src/widgets/layout/index.ts Barrel export for widgets/layout.
src/widgets/layout/components/index.ts Barrel export for layout components.
src/widgets/layout/components/header/index.ts Barrel export for Header.
src/widgets/layout/components/header/Header.tsx Adds basic Header component.
src/widgets/index.ts Top-level widgets barrel export.
src/shared/types/index.ts Types barrel export.
src/shared/types/api.type.ts Adds ApiResponse<T> type.
src/shared/theme/index.ts Theme barrel export.
src/shared/theme/global/index.ts Global theme barrel export.
src/shared/theme/global/global-style.ts Defines Chakra global styles (incl. scrollbar hiding).
src/shared/theme/config/style-system-config.ts Creates Chakra v3 system config with global CSS.
src/shared/theme/config/index.ts Barrel export for theme config.
src/shared/libs/query-client.ts Introduces TanStack QueryClient defaults.
src/shared/libs/index.ts Libs barrel export.
src/shared/index.ts Shared layer barrel export (libs/constants/theme/types).
src/shared/constants/route-path.ts Adds route path constants.
src/shared/constants/index.ts Constants barrel export.
src/shared/assets/react.svg Removes React logo asset.
src/pages/main/index.ts Exports MainPage.
src/pages/main/MainPage.tsx Adds placeholder Main page.
src/pages/index.ts Pages barrel export.
src/main.tsx Simplifies render; removes StrictMode and global CSS import.
src/index.css Removes default Vite template CSS.
src/app/routes/index.ts Routes barrel export.
src/app/routes/Router.tsx Adds router with RootLayout + MainPage route.
src/app/providers/index.ts Providers barrel export.
src/app/providers/components/index.ts Providers components barrel export.
src/app/providers/components/ThemeProvider.tsx Adds ChakraProvider wrapper with system config.
src/app/providers/components/QueryProvider.tsx Adds QueryClientProvider and ReactQueryDevtools.
src/app/providers/ApplicationProviders.tsx Composes Query + Theme providers.
src/app/index.ts App barrel export.
src/App.tsx Replaces Vite template with ApplicationProviders + Router.
src/App.css Removes default Vite template CSS.
pnpm-lock.yaml Updates lockfile for new dependencies (Emotion, Query, Axios, etc.).
package.json Adds scripts (lint:fix/tsc/format) + lint-staged + husky prepare; adds deps.
eslint.config.js Reformats and updates ESLint config to match Prettier style.
.prettierrc Changes print width to 80; formats importOrder config.
.prettierignore Starts ignoring *.config.js/ts (previously commented out).
.husky/pre-commit Adds pre-commit hook commands (lint-staged + lint:fix + tsc).
.gitignore Ignores .eslintcache.
.github/workflows/sync.yml Adds workflow to run build.sh and push generated output to another repo.
Files not reviewed (1)
  • pnpm-lock.yaml: Language not supported

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +3 to +7

import { queryClient } from "@/shared";

type Props = {
children: React.ReactNode;
Copy link

Copilot AI Feb 8, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

React.ReactNode is referenced in the Props type but React isn’t imported, which will fail type-checking in typical TS/React setups. Import type React from "react" or use ReactNode from "react" instead.

Suggested change
import { queryClient } from "@/shared";
type Props = {
children: React.ReactNode;
import type { ReactNode } from "react";
import { queryClient } from "@/shared";
type Props = {
children: ReactNode;

Copilot uses AI. Check for mistakes.
Comment on lines +1 to +4
npx lint-staged

pnpm run lint:fix
pnpm run tsc
Copy link

Copilot AI Feb 8, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This hook is missing a shebang / Husky bootstrap (e.g. #!/usr/bin/env sh and sourcing Husky’s helper). Without it, the hook can fail to execute on Unix with an “exec format error”.

Copilot uses AI. Check for mistakes.
Comment on lines +15 to +16
- name: creates output
run: sh ./build.sh
Copy link

Copilot AI Feb 8, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Workflow runs sh ./build.sh, but this repository doesn’t include build.sh, so this job will fail on every push to main. Either add the script (and ensure it creates the expected output/ dir) or remove/replace these steps with the actual build/publish process for this project.

Suggested change
- name: creates output
run: sh ./build.sh
- name: Create output directory
run: |
mkdir -p output

Copilot uses AI. Check for mistakes.
Comment on lines +13 to +15
{children}
<ReactQueryDevtools initialIsOpen={false} />
</QueryClientProvider>
Copy link

Copilot AI Feb 8, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ReactQueryDevtools is mounted unconditionally, which will ship devtools code to production bundles and can expose query data in prod. Gate it behind import.meta.env.DEV (and optionally lazy-load it) so it only renders in development.

Copilot uses AI. Check for mistakes.
Comment on lines +3 to +7
"*": {
"&::-webkit-scrollbar": {
display: "none",
},
msOverflowStyle: "none" /* IE and Edge */,
Copy link

Copilot AI Feb 8, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Global CSS hides scrollbars for all elements ("*"). This can reduce usability/accessibility (users lose a key affordance for scrollable regions) and makes overflow harder to discover. Consider scoping this to specific containers or providing an opt-out where visible scrollbars are needed.

Copilot uses AI. Check for mistakes.
Comment on lines 6 to 8
"scripts": {
"dev": "vite",
"build": "tsc -b && vite build",
Copy link

Copilot AI Feb 8, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR description currently contains placeholder content ("x" sections) and doesn’t explain the purpose/scope of the changes. Please update the PR description so reviewers can validate intent and deployment/test implications.

Copilot uses AI. Check for mistakes.
Comment on lines +4 to +6

type Props = {
children: React.ReactNode;
Copy link

Copilot AI Feb 8, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

React.ReactNode is used in the Props type but React isn’t imported, which will cause a TypeScript error unless React is globally available (it typically isn’t with the automatic JSX runtime). Import type React from "react" or switch to ReactNode imported from "react".

Suggested change
type Props = {
children: React.ReactNode;
import type { ReactNode } from "react";
type Props = {
children: ReactNode;

Copilot uses AI. Check for mistakes.
Comment on lines +2 to +4

type Props = {
children: React.ReactNode;
Copy link

Copilot AI Feb 8, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

React.ReactNode is used for children but there is no React import, which will break TypeScript compilation. Import type React from "react" or use ReactNode from "react".

Suggested change
type Props = {
children: React.ReactNode;
import type { ReactNode } from "react";
type Props = {
children: ReactNode;

Copilot uses AI. Check for mistakes.
staleTime: 1000 * 60 * 3,
refetchOnMount: false,
refetchOnWindowFocus: false,
throwOnError: true,
Copy link

Copilot AI Feb 8, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

throwOnError: true makes query errors throw during rendering; without an Error Boundary this can crash the UI instead of allowing per-screen error handling. Either add an app-level Error Boundary (or route-level error handling) or avoid setting throwOnError globally.

Copilot uses AI. Check for mistakes.
Comment on lines +1 to +4
npx lint-staged

pnpm run lint:fix
pnpm run tsc
Copy link

Copilot AI Feb 8, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The pre-commit flow runs lint-staged and then lint:fix, which re-lints/fixes the entire repo (not just staged files) and can introduce unstaged modifications that aren’t part of the commit. Consider running only lint-staged (via pnpm exec lint-staged) and pnpm run tsc, or ensure any fixes are restricted to staged files.

Suggested change
npx lint-staged
pnpm run lint:fix
pnpm run tsc
pnpm exec lint-staged
pnpm run tsc

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🚀 Deploy 배포 관련 작업을 진행하는 경우

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant