TIL 테스트 데이터

sally·2023년 6월 10일
0

sally 프로젝트

목록 보기
2/2

인덱스와 조회 성능 테스트라면,
100 만건의 Post 글을 어떻게 만들어 놓을까?

가장 간편하게 시작하자 싶었지만 최소 작성자인 User 필요


Post random data 생성하기

JPA auto ddl 로 먼저 구현 후 테스트 데이터 생성 하려 하니 문제가 많았다.
별도의 프로젝트로 JDBC 이용한 테스트 데이터를 생성해서 저장하게 했다.
(DataSource 설정을 여러개 두자니, 그렇게 쓸거 같진 않고, 모듈화 하자니, 애플리케이션 테스트도 아니고, batch 랑 같이 쓰기도 어색하고 .... 그렇지만 결국 나중에 그냥 추가해볼 수도 있을 거 같다. ㅎㅎ)

  • JPA 에서는 @MappedSuperclass 로 BaseEntity 로 인해 엔티티 타임 기준 객체생성만 가능
    • AOP 동작이 테스트 케이스 위한 엔티티 생성시 X, 특히 날짜 등 임의 데이터가 안된다.
    • bulk insert는 MySQL의 식별자 전략 때문에 미지원
  • 임의 데이터 생성해서 csv 파일 제공 사이트
    • 무료로 만 건 정도, csv 파일 내 날짜 등 생성 타입하고 달라짐
    • workbench import 기능이 매우 단순해서 쉬운 만큼 정정은 클릭으로는 X
      • Oracle 토드 때 다양한 방식이 있어서 WorkBench도 있을까 싶지만, 쓸 일이 없었던 만큼 stop, 다른 방식으로 해야 그나마 끝날 거 같다.
  • JDBC
    • JPA 엔티티와 별개의 객체 타입 생성해서 임의 데이터를 보다 자유롭게 넣을 수 있다.
    • JPA로 auto ddl로 생성해 놓은 테이블은 문제가 생길 수 있다.
      • bulk insert 시 외래키 제약 조건으로 문제 발생
        • 외래키 없는 테이블로 생성 후 bulk 데이터 넣고, 외래키 생성😅
        • SET foreign_key_checks=0 로 일시적 체크 해제
    • Instancio : 랜덤하게 타입별 값 넣어줄 라이브러리
      • 메서드 종류가 적어 간편하게 사용하기 쉬움, 자바 만으로 데이터 지정 쉬움
    • JDBC의 BeanPropertySqlParameterSource 는 타입, 컬럼명 등 문제 생겨서 취소 → MapSqlParameterSource
    • Insert SQL 문에 : 빼먹는 오타로 백만건에 컬럼명이 데이터로 들어갔었다. 코드 개선하기 😑

Data 구성

Post 작성글 작성자, 날짜 기준 목록 조회

인덱스 추가 한다면

  • 생성날짜 : 변경 X
  • 작성자는 FK

작성자 분포도 , 날짜 기간 다양

FK 사용자는 10명으로 적게 생성

  • 작성자 기준 검색시 unique 값 개수 적은 것과 늘어난 경우 비교하기 위해
  • 생각보다 member_id 가 굉장히 균일하게 들어갔다.
    • 나중에 늘어난 사용자 추가시 사용자 많고, post 수는 적게 하면 빈도 차이는 날 것이다.
    • 컬럼명 user_id 로 바꿔야 겠다. ㅎㅎ
  • updated_at 을 created_at 이후로 하려고 범위를 시작기간을 뒤로 했는데 미래 날짜가 많이 나왔다 ㅎㅎ 테스트상 updated_at 쓸 일 없으니 skip

테스트 생성 시간: 7.1540994
DB bulk insert 시간: 45.8880974

p.s. 역시 이번에도 쉽겠지, 간단하겠지... 싶었지만, 삽질 많았다. 이 글은 .. 사라질지도 ㅎㅎㅎㅎ

profile
sally의 법칙을 따르는 bug Duck

0개의 댓글