logoStephen's 기술블로그

포스트 검색

제목, 태그로 포스트를 검색해보세요

#블로그만들기_05 #DB초기화

#블로그만들기_05 #DB초기화
SpringWebApp
성훈 김
2024년 2월 5일
목차
YAML
floatfirstTOC: right

1️⃣ resource/db/data.sql 만들기

💡
매번 데이터를 넣기 힘드니까, 서버가 실행되면 h2데이터베이스를 값이 들어간 상태로 초기할 수 있다.
SQL
insert into user_tb(username, password, email, created_at) values('ssar', '1234', 'ssar@nate.com', now());
insert into user_tb(username, password, email, created_at) values('cos', '1234', 'cos@nate.com', now());
insert into user_tb(username, password, email, created_at) values('love', '1234', 'love@nate.com', now());
 
 

2️⃣ application.yml 설정

YAML
server:
  servlet:
    encoding:
      charset: utf-8
      force: true
    session:
      timeout: 30m
  port: 8080

spring:
  mustache:
    servlet:
      expose-session-attributes: true
      expose-request-attributes: true
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:mem:test;MODE=MySQL
    username: sa
    password:
  h2:
    console:
      enabled: true
  sql:
    init:
      data-locations:
      - classpath:db/data.sql
  jpa:
    hibernate:
      ddl-auto: create
    show-sql: true
    properties:
      hibernate:
        format_sql: true
    defer-datasource-initialization: true
YAML
defer-datasource-initialization: true

ddl-auto가 된 후에 실행되게 하는 설정
YAML
  sql:
    init:
      data-locations:
      - classpath:db/data.sql

스프링 실행할때 초기화하는 설정법
 
 

3️⃣ 테스트

💡
🔹 쿼리가 서버가 실행하자 마자 초기화 하면서 쿼리가 실행이 되었다면 DB에 저장이 될 것이다. 🔹 혹시 저와 같은 메시지로 서버가 터졌다면 아래 해결 상자 펼처보기 해주세요.
Java
//접속주소
http://localhost:8080/h2-console
💡
Error creating bean with name 'dataSourceScriptDatabaseInitializer에러 해결
펼쳐보기
⚠️
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSourceScriptDatabaseInitializer' defined in class path resource[org/springframework/boot/autoconfigure/sql/init/DataSourceInitializationConfiguration.class]: No data scripts found at location 'classpath:db/data.sql’
💡
🔹 위의 메시지를 살펴보면 대략적으로 초기화 하지 못했다는 말과 함께 No data scripts found at location 'classpath:db/data.sql 가 눈에 띄인다. 🔹 파일을 찾지 못했다는 거 같아서 경로 설정이 내 예상과 다른거 같다고 의심해본다. 🔹 그래서 classpath:db/data.sql 의 경로를 templates/db/data.sql로 변경해보았다.
notion image
 
💡
다행히 한 번에 해결!! 서버가 안꺼지고 접속이 된다. 쿼리로 자료가 저장이 되었는지는 밖에서 시도 해보겠다.
notion image
 
 
💡
테스트 확인, 정상 작동하고 있다.
notion image
 
 
 

💡
추가 수업 노트 🔹 인터페이스는 인터페이스를 상속할 수 있다. JpaRepository
🔹인터페이스는 new를 못한다.
🔹 인터페이스 메소드는 public도 필요없고, void로 메소드를 만든다.
🔹화면에 보이는 DTO, 클라이언트가 전송하는 데이터 requesetDTO,
  • 고객이 보내는 데이터
🔹 ResponseDTO는 화면에 골라 뿌릴 정보만을 의미한다.
  • 화면에 필요한 데이터