2023. 7. 31. 00:39ㆍ오류 처리
에러 로그
Caused by: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'uuid char, updated_at datetime, username varchar (16) not null, primary key (id)' at line 1
개발 중 위와 같은 오류를 마주했다.
위 상황은 디버거가 DDL을 생성하던 도중 문법 오류를 발견했다는 뜻이다. => SQL syntax 오류
에러 로그 중에서 다음처럼 near ~~~ 로 해당하는 부분을 살펴보자.
near 'uuid char, updated_at datetime, username varchar (16) not null, primary key (id)' at line 1
이 DDL 문을 실행하다가 오류가 났다는 뜻인 것 같다.
로그를 거슬러 올라가보면 다음과 같은 문장을 만날 수 있다.
Error executing DDL "create table users (id bigint not null auto_increment, created_at datetime not null, password varchar (36), profile_birth varchar (16), profile_image_path text, profile_name varchar(36), provider varchar(36), roles varchar(36), salt uuid-char, updated_at datetime, username varchar (16) not null, primary key (id)) engine=InnoDB" ~~~~~~
그러니까 위 DDL을 실행하던 중 users 라는 테이블을 만드는 도중 발생한 오류라는 것이다. 위의 'uuid char' 라는 부분에서 오류가 났다는 것이다. (near uuid char 라고 했으므로)
여기서 salt 라는 필드가 오류가 발생한 것을 확인할 수 있다.
해결
@Column(name = "salt", nullable = true, columnDefinition = "uuid-char")
private UUID salt;
유저 테이블의 위 컬럼을 다음과 같이 변경해 수정하였다.
@Column(name = "salt", nullable = true)
@Type(type = "uuid-char")
private UUID salt;
결론
에러 로그를 보고 해석할 줄 안다면 어느 부분에서 오류가 발생했는지를 쉽게 파악할 수 있음. (아직 능숙하지는 않지만...)
SQL Syntax 에러가 발생했을 때 어떤 부분에서 오류가 발생했는지를 파악할 수 있었다.