Skip to content

fix: sync 입력 제약 보강 및 회귀 신호 없는 테스트 정리 - #20

Merged
kobenlys merged 1 commit into
developfrom
feature/test-rule-hardening
Sep 3, 2026
Merged

kobenlys merged 1 commit into
developfrom
feature/test-rule-hardening

Conversation

@kobenlys

@kobenlys kobenlys commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

🏷️ 작업 유형

  • 🐛 버그 픽스
  • ✨ 개발
  • 📝 문서 추가 및 수정
  • ♻️ 리팩터링
  • 🔧 ETC

📋 변경 사항

입력 제약 보강

  • TokenRecordRequest.model에 @Size(80) 추가 — 컬럼 폭(VARCHAR(80)) 초과 시 500 대신 400 반환
  • 토큰 4필드에 @Max(1e11) 추가 — 집계 SUM의 bigint 오버플로 차단
  • SyncRequest.records에 @Size(10000) 추가 — 무제한 역직렬화로 인한 OOM 차단

기존 동작:

입력 이전 이후
model 81자 500 + @Transactional로 sync 배치 전체 롤백 400
토큰 Long.MAX급 저장 성공 후 배지 요청마다 500 (자가 복구 불가) 400
records 수백만 건 힙 적재 후 OOM 400

테스트 강화

  • SyncSchemaConstraintTest 신규 — 제약값과 마이그레이션 DDL을 수치로 대조
  • SyncControllerTest 신규 — @Valid → 400, 미인증 → 401 배선 검증
  • CardClaudeBadgeThemeTest에 레벨 임계 직전/직후 9케이스 추가

테스트 정리

  • 세터 왕복·미초기화 null 단언 2건 제거 — 컴파일러가 이미 보장
  • 복합키 equals 개별 6건 제거 — 같은 클래스의 파라미터화 테스트와 완전 중복

✅ 테스트

  • ./mvnw test — 493건 통과 (476 − 8 + 25)
  • ./mvnw verify — 통합 37건 포함 통과
  • 제약 추가 전 RED 확인 후 GREEN 전환 (SyncValidationTest 3건 실패 → 통과)

테스트 카테고리 7종 규칙을 기존 코드에 적용한 결과다.

model 이 컬럼 폭(VARCHAR(80))을 넘어도 검증을 통과해 네이티브 INSERT 까지
내려가 500 이 났고, @transactional 이라 그 sync 배치 전체가 롤백됐다.
토큰 필드는 상한이 없어 집계 SUM 에서 bigint 오버플로가 가능했다.

- TokenRecordRequest: model @SiZe(80), 토큰 4필드 @max(1e11)
- SyncRequest: records @SiZe(10000)
- SyncSchemaConstraintTest(신규): 제약값과 DDL 을 대조
- SyncControllerTest(신규): @Valid -> 400, 미인증 -> 401 배선 검증
- CardClaudeBadgeThemeTest: 레벨 임계 직전/직후 9케이스 추가
- 세터 왕복, 복합키 중복 등 회귀 신호 없는 테스트 8건 제거

유닛 493, 통합 37 통과.
@kobenlys kobenlys self-assigned this Sep 3, 2026
@kobenlys
kobenlys merged commit ca83ccf into develop Sep 3, 2026
2 checks passed
@kobenlys
kobenlys deleted the feature/test-rule-hardening branch September 3, 2026 13:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant