WIL

35주차

haedal-uni 2022. 5. 15. 21:16
728x90

이번주는 프로젝트 위주로 진행했다.

 

- 모든 페이지에 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의 문제였음

 

728x90

'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