Skip to content

Latest commit

 

History

History
191 lines (142 loc) · 6.24 KB

File metadata and controls

191 lines (142 loc) · 6.24 KB

리뷰 기능 MySQL 연동 테스트 구현 완료 보고서

📋 작업 개요

리뷰 관련 기능에 대한 MySQL 데이터베이스 연동 테스트 코드를 작성했습니다. 기존 H2 기반에서 MySQL 기반으로 변경하고, 실제 데이터베이스와 연동되는 통합 테스트를 추가했습니다.

✅ 완료된 작업

1. SQL 매핑 수정

  • 파일: src/main/resources/bjs/zangbu/review/mapper/ReviewMapper.xml
  • 변경사항:
    • user_idmember_id 필드명 변경
    • address_idcomplex_id 필드명 변경
    • 누락된 selectComplexIdByBuildingId 쿼리 추가

2. 테스트 설정 파일 작성

  • TestConfig.java: Spring Framework 기반 테스트 설정
    • MySQL 데이터소스 설정
    • MyBatis SqlSessionFactory 설정
    • 트랜잭션 매니저 설정
  • application-test.yml: MySQL 연결 정보
  • test-data.sql: 테스트용 초기 데이터

3. MySQL 통합 테스트 작성

ReviewMapperTest.java

  • 기능: MyBatis 매퍼와 MySQL DB 직접 연동 테스트
  • 테스트 케이스:
    • 리뷰 목록 조회 (selectByBuilding)
    • 리뷰 개수 조회 (countByBuilding)
    • 최신 리뷰 평점 조회 (selectLatestReviewRank)
    • 리뷰 상세 조회 (selectById)
    • 리뷰 생성 (insertReview)
    • 리뷰 삭제 (deleteReview)
    • 단지 ID 조회 (selectComplexIdByBuildingId)

ReviewServiceIntegrationTest.java

  • 기능: 서비스 레이어와 MySQL DB 연동 테스트
  • 테스트 케이스:
    • 리뷰 목록 조회 (페이징 포함)
    • 리뷰 상세 조회
    • 리뷰 생성 (complexId 자동 조회/직접 제공)
    • 리뷰 삭제
    • 예외 상황 처리 (존재하지 않는 데이터, 유효성 검사)

ReviewControllerIntegrationTest.java

  • 기능: REST API 엔드포인트와 MySQL DB 연동 테스트
  • 테스트 케이스:
    • GET /review/list/{buildingId} - 리뷰 목록 조회
    • GET /review/{reviewId} - 리뷰 상세 조회
    • POST /review - 리뷰 생성
    • DELETE /review/{reviewId} - 리뷰 삭제
    • 페이징 기능 테스트
    • HTTP 상태 코드 및 JSON 응답 검증

4. 문서화

  • README_TEST.md: 테스트 실행 방법 가이드
  • test-runner.gradle: 테스트 실행용 Gradle 태스크
  • REVIEW_TEST_SUMMARY.md: 작업 완료 보고서 (본 문서)

🔧 기술 스택

  • Database: MySQL 8.0+
  • Testing Framework: JUnit 5
  • Assertion Library: AssertJ
  • Mocking: Mockito
  • Spring: Spring Framework 5.3.33 (Spring Test)
  • ORM: MyBatis 3.5.15
  • Connection Pool: HikariCP

📁 생성된 파일 구조

zangBu_Back/
├── src/
│   ├── main/
│   │   └── resources/
│   │       └── bjs/zangbu/review/mapper/
│   │           └── ReviewMapper.xml (수정됨)
│   └── test/
│       ├── java/
│       │   └── bjs/zangbu/
│       │       ├── config/
│       │       │   └── TestConfig.java (신규)
│       │       └── review/
│       │           ├── mapper/
│       │           │   └── ReviewMapperTest.java (신규)
│       │           ├── service/
│       │           │   └── ReviewServiceIntegrationTest.java (신규)
│       │           └── controller/
│       │               └── ReviewControllerIntegrationTest.java (신규)
│       └── resources/
│           ├── application-test.yml (신규)
│           ├── test-data.sql (신규)
│           ├── README_TEST.md (신규)
│           └── test-runner.gradle (신규)
└── REVIEW_TEST_SUMMARY.md (신규)

🎯 테스트 실행 방법

사전 준비

  1. MySQL 서버 실행 (localhost:3306)
  2. 데이터베이스 생성 (zangBu)
  3. 필요한 테이블 생성 (제공된 SQL 스크립트 사용)
  4. 사용자 권한 설정 (backjinsa / backjinsa1234)

테스트 실행 명령어

# 전체 테스트 실행
./gradlew test

# 리뷰 관련 테스트만 실행
./gradlew test --tests "bjs.zangbu.review.*"

# MySQL 통합 테스트만 실행
./gradlew test --tests "*IntegrationTest"

# 특정 테스트 클래스 실행
./gradlew test --tests "bjs.zangbu.review.mapper.ReviewMapperTest"

📊 테스트 커버리지

매퍼 레이어

  • ✅ 모든 CRUD 작업 테스트
  • ✅ 페이징 및 정렬 테스트
  • ✅ 외래키 관계 테스트
  • ✅ 예외 상황 처리

서비스 레이어

  • ✅ 비즈니스 로직 테스트
  • ✅ 트랜잭션 처리 테스트
  • ✅ 유효성 검증 테스트
  • ✅ 예외 처리 테스트

컨트롤러 레이어

  • ✅ REST API 엔드포인트 테스트
  • ✅ HTTP 상태 코드 검증
  • ✅ JSON 요청/응답 검증
  • ✅ 에러 응답 테스트

🔍 주요 개선사항

  1. 실제 DB 연동: Mock 대신 실제 MySQL DB 사용으로 더 신뢰할 수 있는 테스트
  2. 데이터 일관성: 트랜잭션 롤백으로 테스트 간 데이터 격리
  3. 포괄적 테스트: 매퍼부터 컨트롤러까지 전 계층 테스트
  4. 문서화: 상세한 실행 가이드 및 트러블슈팅 정보 제공

🛠️ 문제 해결 가이드

데이터베이스 연결 오류

  • MySQL 서버 실행 상태 확인
  • 포트 번호 확인 (3306)
  • 사용자 권한 확인

테이블 관련 오류

  • 필요한 테이블 생성 확인
  • 외래키 제약조건 확인
  • 테이블 스키마 일치 확인

의존성 오류

  • Gradle 빌드 실행
  • 라이브러리 버전 호환성 확인

📝 향후 개선 사항

  1. 성능 테스트: 대용량 데이터에 대한 성능 테스트 추가
  2. 동시성 테스트: 멀티스레드 환경에서의 동시성 테스트
  3. 보안 테스트: SQL 인젝션 등 보안 취약점 테스트
  4. API 문서화: Swagger 등을 활용한 API 문서 자동화

✨ 결론

리뷰 기능에 대한 포괄적인 MySQL 연동 테스트가 성공적으로 구현되었습니다. 이제 실제 데이터베이스 환경에서 안정적으로 기능을 검증할 수 있으며, 향후 기능 개발 및 리팩토링 시 회귀 테스트로 활용할 수 있습니다.

모든 테스트는 실제 MySQL 데이터베이스를 사용하면서도 트랜잭션 롤백을 통해 데이터 안정성을 보장합니다.