Files
sodalive-backend-spring-boot/docs/20260712_캔쿠폰_OSIV회귀테스트보강/plan-task.md

2.5 KiB

캔 쿠폰 OSIV 회귀 테스트 보강 Plan/TASK

Goal

CanCouponService.useCanCoupon()가 OSIV off 환경에서 Spring 트랜잭션 프록시를 통해 호출될 때 Member.auth lazy 연관 접근을 포함한 쿠폰 사용 흐름이 예외 없이 완료됨을 검증한다.

Phase 1: 실제 호출 경로 통합 테스트 추가

  • 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.CanCouponServiceIntegrationTestBUILD 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로 통과했다.