• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

Delivery Table 문제

22.05.26 00:09 작성 조회수 289

0

안녕하세요. 야생형 코스로 듣고 있는 초보자입니다.
여태 잘 따라오다가, 오늘 에러를 마주쳤네요. 진작에 마주쳤으면 좋았을걸 맨 마지막강의에서 마주치게 돼서, 해결을 할수가 없어서 문의드립니다 ㅠㅠ
 
인텔리제이 로그 상에는 아래와 같이 에러로그가 뜹니다.
 
2022-05-25 23:53:27.033 ERROR 2855 --- [nio-8080-exec-6] o.h.engine.jdbc.spi.SqlExceptionHelper : Table "DELIVERY" not found; SQL statement:
 
그냥 해석해보면 Delivery Table이 생성이 안됐다는 것 같아서, h2 db를 보니까 정말 없었습니다.
해당 에러 발생 이후, p6spy가 실행되었고, 아래와 같은 에러가 연속적으로 로그에 남았습니다.
 
2022-05-25 23:53:27.042 ERROR 2855 --- [nio-8080-exec-6] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessResourceUsageException: could not prepare statement; SQL [insert into delivery (city, street, zipcode, status, delivery id) values (?, ?, ?, ?, ?)]; nested exception is org.hibernate.exception.SQLGrammarException: could not prepare statement] with root cause

 

org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "DELIVERY" not found; SQL statement:
insert into delivery (city, street, zipcode, status, delivery id) values (?, ?, ?, ?, ?) [42102-212]
 
 
 
아직 db에 테이블이 올라가는 메커니즘을 몰라서, 테이블 생성이 안되는 것이 이슈인것 같았습니다. 그래서, 일단 강의 자료를 처음부터 끝까지 다 뒤져가며 비교하고, 다른 부분이 있으면 고치고, 빠진 것 까지 작성하여 이제 해결되겠다 싶었는데 안되더라구요 ㅠ 아무래도 어디서 바보같은 실수를 한 것 같은데, 도저히 찾을수가 없습니다.
 
구글링도 해보고, 디버깅 툴까지 써가보며 해봤는데, 포인트를 잘 못잡는건지.. 어흐흑ㅠ 이유를 전혀 모르겠더라구요 (지식이 부족한것도 한 몫 한것같습니다 ㅎㅎ;;)
 
아무래도 제가 크게 놓치는 부분이 있는 것 같아서 도움 요청 드리고자 합니다.
 
어디가 잘못된지 감도 안와서, 코드는 따로 올리지 않겠습니다 ㅠㅠ 드려야 하는 자료 요청주시면 업로드 드리도록 하겠습니다.

답변 1

답변을 작성해보세요.

1

OMG님의 프로필

OMG

2022.05.26

안녕하세요. 딱구 님, 공식 서포터즈 OMG입니다.

해당 에러는 application.yml에서 오타 혹은 띄어쓰기 문제일 확률이 높습니다.

강의자료와 다른 부분이 있는지 확인해주세요.(제공해드리는 프로젝트의 application.yml을 사용해주세요)

확인이 어려울 경우 댓글남겨주세요.


감사합니다.

김설영님의 프로필

김설영

질문자

2022.05.26

안녕하세요! 답변 감사드립니다.

컴퓨터 한대 더 켜서, 코드도 다시 전부 확인해보고, 특히 yml파일은 혹시 몰라 강의해서 제공해주신 것을 그대로 사용하였습니다.

하지만, yml파일로 해결이 되지 않았어요 ㅠ.ㅠ 

그런데, 나름 개인적으로 궁금한 부분이 많아서 확인해본 결과 스프링부트의 버전 문제 일수도 있을 것 같아서 또 다시 질문을 드리게 되었습니다..!

수업에서 제공해주신 jpashop 파일의 build.gradle을 확인해보니 플러그인의 스프링부트(org.springframework.boot) 버전이 2.4.1이고,
제가 사용한 버전은 2.7.0 입니다.

제가 컴퓨터가 두대가 있어서, 한 대는 수업에서 제공해주신 파일(2.4.1)로 실행했고,

공부에 사용하던  컴퓨터로는 2.7.0버전을 그대로 사용하였습니다.

그랬더니 2.4.1버전은 문제없이 아주 잘 실행이 되었고, 2.7.0 버전은 여전히 실행이 안되었습니다.

그 결과,
버전 문제로 생각되어서 구글링을 해보았는데, 스프링부트 2.5부터 hibernate가 초기화되기 전에 data.sql이 먼저 실행되어서 발생되는 오류라고 합니다 (무슨소린지는 못알아들었어요ㅠ)

