tolelom aaf92baa9f
All checks were successful
Client CI/CD / deploy (push) Successful in 25s
fix: 입력 검증·보안 헤더·접근성·UX 개선
- 로그인/회원가입 입력 길이 제한 (username 50자, password 100자)
- 공지사항 관리 입력 길이 제한 (제목 200자, 내용 10000자)
- AnnouncementBoard aria-expanded 접근성 속성 추가
- DownloadSection useEffect 중복 API 호출 제거
- nginx 보안 헤더 (X-Content-Type-Options, X-Frame-Options)
- nginx /assets/ 장기 캐싱 (immutable, 1년)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 17:48:24 +09:00
2026-02-25 00:20:43 +09:00
2026-02-24 11:18:53 +09:00
2026-02-25 00:20:43 +09:00
2026-02-24 11:18:53 +09:00

One of the plans — Frontend

React 기반 웹 프론트엔드. 유저 인증, 공지사항, 게임 런처 다운로드/실행 기능을 제공합니다.

기술 스택

  • React 19 (plain JavaScript, no TypeScript)
  • Vite 7 — 빌드 도구 / HMR
  • React Router v7 — 클라이언트 사이드 라우팅
  • ESLint — flat config (eslint.config.js)

실행

npm install
npm run dev       # 개발 서버 (HMR)
npm run build     # 프로덕션 빌드 → dist/
npm run preview   # 빌드 결과 로컬 미리보기
npm run lint      # ESLint 검사

환경 변수

변수 설명 기본값
VITE_API_BASE_URL 백엔드 API 주소 "" (상대경로)

프로덕션 빌드 시 --build-arg VITE_API_BASE_URL=https://a301.api.tolelom.xyz 로 주입.

프로젝트 구조

src/
├── api/                  # 백엔드 API 호출 모듈
│   ├── client.js         # fetch 래퍼 (JWT 자동 첨부, 401 리다이렉트)
│   ├── auth.js
│   ├── announcements.js
│   ├── download.js
│   └── users.js
├── context/              # 인증 컨텍스트 (3파일 분리 — react-refresh 규칙)
│   ├── authContextValue.js  # createContext
│   ├── AuthContext.jsx      # AuthProvider
│   └── useAuth.js           # useAuth hook
├── pages/
│   ├── HomePage.jsx      # 메인 (배너 + 다운로드 + 공지)
│   ├── LoginPage.jsx
│   ├── RegisterPage.jsx
│   └── AdminPage.jsx     # 관리자 (공지/다운로드/유저 관리)
└── components/
    ├── DownloadSection.jsx   # 게임 시작 버튼 (a301:// URI 호출)
    ├── AnnouncementBoard.jsx
    └── admin/
        ├── AnnouncementAdmin.jsx
        ├── DownloadAdmin.jsx  # launcher.exe / game.zip 업로드
        └── UserAdmin.jsx

게임 실행 흐름

  1. 유저가 "게임 시작" 클릭 → a301://launch?token=<JWT> 호출
  2. 런처 미설치 시 → launcher.exe 자동 다운로드
  3. 런처 설치 후 재클릭 → 런처가 게임 다운로드/실행 처리

배포

Docker + nginx로 서빙. nginx.conf 참고.

docker build --build-arg VITE_API_BASE_URL=https://a301.api.tolelom.xyz -t a301-client .
Description
No description provided
Readme 1.3 MiB
Languages
JavaScript 76.2%
CSS 22.8%
HTML 0.7%
Dockerfile 0.3%