실전 프로젝트 13일차 회고 MySQL5Dialect?, MySQL8Dialect?

SaGo_MunGcci·2022년 9월 7일
0

실전 프로젝트

목록 보기
10/19
post-thumbnail

Today do list

⦁ 경매 전체 조회 페이지네이션

⦁ 경매 카테고리별 조회 페이지네이션

⦁ 경매 지역별 조회 페이지네이션

⦁ 참여한, 찜한, 내가 생성한 경매 페이지네이션

⦁ websocket 공부

⦁ stomp 공부



Trouble Shooting

최초 문제 발생

A.클라이언트 상태

  • 문제 없이 정상적인 request, response 실행

B. 서버상태

  • 서버 시작시 기존 db 테이블의 drop시 drop이 안되는 오류가 발생함
  • 그러나 정상적으로 서버가 작동됨.

c. 어플리케이션 정보

  • 기타 특이사항 없음.

원인 파악

  1. 분명히 서버가 실행될때 db의 create - drop부분에서 문제가 발생한다.

  2. application.properites에서 h2 or mysql 적용하는 부분이 제대로 적용이 안됬을 가능성이 높다

  3. 이전에 비슷한 오류가 발생했던 것을 기억함
    참고 : https://velog.io/@sago_mungcci/2022-08-06-TIL

  4. 이 오류를 해결하면서 사용했던 Dialect8을 적용한것이 오류의 가능성이 높았다.

MySQL5Dialect?, MySQL8Dialect?

1. Dialect란?

⦁ ORM의 큰 특징중 하나는 객체 맵핑을 통해 자동으로 쿼리를 작성해주는 것이다. 하지만 수 많은 DBMS 종류가 있고 각 종류마다 쿼리가 조금씩 다르기 때문에, 이를 알릴 수 있도록 데이터베이스 유형을 지정하도록 하는 것이 Dialect 설정이다.

⦁ 이런 Dialect 설정은 연결되는 Springboot 실행 시, 연결되어있는 데이터베이스에 알맞게 "자동으로 지정이 되므로", 특별한 이유가 존재하지 않는 이상 수동으로 설정할 필요가 없다.

⦁ 여러가지 데이터베이스를 하나씩 연결하여 확인해보면 아래 로그와 같이 연결되는 DB에 알맞게 Dialect 설정이 되는 것을 확인할 수 있다.

2022-09-07 22:58:31.900  INFO 3384 --- [           main] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.MySQL5Dialect
2022-09-07 20:08:56.903  INFO 21004 --- [           main] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.MySQL8Dialect

인터넷에 떠돌아다니는 JPA properties 값을 복사/붙여넣기 하여, 잘 모르는 상태에서 spring.jpa.properties.hibernate.dialect 설정값을 그대로 가져다가 쓰시는 분이 계시다면 해당 부분은 지우시는걸 권장한다.

그렇지 않으면 현재 사용하는 데이터베이스와 다르게 Dialect가 설정되어 큰 고생을 하게 된다. (진짜 엄청 공감함!!!!!!!!!!!!!)

2. Dialect 클래스 정리

Hibernate 5.4 기준으로 작성한 MySQL & MariaDB Dialect 클래스 구조이다.

새로운 DB 버전이 릴리즈 될 때, 하위버전 Dialect 클래스를 상속받아 추가된 기능을 재정의 하는 방식으로 Dialect 클래스가 추가되고 있다.

결론만 말하면 "Dialect 설정은 하지 않아도 된다."

해결

  • application.properites의 dialect 관련 부분을 주석 처리한 후

  • 자동적으로 h2 dialect가 맞춰지면서 테이블을 재생성을 원활히 해주었다.

참고 : https://2dongdong.tistory.com/66



Retrospection

  • 오늘 트러블 슈팅을 해결하면서 아 이런 부분때문에 어떤때는 되고 어떤때는 안된다고 말하는 부분이 이런거구나 하고 느꼈다.

  • 어떻게 보면 사소한 것일 수도 있는데 심지어 스프링에서 지원해주고 있는 부분을 억지로 다른 Dialect를 사용해서 error가 발생했었다.

  • 이런 부분들을 알아가면서 좀 더 레퍼런스를 참고할때 신중해야겠다는 생각이 들었다.


profile
이리저리 생각만 많은 사고뭉치입니다.

0개의 댓글