Skip to content

feat: Phase 5-6 — Shared Types, 테스트 109건, 보안 강화, 폼 검증#2

Open
DrJinHoChoi wants to merge 7 commits intomasterfrom
feat/phase-5-6-shared-types-security-tests
Open

feat: Phase 5-6 — Shared Types, 테스트 109건, 보안 강화, 폼 검증#2
DrJinHoChoi wants to merge 7 commits intomasterfrom
feat/phase-5-6-shared-types-security-tests

Conversation

@DrJinHoChoi
Copy link
Copy Markdown
Owner

Summary

  • Phase 5A: @etp/shared 타입 통합 — WebSocket 이벤트/API 응답 타입 정의, 프론트엔드 5개 페이지의 로컬 인터페이스를 shared 타입으로 교체 (any 제거)
  • Phase 5B: 라우터 경화 — 404 NotFound 페이지, RouteErrorBoundary, catch-all 라우트 추가
  • Phase 5C: 대시보드 최근 거래 피드 — getRecentTrades 엔드포인트, 한국어 상대시간 유틸, 실시간 WebSocket 피드
  • Phase 5D: 프론트엔드 테스트 0건→109건 (UI 컴포넌트 6개, 페이지 4개, 스토어/서비스 5개)
  • Phase 6A: 백엔드 보안 강화 — 비밀번호 강도 검증, 엔드포인트별 Rate Limiting, 환경변수 시작 시 검증, DID privateKey 노출 제거
  • Phase 6B: 프론트엔드 폼 검증 — Zod v4 + react-hook-form 스키마 생성 (auth, trading, wallet), Login 페이지 통합 완료

Test plan

  • 백엔드 101개 단위 테스트 통과 (pnpm --filter backend test)
  • 프론트엔드 109개 단위 테스트 통과 (pnpm --filter frontend test)
  • 백엔드 빌드 클린 (pnpm --filter backend build)
  • 프론트엔드 빌드 클린 (pnpm --filter frontend build)
  • 수동: /nonexistent 접속 시 404 페이지 표시 확인
  • 수동: 약한 비밀번호로 회원가입 시 에러 메시지 확인
  • 수동: Login 폼에서 빈 값 제출 시 인라인 Zod 에러 표시 확인

🤖 Generated with Claude Code

DrJinHoChoi and others added 7 commits February 17, 2026 20:23
…안 강화, 폼 검증 통합

Phase 5:
- 5A: @etp/shared 타입 통합 — WebSocket 이벤트 타입, API 응답 타입 정의, 프론트엔드 5개 페이지 로컬 인터페이스를 shared 타입으로 교체
- 5B: 라우터 경화 — 404 NotFound 페이지, RouteErrorBoundary, App.tsx catch-all 라우트 추가
- 5C: 대시보드 최근 거래 피드 — backend getRecentTrades 엔드포인트, 한국어 상대시간 유틸, 실시간 WebSocket 피드
- 5D: 프론트엔드 테스트 0건→109건 — UI 컴포넌트 6개, 페이지 4개, 스토어/서비스 5개 테스트 파일

Phase 6 (진행 중):
- 6A: 백엔드 보안 강화 — 비밀번호 강도 검증(@matches 데코레이터), 엔드포인트별 Rate Limiting(로그인 5회/분, DID 3회/분), 환경변수 시작 시 검증(class-validator), DID privateKey 클라이언트 노출 제거
- 6B: 프론트엔드 폼 검증 통합 — Zod v4 + react-hook-form으로 Login 페이지 리팩토링, auth/wallet/trading Zod 스키마 생성

테스트: 백엔드 101개 + 프론트엔드 109개 = 총 210개 통과

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- CI/CD: Redis 서비스 추가, Lint 단계, prisma migrate deploy, E2E 테스트 단계
- Trading.tsx/Wallet.tsx: react-hook-form + Zod 스키마 연결 및 인라인 에러 표시
- auth.e2e-spec: 강한 비밀번호 적용 + 약한 비밀번호 거부 테스트 추가
- trading.e2e-spec: 매수 주문, 유효성 검증, 주문 매칭 플로우 테스트 추가
- settlement.e2e-spec (신규): 정산 조회/생성/확인/분쟁 제기/분쟁 거부 E2E
- token.e2e-spec (신규): 잔고 조회/이체 검증/관리자 권한/잔고 일관성 E2E

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
ESLint 패키지가 devDependencies에 없어 CI에서 'eslint: not found' 에러 발생.
ESLint 설정 완료 후 lint 단계를 다시 추가할 예정.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
CI 환경에서 register 시 DID 자동발급이 실패할 수 있어,
trading/settlement E2E 테스트의 beforeAll에서 명시적으로
POST /api/auth/did/issue를 호출하여 DID를 보장함.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
E2E jest config에서 uuid mock mapping을 제거하여 실제 UUID가
생성되도록 함. mock UUID는 모든 사용자에게 동일한 DID를 생성하여
unique constraint 에러를 유발함.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
모든 E2E 테스트에서 ThrottlerGuard를 비활성화하여
다수의 register/login 요청이 rate limiting에 걸리지 않도록 함.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
APP_GUARD로 등록된 ThrottlerGuard는 overrideGuard가 아닌
overrideProvider로 오버라이드해야 함. 비밀번호 강도 테스트 4개 복원.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant