지난번에 Repository Test 를 CI서버에서 돌릴때 배포 환경과 테스트 환경을 맞추는 작업을 했었다(https://velog.io/@wellbeing-dough/spring-boot-RepositoryTest-GitHub-Actions%EC%97%90-%EB%8F%8C%EB%A6%AC%EA%B8%B0)
잘 돌아가나 했는데 테스트에서 이렇게 최신순 정렬한 테스트 코드가 전부 테스트가 실패했다 분명히 로컬에선 잘 돌아가는데 참고: github actions에서 테스트 결과 아카이빙 하려면 (https://velog.io/@wellbeing-dough/Github-Actions-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%83%81%EC%84%B8-%EA%B2%B0%EA%B3%BC-%EC%95%84%EC%B9%B4%EC%9D%B4%EB%B9%99%ED%95%98%EA%B8%B0)
세부 로그를 살펴보니 최신순들이 전부 순서가 바뀌어 있었다
해당 코드의 저장하는 부분인데 뭔가 두개의 데이터의 저장의 차이가 밀리세컨드 차이라서 발생하는 문제같았다 그래서 Thread를 2초간 멈춰봤는데 테스를 통과하는것이였다…
H2환경에서 created_date, modified_date는 이렇게 밀리세컨드까지 다 나온다 하지만 배포환경의 MySQL에서는 이렇게 세컨드까지만 나온다
created_date TIMESTAMP(3) DEFAULT NULL,
modified_date TIMESTAMP(3) DEFAULT NULL
이렇게 TIMESTAMP(3)으로 하면된다 timestamp(1)은 소수점 첫번째자리,timestamp(2)는 소수점 두번째 자리를 표현한다 최대 6자리 까지 정확도를 높일 수 있다
참고로 DATETIME을 쓰지 않고 TIMESTAMP의 차이는
그래서 TIMESTAMP를 사용했다
참고: https://dev.mysql.com/doc/refman/8.0/en/fractional-seconds.html