docs(coupon): 캔 쿠폰 OSIV 회귀 테스트 계획을 문서화한다

This commit is contained in:
2026-07-12 21:16:58 +09:00
parent cd3fc00809
commit 729e3e8c45
2 changed files with 54 additions and 0 deletions

View File

@@ -0,0 +1,30 @@
# 캔 쿠폰 OSIV 회귀 테스트 보강 Plan/TASK
## Goal
`CanCouponService.useCanCoupon()`가 OSIV off 환경에서 Spring 트랜잭션 프록시를 통해 호출될 때 `Member.auth` lazy 연관 접근을 포함한 쿠폰 사용 흐름이 예외 없이 완료됨을 검증한다.
### Phase 1: 실제 호출 경로 통합 테스트 추가
- [x] **Task 1.1: `CanCouponServiceIntegrationTest` 추가**
- 파일: `src/test/kotlin/kr/co/vividnext/sodalive/can/coupon/CanCouponServiceIntegrationTest.kt`
- RED: 트랜잭션 없는 테스트 메서드에서 인증 회원, lazy `Member.auth`, CAN 쿠폰 fixture를 만든 뒤 Spring 빈 `CanCouponService.useCanCoupon()`를 호출하는 테스트를 작성한다.
- GREEN: 기존 `CanCouponService.useCanCoupon()``@Transactional` 경계로 테스트가 통과하는지 확인한다.
- REFACTOR: 테스트 fixture를 최소화하고, 쿠폰 사용 후 저장 상태를 확인한다.
- 검증 기준:
- `./gradlew --no-daemon test --tests kr.co.vividnext.sodalive.can.coupon.CanCouponServiceIntegrationTest`
- `./gradlew --no-daemon ktlintCheck`
- 검증 기록:
- 무엇: `CanCouponServiceIntegrationTest`에서 인증 회원, lazy `Member.auth`, CAN 쿠폰 fixture를 DB에 저장한 뒤 트랜잭션 없는 테스트 메서드에서 Spring 빈 `CanCouponService.useCanCoupon()`를 호출했다.
- 왜: 단순 애노테이션 검사가 아니라 OSIV off 환경의 실제 서비스 호출 경로에서 lazy 초기화 예외가 재발하지 않는지 확인하기 위해서다.
- 어떻게: 첫 실행 `./gradlew --no-daemon test --tests kr.co.vividnext.sodalive.can.coupon.CanCouponServiceIntegrationTest`는 컨텍스트 부팅 중 Redis 연결 실패로 실패했다. 테스트에 기존 관례인 `EmbeddedRedisInitializer` opt-in과 `@DirtiesContext`를 추가했다.
- 결과: 재실행 `./gradlew --no-daemon test --tests kr.co.vividnext.sodalive.can.coupon.CanCouponServiceIntegrationTest``BUILD SUCCESSFUL in 2m 1s`로 통과했다.
## 검증 기록
- Run: `./gradlew --no-daemon test --tests kr.co.vividnext.sodalive.can.coupon.CanCouponServiceTest --tests kr.co.vividnext.sodalive.can.coupon.CanCouponServiceIntegrationTest`
- Result: `BUILD SUCCESSFUL in 2m 24s`
- Run: `./gradlew --no-daemon ktlintCheck`
- Result: `BUILD SUCCESSFUL in 1m 9s`
- Run: `git diff --check`
- Result: 공백 오류 없이 통과
- Run: `./gradlew tasks --all`
- Result: sandbox 환경에서는 `~/.gradle` wrapper lock 파일 접근 제한으로 실패했고, 승인 실행 후 `BUILD SUCCESSFUL in 11s`로 통과했다.