SpringBootTest에러 - org.hibernate.exception.SQLGrammarException: could not prepare statement

이형석·2024년 3월 20일

WelCheck 프로젝트 

목록 보기
5/22

문제상황
역시나 마찬가지로 이전과 같이
Member엔터티와 MemberRepository구현체를 작성 후, 아래와 같이 Member를 Repository에 저장하는 테스트를 실행한 상황

@Test
    public void 회원가입() throws Exception{
        Member member = new Member();
        // userId, password, name, username, address, sex, email
        member.setUserId("yasuo123");
        member.setPassword("password99");
        member.setName("kimyounghan");
        member.setUsername("best yasuo");
        Address address1 = new Address("South Korea", "Busan");
        member.setAddress(address1);
        member.setSex(Sex.Male);
        member.setEmail("yasuo123@gmail.com");
        em.persist(member);
        assertThat(member.getName()).isEqualTo(em.find(Member.class, member.getId()).getName());
    }

그리고 다음 에러가 발생했다.

org.hibernate.exception.SQLGrammarException: could not prepare statement

뇌피셜
처음에는 위 오류의 SQLGrammerException을 보고 Repository에 작성한 JPQL문이 잘못 된 줄 알았지만 JPA책이나 다른 글들을 참고해봐도 아무 이상이 없었다.
그래서 어쨌든간에 계속해서 Repository클래스의 코드들을 검사해봤지만 문제를 찾을 수 없었다.

해결
application.yml파일의 설정이 잘못되어 제대로된 SQL statement가 생성되지 않았던 것이었다. 이 오류를 구글링 해보면 대체로

jpa: 
  hibernate:      
    ddl-auto: create

에서 ddl-auto의 인덴테이션을 잘못 작성한 케이스가 많았다.
하지만 나는 확인해보니 제대로 작성되어있어서 그냥 예전에 공부하면서 작성했던 yml파일을 복붙했더니 해결되었다.

spring:
  datasource:
    url: jdbc:h2:tcp://localhost/~/welcheck_backend
    username: sa
    password:
    driver-class-name: org.h2.Driver
  jpa:
    hibernate:
      ddl-auto: create
    properties:
      hibernate:
        format_sql: true
logging.level:
  org.hibernate.SQL: debug

역시 아직 내가 직접 작성하다 보면 생기는 오류가 많은 것 같다.

이로써 모든 에러가 해결되고 프로그램이 정상적으로 작동되었다. 그리고 동시에 느낀 교훈이 있다.

테스트를 꼭 병행하며 점진적으로 개발을 해나가야 한다는 것이다.

알고는 있었지만 귀찮아서라기보다 그냥 별 생각없이 죽 작성해나가다가 완성 후 한 번 테스트를 돌려봤더니, 한 번에 네 가지의 오류를 연달아 맛보는 경험을 할 수 있었다.

이번에는 해결하기 그렇게 어렵지 않은 오류들만 있었어서 이 정도로 끝났지만, 만약 하루,이틀 찾아야 할 수준의 오류도 중간에 섞여 있었다면 말도 안되게 골치아픈 상황을 마주하게 됐을 것이다. 그리고 아마 차라리 처음부터 다시 작성하려고 했지 않을까 생각한다. 역시 머리로 아는 교훈도 직접 부딪혀봐야 절실히 느껴지고 체득되는 것 같다..

profile
금융IT 개발자

0개의 댓글