본문 바로가기
Spring

[Spring] gradle build 실행 에러

by jaee_ 2021. 11. 21.

프로젝트 회원가입 기능 구현을 마치고 build 테스트를 진행하였습니다. 

local Build successful 화면

하지만, develop 브랜치에 PR 을 올리니 local에서는 잘 build 가 잘만 되었었는데 PR 시 build 오류가 났습니다!!

github PR 시 build 에러 로그

맨 처음에는 mapperTest() ,serviceTest() 에서 오류가 난 것만 보고 local이랑 왜 다르지,, 하며 멘토님께 질문을 드렸습니다. caused by 가 중요한 데 그 부분을 안보고 질문을 드렸죠,,^^

 

멘토님께서 로그를 보는 습관을 들이라고 말씀해주셨고 그때서야 caused by 부분을 보게 되었습니다..(반성😥)

 

현재 진행중인 프로젝트는 임시 DB로 in-memory 디비인 h2 디비를 사용하고 있습니다. 즉, 제 local 컴퓨터에는 존재하는 테이블이 다른 컴퓨터에서는 존재하지 않을수도 있다는 것이죠.

 

그래서 schema.sql을 만들어 기존에 table이 존재한다면 drop 및 create를 하여 다시 생성하도록 만들었는데 무슨일인지 저 schema.sql 및 data.sql을 둘 다 타지 않는 것이었습니다. 

 

프로젝트의 application.yml 파일은 다음과 같습니다.

#Spring
spring:
  h2:
    console:
      enabled: 'true'
      path: /h2-console
  datasource:
    username: sa
    url: jdbc:h2:~/test;AUTO_SERVER=true;
    driverClassName: org.h2.Driver
    password: ''

  # JPA setting
  jpa:
    database-platform: org.hibernate.dialect.H2Dialect


#mybatis
mybatis:
  mapper-locations: classpath:mybatis/mapper/*Mapper.xml

위 설정에서 데이터베이스를 초기화 해주는 설정이 빠져있던 거였습니다.. ㅎㅎㅎ

 

  • spring.sql.init.mode
    • always : SQL 데이터 베이스 초기화 유형에 관계없이 데이터 베이스 초기화
    • never : 초기화 비활성화

 

위의 설정을 추가해주었습니다. 

#Spring
spring:
  h2:
    console:
      enabled: 'true'
      path: /h2-console
  datasource:
    username: sa
    url: jdbc:h2:~/test;AUTO_SERVER=true;
    driverClassName: org.h2.Driver
    password: ''

  # JPA setting
  jpa:
    database-platform: org.hibernate.dialect.H2Dialect

  # 이부분 추가
  # spring.sql.init.mode : 유형에 관계없이 항상 SQL 데이터베이스를 초기화
  sql:
    init:
      mode: always

#mybatis
mybatis:
  mapper-locations: classpath:mybatis/mapper/*Mapper.xml

 

정상적으로 build가 되었습니다. 

더보기

JPA를 사용하여 데이터베이스 초기화 하는 설정

  • spring.jpa.hibernate.ddl-auto에는 다음과 같은 설정을 할 수 있습니다.
    • update : 기존의 스키마를 유지하며 JPA에 의해 변경된 부분만 추가
    • validate : 엔티티와 테이블이 정상적으로 매핑되어있는지만 검증
    • create : 기존에 존재하는 스키마를 삭제하고 새로 생성한다.
    • create-drop : 스키마를 생성하고 애플리케이션이 종료될 때 삭제
    • none : 초기화 동작을 하지 않음
  • spring.jpa.generate-ddl : spring.jpa.hibernate.ddl-auto 기능을 키고 끄는 옵션 기본설정은 false 이므로 true로 설정해주어야 spring.jpa.hibernate.ddl-auto가 동작합니다.

 

댓글