이번주는 프로젝트 위주로 진행했다.
- 모든 페이지에 css, js 적용 안되는 문제 해결
- 접속자 수 띄워주기 (css 추가 수정 필요)
- mysql 연동
- test 코드 수정
주말에는 registry test 코드 관련해서 의문이 든 부분을 해결했다.
MYSQL을 연동시키고 테스트코드를 실행시켰더니 에러가 떴다.
(게시글이 저장하고 잘 받아오는지 test하는 코드)
알고보니 REGISTRY 테이블 ID에는 AUTO_INCREMENT를 체크를 안해서 생긴 오류였다.
다시 실행시켜보니 RegistryRepositoryTest 에서 에러가 떴다.
기댓값은 1이었는데 실제 데이터는 4라고 에러가 떴다.
기존에 H2 콘솔창에 들어가보면 데이터가 없어서 @Rollback(false)로 작성해서 실행시켰는데
그 데이터들이 테이블에 들어가 있는 것을 확인해서 @Rollback(false) 코드를 없앴다.
다시 실행을 시키니 데이터에는 저장은 되지 않았는데 여전히 실제값과 기댓값이 달랐다.
기존에는 h2 테스트를 진행할 때 id값만 비교하면 된다고 해서 id만 비교했는데
id 대신 title과 main을 검증했다.
그리고 팀원에게 이러한 문제를 공유했고 왜 롤백이 안되는건지 궁금했다.
팀원과 트랜잭션에 대해서 얘기를 했고 주로 롤백을 사용하기 위해 트랜잭션을 사용하는데
id는 롤백에 되지 않는 이유가 pk이기 때문에 그럴 수 있다고 해서
pk 관련 구글링을 해봤지만 해답이 나오질 않았다.
그러다 문득 Auto increment가 떠올라서 구글링을 해봤고 문제의 답을 해결할 수 있었다.
Auto increment가 적용되는 id 값은 rollback 되지 않는다.
Auto increment 값은 transaction에 포함되지 않기 때문에 내부적으로 id값이 증가한다.
출처 : [TIL] DB save 테스트 Id값 증가, Auto Increment 값은 transaction에 포함되지 않음
정리
1. 기존 TEST 코드는 H2를 이용
- rollback(false)옵션을 추가해서 h2-console에서 db를 확인할 수 있게 함
- title과 main db를 저장한 후 id가 1인지 검증하는 test코드를 작성함 (게시글 등록test)
2. mysql로 변경 후 게시글 등록 test에서 오류가 뜸
- rollback(false) 옵션을 없애서 db에 저장하지 않고 test만 한 후 다시 롤백함
- 기존엔 id값으로 검증을 했으나 기대값은 1인데 실제 id값은 4라는 에러가 뜸
그러나 mysql db에는 데이터가 존재하지 않음
- 그래서 id 값 비교 대신 title과 main을 검증하는 test코드로 변경함
이 문제를 팀원과 공유함. 아래는 팀원과 나온 얘기 정리
3. 트랜잭션은 test 코드에서 사용된다
4. 트랜잭션은 롤백할 때 주로 사용된다.5. id가 pk이기 때문에 누적으로 진행되어서 id값이 4가 나올수 있다.
6. 알고보니 2번의 에러가 5번의 이유가 아니라 Auto increment의 문제였음
'WIL' 카테고리의 다른 글
37주차 - 프로젝트 (0) | 2022.05.29 |
---|---|
36주차 - 페이징 코드 (0) | 2022.05.22 |
34주차 (0) | 2022.05.08 |
33주차 - 강의 + 프로젝트 (0) | 2022.05.01 |
32주차 (0) | 2022.04.24 |