Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
01b239e
setting: nextjs 기본 설정
rtttr1 Jan 30, 2026
f8b6094
feat: app router 변경
rtttr1 Jan 31, 2026
e92ba4b
fix: import 에러 수정:
rtttr1 Feb 3, 2026
2cbecbb
fix: import 오류 해결
rtttr1 Feb 3, 2026
7582f52
feat: 로그인 handler 구현
rtttr1 Feb 5, 2026
e8fea85
feat: 로그아웃 핸들러 구현
rtttr1 Feb 5, 2026
054e4bd
feat: BFF catch-all route handler 설정
rtttr1 Feb 5, 2026
384d4c2
feat: 로그인 body isOnboarded 추가
rtttr1 Feb 5, 2026
a54b487
refactor: BFF 패턴 코드 개선
rtttr1 Feb 5, 2026
4c959c5
feat: reissue api 구현
rtttr1 Feb 5, 2026
1dd23b9
fix: localStorage 토큰 관리 로직 삭제
rtttr1 Feb 5, 2026
1458325
fix: BFF 패턴 도입으로 프록시 설정 해제
rtttr1 Feb 5, 2026
a4d7153
fix: reservations -> classes 라우트 경로 변경 지점 라우팅 path 변경
rtttr1 Feb 5, 2026
81b55ff
feat: 라우트 가드 설정
rtttr1 Feb 5, 2026
2de5550
refactor: 온보딩 과정 변경
rtttr1 Feb 5, 2026
2009e55
refactor: 탈퇴 과정 변경
rtttr1 Feb 5, 2026
4a45475
refactor: 프록시 코드 경량화
rtttr1 Feb 6, 2026
e503d23
feat: auth쪽 fetch 공용화
rtttr1 Feb 6, 2026
d47a2d3
feat: 쿠키설정 route handler 구현
rtttr1 Feb 6, 2026
7ba2879
chore: 주석 제거
rtttr1 Feb 6, 2026
20e7aa9
refactor: 온보딩 과정에서 access token 관리 TEMP 쿠키로 관리하도록 변경
rtttr1 Feb 6, 2026
dcd0ddb
refactor: 온보딩 라우트 가드 개선
rtttr1 Feb 6, 2026
2a67257
refactor: 쿠키 옵션 SSOT
rtttr1 Feb 6, 2026
8c90c1f
fix: reissue 실패시 리다이렉트 url 수정
rtttr1 Feb 6, 2026
56a96fc
refactor: 스토리북 설정 next에 맞게 변경
rtttr1 Feb 7, 2026
0030d21
fix: 토큰 인증 관련 로직 삭제
rtttr1 Feb 7, 2026
505dda6
fix: 온보딩 완료 페이지 예외 처리
rtttr1 Feb 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,6 @@ dist-ssr
storybook-static/
# Sentry Config File
.env.sentry-build-plugin

.next
next-env.d.ts
20 changes: 10 additions & 10 deletions .storybook/main.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
import type { StorybookConfig } from '@storybook/react-vite';
import type { StorybookConfig } from '@storybook/nextjs-vite';
import { vanillaExtractPlugin } from '@vanilla-extract/vite-plugin';

const config: StorybookConfig = {
stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|mjs|ts|tsx)'],
addons: [
'@storybook/addon-onboarding',
'@storybook/addon-essentials',
'@chromatic-com/storybook',
'@storybook/addon-interactions',
],
framework: {
name: '@storybook/react-vite',
options: {},
addons: ['@chromatic-com/storybook', '@storybook/addon-a11y', '@storybook/addon-docs'],
framework: '@storybook/nextjs-vite',
staticDirs: ['../public'],
async viteFinal(config) {
return {
...config,
plugins: [...(config.plugins ?? []), ...vanillaExtractPlugin({ identifiers: 'debug' })],
};
},
};
export default config;
62 changes: 62 additions & 0 deletions .storybook/next-navigation-mock.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
const noop = () => {};

const mockRouter = {
push: noop,
replace: noop,
refresh: noop,
back: noop,
forward: noop,
prefetch: noop,
};

export function useRouter() {
return mockRouter;
}

export function usePathname(): string {
return '/';
}

export function useSearchParams(): ReadonlyURLSearchParams | null {
return typeof window !== 'undefined' ? new ReadonlyURLSearchParams(window.location.search) : null;
}

class ReadonlyURLSearchParams {
private params: URLSearchParams;

constructor(init?: string | URLSearchParams) {
this.params = new URLSearchParams(init);
}

get(name: string): string | null {
return this.params.get(name);
}

getAll(name: string): string[] {
return this.params.getAll(name);
}

has(name: string): boolean {
return this.params.has(name);
}

keys(): IterableIterator<string> {
return this.params.keys();
}

values(): IterableIterator<string> {
return this.params.values();
}

entries(): IterableIterator<[string, string]> {
return this.params.entries();
}

forEach(callbackfn: (value: string, key: string, parent: URLSearchParams) => void): void {
this.params.forEach(callbackfn);
}

toString(): string {
return this.params.toString();
}
}
5 changes: 4 additions & 1 deletion .storybook/preview.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import type { Preview } from '@storybook/react';
import type { Preview } from '@storybook/nextjs-vite';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import React from 'react';
import ModalProvider from '../src/common/components/Modal/ModalProvider';
Expand All @@ -7,6 +7,9 @@ import '../src/shared/styles/reset.css';

