블로그 프로젝트 - sql 파일

Feb 01, 2024
블로그 프로젝트 - sql 파일

쿼리 작성 할 sql 파일 만들기

notion image
db패키지 생성 - data.sql 라는 “File” 만들기
notion image
data.sql 파일은 왜 만드는가? 서버 열릴 때 insert가 딱 실행되면 좋겠다.. 스프링 실행이 실행되면서 (서버 열리면서)… 테이블이 먼저 만들어지고.. INSERT도 되고…

[ 이렇게는 적지 말자 ]

notion image
create table 은 data.sql에서 X 테이블 생성은 이걸로 하는 것보다 User 클래스 (항아리. DTO)에서 하는게 훨씬 편하다!!! 이렇게 하면 User클래스에서 테이블을 안 만들어줘도 되지만… 어짜피 Model을 User에 담을 거 아닌가. 또 설정파일에서 ddl-auto: create도 했으니... data.sql에서 이렇게 만들어버리면 User클래스도 수정하고 data.sql도 수정하고... 수정을 2번 해줘야하기에 번거롭고 힘들다. 개발에서는.
 
 

[ 무조건 테이블이 먼저 떠야한다 ]

당연한 소리다. 테이블도 안 만들어졌는데 어떻게 insert가 되나. User클래스가 먼저!! 실행되어야 한다!! 설정해주러 가자!

[ application-dev.yml ]

notion image
//application-dev.yml 파일에서 classpath를 리스트로 표현
classpath = 스프링에서 리소스 폴더를 뜻함 List 컬렉션 = - 하이푼으로 만들어준다. "-" 기호를 사용하여 나열된 항목들은 일반적으로 리스트 형태로 해석
💡
즉, 컬렉션은 엔터치고 - 하이푼으로 적어준다. 야물 문법 공부하자^^ 리스트로 표현하는 이유 : 여러 값을 나타내기 위해?
notion image
아니 근데!! 'dataSourceScriptDatabaseInitializer’!? 오류가!! 에러 코드를 쭉 읽어보자
notion image
user_tb를 못 찾아서 터진 걸 알 수 있다 즉, 타이밍의 문제. insert가 먼저 실행됐다는 걸 알 수 있다. 구글링으로 해결해보자.
 

[ 도와줘요 구글링 ]

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSourceScriptDatabaseInitializer' defined in class path resource [org/springframework/boot/autoconfigure/sql/init/DataSourceInitializationConfiguration.class]: Invocation of init method failed
notion image
notion image
작동이 잘 된다!
 

[ 추가 에러 (오타) ]

ating bean with name 'dataSourceScriptDatabaseInitializer' defined in class path resource [org/springframework/boot/autoconfigure/sql/init/DataSourceInitializationConfiguration.class]: Invocation of init method failed; nested exception is org.springframework.jdbc.datasource.init.ScriptStatementFailedException: Failed to execute SQL script statement #1 of class path resource [db/data.sql]: insert into user_tb(username, password, email, created_at) values('ssar', '1234', 'ssar@nate.com', now()); nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "CREATED_AT" not found; SQL statement:
notion image
notion image
내가… User에서 생성한 테이블 컬럼명과 data.sql에서 insert한 createdAt이 오타가... 테이블 데이터와 insert할 컬럼명은 일치해야한다 당연하게도... (자바에서 createdAt 이라고 쓰고, 데이터 베이스에서 created_at 이라고 쓴 건 문제가 안된다. 난... createAt 이라고 썼다.) 앞으로 이런 오류가 뜨면 오타가 있는건 아닌지 검수해보자.
 

 
💡
테이블 = 릴레이션 = 엔티티
💡
row = 튜플 = 행 = 레코드
 
Share article

codingb