Skip to content

테스트 및 인프라 설정

Raw
// playwright.config.mjs (동일)
export default {
  testDir: './tests/e2e',
  timeout: 30000,
  use: {
    headless: true,
    viewport: { width: 1920, height: 1080 },
    ignoreHTTPSErrors: true,
    baseURL: 'http://localhost:8080'
  },
  reporter: [['list'], ['html', { outputFolder: 'playwright-report' }]]
}
// vitest.config.js
import vue from '@vitejs/plugin-vue' // Vue 3 플러그인

export default defineConfig({
  plugins: [vue()],
  test: {
    environment: 'jsdom',
    globals: true,
    silent: true,
    exclude: ['**/node_modules/**', '**/tests/e2e/**']
  }
})
// vitest.config.js
import { createVuePlugin } from 'vite-plugin-vue2' // Vue 2 플러그인

export default defineConfig({
  plugins: [createVuePlugin()],
  test: { environment: 'jsdom', globals: true, silent: true }
})
# .env.example / .env.dist
VITE_SENTRY_ENV=production
VITE_I18N_LOCALE=ko
VITE_I18N_FALLBACK_LOCALE=en
VITE_API_BASE_URL=
VITE_WORKSPACE_BASE_URL=https://test.synapse.sh
VITE_LOGIN_REDIRECT_PATH=/auth/login
VITE_PROJECT_LIST_REDIRECT_PATH=/projects
VITE_DEV_AUTH_TOKEN=
VITE_DEV_TENANT_TOKEN=

접근: import.meta.env.VITE_*

# .env.example / .env.dist
NODE_ENV=production
VUE_APP_SENTRY_ENV=production
DEPLOYMENT_TARGET=production
VUE_APP_I18N_LOCALE=ko
VUE_APP_I18N_FALLBACK_LOCALE=en
VUE_APP_API_BASE_URL=
VUE_APP_WORKSPACE_BASE_URL=https://test.synapse.sh
VUE_APP_LOGIN_REDIRECT_PATH=/auth/login

접근: process.env.VUE_APP_*

용도main (VITE_)staging (VUE_APP_)
Sentry 환경VITE_SENTRY_ENVVUE_APP_SENTRY_ENV
i18n 로케일VITE_I18N_LOCALEVUE_APP_I18N_LOCALE
i18n 폴백VITE_I18N_FALLBACK_LOCALEVUE_APP_I18N_FALLBACK_LOCALE
API URLVITE_API_BASE_URLVUE_APP_API_BASE_URL
워크스페이스 URLVITE_WORKSPACE_BASE_URLVUE_APP_WORKSPACE_BASE_URL
로그인 리다이렉트VITE_LOGIN_REDIRECT_PATHVUE_APP_LOGIN_REDIRECT_PATH
파일용도
pnpm-workspace.yamlpnpm 워크스페이스 설정 (onlyBuiltDependencies)
.npmrcauto-install-peers=true, strict-peer-dependencies=false, shamefully-hoist=true
tailwind.config.jsTailwind CSS 4 커스텀 설정
파일용도
webpack.config.cjsWebpack 5 빌드 설정
babel.config.jsBabel 트랜스파일 + 경로 별칭 + 프로덕션 console 제거
package-lock.jsonnpm 락파일
.hintrcwebhint 설정 (-webkit-user-drag 호환성 무시)
파일용도
tsconfig.jsonTypeScript 설정
eslint.config.mjsESLint 9 Flat Config
.prettierrc.jsonPrettier 설정
.prettierignorePrettier 제외 대상
postcss.config.jsPostCSS 플러그인
vitest.config.jsVitest 단위 테스트
playwright.config.mjsPlaywright E2E 테스트
.husky/pre-commitlint-staged 실행
.gitattributes*.wasm binary
.markdownlint.jsonMarkdown 린팅 규칙
.env.example / .env.dist환경변수 템플릿
synapse-annotator/
├── index.html                    # Vite 엔트리 HTML
├── vite.config.js                # Vite 빌드 설정
├── tailwind.config.js            # Tailwind CSS 설정
├── pnpm-workspace.yaml           # pnpm 워크스페이스
├── .npmrc                        # pnpm 설정
├── package.json
├── tsconfig.json
├── eslint.config.mjs
├── .prettierrc.json
├── postcss.config.js
├── vitest.config.js
├── playwright.config.mjs
├── src/
│   ├── main.js                   # 앱 엔트리포인트
│   ├── i18n.js                   # i18n 설정
│   ├── plugins/
│   │   ├── index.js              # 플러그인 등록
│   │   ├── components.js         # 글로벌 컴포넌트
│   │   └── sentry.js             # Sentry 초기화
│   ├── app/
│   │   ├── app.vue               # 루트 컴포넌트
│   │   ├── app-routes.js         # Vue Router 4
│   │   ├── app-store.js          # Vuex 4
│   │   ├── annotator/
│   │   │   ├── annotators/       # 어노테이터별 구현
│   │   │   ├── services/
│   │   │   ├── store/
│   │   │   └── routes/
│   │   ├── dashboard/
│   │   └── shared/
│   ├── assets/
│   └── locales/                  # i18n JSON (ko, en)
├── tests/
│   ├── unit/
│   └── e2e/
├── wasm/                         # WASM 모듈
│   ├── annotator/
│   ├── image-annotator/
│   └── wasm-utils/
└── dist/                         # 빌드 출력
synapse-annotator/
├── public/
│   └── index.html                # Webpack 템플릿 HTML
├── webpack.config.cjs            # Webpack 빌드 설정
├── babel.config.js               # Babel 설정
├── package.json
├── package-lock.json             # npm 락파일
├── tsconfig.json
├── eslint.config.mjs
├── .prettierrc.json
├── postcss.config.js
├── vitest.config.js
├── playwright.config.mjs
├── src/
│   ├── main.js                   # 앱 엔트리포인트
│   ├── i18n.js                   # i18n 설정
│   ├── vue-shim.d.ts             # Vue 타입 선언
│   ├── app/
│   │   ├── app.vue               # 루트 컴포넌트
│   │   ├── app-routes.js         # Vue Router 3
│   │   ├── app-store.js          # Vuex 3
│   │   ├── annotator/
│   │   │   ├── annotators/
│   │   │   ├── services/
│   │   │   ├── store/
│   │   │   └── routes/
│   │   ├── dashboard/
│   │   └── shared/
│   ├── assets/
│   └── locales/
├── tests/
├── wasm/
├── docker/                       # Docker 설정
├── docs/
└── dist/
Alias경로main (vite)main (tsconfig)staging (webpack)staging (babel)staging (tsconfig)
@src/OOOOO
@appsrc/app/OOOOX
@assetssrc/assets/OOOOX
@iasrc/app/annotator/annotators/image-annotator/OOOOX
@pasrc/app/annotator/annotators/pcd-annotator/OOOOX
@tasrc/app/annotator/annotators/text-annotator/OOOOX
@vasrc/app/annotator/annotators/video-annotator/OOOOX
@aasrc/app/annotator/annotators/audio-annotator/OOXXX
@ptasrc/app/annotator/annotators/prompt-annotator/OOOOX
@servicessrc/app/annotator/services/OOXXX
@sharedsrc/app/shared/OOXXX