(참고한 블로그 : https://zzang9ha.tistory.com/371)

그래서 해당 이슈로 고통받은 분들이 공통적으로 아래와 같은 내용을 yml에 추가해서 해결하였다는 분들이 많은데, 저는 이걸로 해결이 안되더라구요..ㅠ.ㅠ 혹시 다른 해결법이 있나? 해서 언급된 모든 방법을 사용해보았는데, 해결이 되지 않습니다..!

그래서 일단 수업을 진행하기 위해서는 버전을 낮춰서 사용해야 할 것 같지만..

혹시 제가 버전을 바꾸지 않고 해결할 방법이 있을까 너무 궁금해서 다시 댓글 남깁니다. 

감사합니다!

spring.jpa.defer-datasource-initialization: true
OMG님의 프로필

OMG

2022.05.28

안녕하세요. 딱구 님, 공식 서포터즈 OMG입니다.

문제 해결을 위한 과정을 상세히 남겨주셔서 감사합니다.

말씀하신대로 스프링 부트 버전의 문제인가 싶어 강의에서 제공해드리는 프로젝트(딱구님과 제가 공통으로 확인할 수 있는 코드임으로) 

로 확인해보았습니다.

build.gradle을

2.4.1 -> 2.7.0으로 올리고 확인해보았는데 

실행에 문제가 없었습니다.

단순 버전 문제는 그 아닌 것 같고 그 외 다른 문제로 발생하지 않나 생각합니다.

 

테스트 환경

- 자바11

- 강의제공 프로젝트

- h2 1.4.200

- gradle 6.8

 

딱구님과 동일한 증상을 겪으시는 분들은 딱구님의 답변을 참고해주세요:)

 

감사합니다.

김설영님의 프로필

김설영

질문자

2022.05.29

아이고.. 시간내서 버전도 바꾸고 확인 해주셔서 정말 감사드립니다.

일단, 선생님께서 버전의 문제가 아니라는 것이 힌트가 되어 확실한 문제가 무엇인지 확인했고, 해결했습니다. 감사합니다.

좀 노가다 방식이긴 하지만, 문제 확인 과정은 다음과 같습니다 ㅎㅎ;;

 

제 문제의 프로젝트 폴더를 복사해서 새 프로젝트를 만들고,

수업 코드의 src 폴더를 복사해서 붙여넣었습니다. (수업 코드에서 버전만 저와 똑같이 빌드업해서 사용해보려했으나, gradle의 버전도 올려야 하는 것 같아, 일단은 빨리 확인해보고자 이렇게 했습니다)

 

거기서 이제 제 문제의 프로젝트 폴더의 패키지들을 하나씩 차례로 확인하고, 문제가 생긴 패키지의 클래스파일을 하나하나 확인해 본 결과, Delivery 파일 자체가 문제가 있었습니다. 

교차검증을 위하여, 제공해주신 프로젝트 폴더에 제 Delivery 클래스 파일을 넣어보았는데, 똑같은 문제가 생겼습니다.

 

그래서 다시 눈을 크게뜨고 코드를 비교했는데, 분명히 제 눈에는 오타도 없었고, import 문 다른것도 없었어요.

 

그래서 눈을 더 크게 떴습니다. 분명 제 클래스파일이 문제가 있는거니까요..! 분명히 제가 실수한게 반드시 있을거라 생각했습니다.

그래서 진짜 자세히 보고, 확대도 해보니... 정말 어이없게도...

ㅋㅋㅋㅋㅋㅋ 저 빨간 밑줄에 가려진 곳에 오타가 있었습니다 ㅠㅠ 분명 언더바를 넣은것으로 보였는데 안넣었더라구요...  저야 문제를 해결해서 너무 기쁜데..

별거 아닌 저 한글자 때문에 서포터즈 선생님께서 고생하셨네요 ㅠㅠ

선생님께서 버전 문제가 아니라고 체크를 해주셔서 망정이지, 아니었으면 또 다른곳에서 몇시간동안 헤메고 있었을 것 같아요. 선생님 덕분에 다행히 문제를 해결했네요.... 감사합니다.....!!!

분명 다른게 없다고 생각한 곳에, 생각지도 못한 오타가 있었네여...... 

수업때 영한쌤이 자동완성과 자동체크가 좋긴 한데, 단점이 있다고 한 부분이 이 부분일수도 있겠다 싶더라구요. 

저렇게 문자열로 컴파일에러 체크가 안되는 부분이 가장 위험하다고 한 부분이 너무 와닿는 순간이었습니다... 

그냥 지나가는 말 한마디도 선배의 조언과 같은 김영한 쌤의 강의... 앞으로도 말 한마디도 놓치지 않고 열심히 듣겠습니다.

 

서포터즈 선생님들께도 친절히 확인도 해주시고, 해결에 도움을 주셔서 정말 감사드립니다.