const preview: Preview = {
parameters: {
nextjs: {
appDirectory: true,
},
controls: {
matchers: {
color: /(background|color)$/i,
Expand Down
13 changes: 13 additions & 0 deletions custom.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,16 @@ declare module '*.svg?react' {
const src: string;
export default src;
}

/** vanilla-extract *.css.ts 모듈이 Next.js PagesPageConfig 검사에 걸리지 않도록 default 보강 */
declare module '*.css' {
import type { ComponentType } from 'react';
const styles: { default: ComponentType<any>; [key: string]: string | ComponentType<any> };
export = styles;
}

declare module '*.css.js' {
import type { ComponentType } from 'react';
const styles: { default: ComponentType<any>; [key: string]: string | ComponentType<any> };
export = styles;
}
37 changes: 0 additions & 37 deletions index.html

This file was deleted.

26 changes: 26 additions & 0 deletions next.config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { createVanillaExtractPlugin } from '@vanilla-extract/next-plugin';
import path from 'path';
import { fileURLToPath } from 'url';

const __dirname = path.dirname(fileURLToPath(import.meta.url));

const withVanillaExtract = createVanillaExtractPlugin({
identifiers: 'debug', // 기존 Vite 설정과 동일 (short | debug | custom)
});

/** @type {import('next').NextConfig} */
const nextConfig = {
// output: 'export', // Single-Page Application (SPA) 출력.
distDir: './dist', // 빌드 출력 디렉터리를 `./dist/`로 변경합니다.
basePath: process.env.NEXT_PUBLIC_BASE_PATH || '',
// 상위 폴더 lockfile과 구분해 이 프로젝트를 루트로 사용 (경고 제거)
outputFileTracingRoot: __dirname,
// src/pages는 SPA(react-router) 컴포넌트이므로 Pages Router로 검증하지 않도록 비활성화
typedRoutes: false,
eslint: {
// 마이그레이션 단계에서 기존 a11y/훅 규칙으로 빌드 실패하지 않도록 무시 (추후 규칙 수정 후 제거 권장)
ignoreDuringBuilds: true,
},
};

export default withVanillaExtract(nextConfig);
36 changes: 16 additions & 20 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,12 @@
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite --host",
"build": "tsc -b && vite build",
"dev": "next dev",
"build": "next build",
"start": "next start -p 8080",
"lint": "eslint .",
"preview": "vite preview",
"storybook": "storybook dev -p 6006",
"build-storybook": "storybook build",
"analyze": "vite-bundle-visualizer",
"svgr": "npx @svgr/cli -d src/shared/assets/svg --no-prettier --ignore-existing --typescript --no-dimensions --no-index --jsx-runtime automatic public/svg"
},
"dependencies": {
Expand All @@ -24,33 +23,30 @@
"@vanilla-extract/css": "^1.17.0",
"@vanilla-extract/recipes": "^0.5.5",
"@vanilla-extract/sprinkles": "^1.6.3",
"@vanilla-extract/vite-plugin": "^4.0.19",
"@vitejs/plugin-react": "^4.3.4",
"axios": "^1.7.9",
"clsx": "^2.1.1",
"motion": "^12.23.12",
"next": "15.5.7",
"react": "^18.3.1",
"react-calendar": "^5.1.0",
"react-dom": "^18.3.1",
"react-error-boundary": "^5.0.0",
"react-hook-form": "^7.56.1",
"react-hot-toast": "^2.5.1",
"react-image-file-resizer": "^0.4.8",
"react-router-dom": "^7.1.1",
"swiper": "^11.2.1",
"vite-tsconfig-paths": "^5.1.4",
"zod": "^3.24.3",
"zustand": "^5.0.7"
},
"devDependencies": {
"@chromatic-com/storybook": "^3.2.3",
"@chromatic-com/storybook": "^5.0.0",
"@eslint/js": "^9.17.0",
"@storybook/addon-essentials": "^8.4.7",
"@storybook/addon-interactions": "^8.4.7",
"@storybook/addon-onboarding": "^8.4.7",
"@storybook/addon-a11y": "^10.2.7",
"@storybook/addon-docs": "^10.2.7",
"@storybook/blocks": "^8.4.7",
"@storybook/react": "^8.4.7",
"@storybook/react-vite": "^8.4.7",
"@storybook/nextjs-vite": "^10.2.7",
"@storybook/react": "^10.2.7",
"@storybook/react-vite": "^10.2.7",
"@storybook/test": "^8.4.7",
"@storybook/testing-library": "^0.2.2",
"@testing-library/dom": "^10.4.0",
Expand All @@ -61,7 +57,9 @@
"@types/swiper": "^6.0.0",
"@typescript-eslint/eslint-plugin": "^8.19.1",
"@typescript-eslint/parser": "^8.19.1",
"@vitejs/plugin-react-swc": "^3.5.0",
"@vanilla-extract/next-plugin": "^2.4.10",
"@vanilla-extract/vite-plugin": "^5.1.4",
"@vitest/coverage-v8": "^4.0.18",
"chromatic": "^11.28.0",
"eslint": "^9.17.0",
"eslint-config-prettier": "^9.1.0",
Expand All @@ -74,13 +72,11 @@
"globals": "^15.14.0",
"install": "^0.13.0",
"msw": "^2.10.4",
"storybook": "^8.4.7",
"storybook": "^10.2.7",
"typescript": "~5.6.3",
"typescript-eslint": "^8.28.0",
"vite": "^6.0.5",
"vite-bundle-visualizer": "^1.2.1",
"vite-plugin-svgr": "^4.3.0",
"vite-tsconfig-paths": "^5.1.4"
"vite": "^7.3.1",
"vitest": "^4.0.18"
},
"eslintConfig": {
"extends": [
Expand Down
Loading
Loading