Skip to content

[BOM-1163] refactor: 테스트 코드 개선#788

Merged
Ryan-Dia merged 37 commits into
server-devfrom
BOM-1163-테스트-코드-개선
Jun 25, 2026

Hidden character warning

The head ref may contain hidden characters: "BOM-1163-\ud14c\uc2a4\ud2b8-\ucf54\ub4dc-\uac1c\uc120"
Merged

[BOM-1163] refactor: 테스트 코드 개선#788
Ryan-Dia merged 37 commits into
server-devfrom
BOM-1163-테스트-코드-개선

Conversation

@Ryan-Dia

@Ryan-Dia Ryan-Dia commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

What

미루고 미루다 드디어 테스트 코드를 개선했습니다. 🥹

저번에 이야기 나눈대로 기준은 아래처럼 잡았습니다.

대상 테스트 방식 범위 주로 검증할 것
HTTP API @AcceptanceTest Controller ~ DB HTTP 상태, 응답 계약, 인증·인가, 요청 검증, 최종 DB 상태
스케줄러·이벤트·배치 @IntegrationTEST Service ~ DB 실행 결과, 트랜잭션, 최종 DB 상태
도메인 정책 단위 테스트 Domain 객체 정책, 경계값, 예외

왜 이렇게 전략을 세웠고 세부 사항들은 따로 정리해두었습니다.

봄봄 테스트 코드 작성 가이드 라인

핵심 변경

  • API 유스케이스 검증을 Service 중심 통합 테스트에서 Controller 기반 HTTP 인수 테스트로 이동
  • Controller 테스트를 MockMvc/RestAssuredMockMvc에서 실제 RestAssured 호출 방식으로 전환
  • HTTP 인수 테스트의 사전 데이터를 TestFixture 중심에서 JSON dataset 중심으로 전환
  • 테스트 격리를 @transactional 롤백과 파일별 수동 delete에서 공통 DELETE 기반 DB 초기화로 통일
  • 파일별 @MockitoBean을 줄이고 공통 테스트 대역과 MutableClock으로 통합해 Spring Context 재사용성 개선
  • Gradle 테스트 실행을 단일 worker에서 2개 worker 병렬 실행으로 변경
  • OpenAPI 생성 결과가 변경되지 않으면 재생성하지 않도록 증분 처리
  • 예상 가능한 400·403·404 테스트의 불필요한 예외 스택 로그 제거
  • 테스트 작성 기준을 AGENTS.md로 문서화해 사람과 AI가 같은 스타일로 테스트를 작성하도록 정리
  • Service 테스트에서 불필요하고 복잡한 SetUp 메서드 축소 및 제거 정리

Why

  • Controller 테스트가 실제 HTTP 계약보다 내부 Service mock과 DTO 조립에 묶여 있어, 사용자 관점의 요청/응답 회귀를 충분히 보호하지 못했습니다.
  • 같은 요구사항을 Controller, Service, Repository 테스트가 계층별로 반복 검증하면서 테스트 수와 유지 비용이 커졌습니다.
  • 테스트 파일마다 @MockitoBean, 수동 repository 삭제, fixture 생성 방식이 달라 Spring Context 재사용이 어렵고 setup 코드가 비대해졌습니다.
  • TestFixture 기본값에 사전 조건이 숨어 있어 테스트만 보고 어떤 데이터로 어떤 시나리오를 검증하는지 파악하기 어려웠습니다.
  • 수동 deleteAllInBatch() 정리 체인이 누락되거나 순서가 달라지면 데이터 충돌이 날 수 있어, 테스트 격리 방식이 파일마다 흔들렸습니다.
  • 스케줄러/날짜 기반 로직이 현재 시간에 직접 의존하거나 생성 코드 작업이 반복 실행되어 테스트가 느리거나 불안정해질 여지가 있었습니다.
  • 테스트가 늘어날 수록 테스트 시간이 점점 길어져 코드 작성하는 도중에 맥락이 계속 끊겼습니다.

How

  • HTTP API는 Service mock 대신 실제 Controller ~ DB 흐름을 통과하는 @AcceptanceTest로 검증했습니다.
  • 테스트 데이터는 TestFixture로 즉석 생성하기보다 JSON dataset에 고정 ID로 명시해 사전 조건이 보이도록 했습니다.
  • 쓰기 테스트처럼 dataset을 오염시키는 경우만 @ResetsAcceptanceData를 붙여 전체 수동 삭제를 줄였습니다.
  • API로 이미 보호되는 흐름은 Service 테스트에서 중복 검증하지 않고 Controller acceptance 테스트로 올렸습니다.
  • HTTP 진입점이 없는 스케줄러·이벤트·배치는 @IntegrationTest로 남겼고, 순수 정책은 Domain 단위 테스트로 분리했습니다.
  • CleanUp, AcceptanceDataSetLoader, support 패키지 분리로 새 테스트가 같은 방식으로 작성되도록 기반을 정리했습니다.
  • OpenAPI 생성 fingerprint와 테스트 task 분리로 테스트 실행 전 불필요한 생성/포맷 비용을 줄였습니다.

Review Points

  • 삭제/축소한 Service 테스트가 API/Integration/Domain 테스트로 충분히 대체되는지
  • JSON dataset이 테스트 의도와 사전 조건을 읽기 쉽게 보여주는지
  • CleanUp/dataset loader의 데이터 격리 흐름이 안정적인지
  • OpenAPI fingerprint skip 로직이 stale generated code를 만들 가능성이 없는지

Verification

  • ./gradlew test --rerun-tasks
  • git merge-tree origin/server-dev HEAD conflict 없음 확인

Ryan-Dia added 30 commits June 19, 2026 12:02
@Ryan-Dia Ryan-Dia force-pushed the BOM-1163-테스트-코드-개선 branch from ef8bb12 to 72cbb7e Compare June 23, 2026 06:41
@Ryan-Dia Ryan-Dia marked this pull request as ready for review June 23, 2026 08:41
@github-actions github-actions Bot added BE backend PR D-2 labels Jun 23, 2026
@Ryan-Dia Ryan-Dia added D-3 and removed D-2 labels Jun 23, 2026
@github-actions github-actions Bot added D-2 and removed D-3 labels Jun 24, 2026
@Ryan-Dia Ryan-Dia changed the title [BOM-1163] 테스트 코드 개선 [BOM-1163] refactor: 테스트 코드 개선 Jun 24, 2026
@github-actions github-actions Bot added D-1 and removed D-2 labels Jun 25, 2026
@Ryan-Dia Ryan-Dia merged commit 2f7ed54 into server-dev Jun 25, 2026
20 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

BE backend PR D-1

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants