스프링 부트 환경 설정

1. 프로젝트 환경설정

# 좌측에서는 아래와 같이 설정하여 줍니다.
Project: Gradle
Language: Java
Boot: 2.4.12
Packaging: Jar
Java: 11
# 우측에서는 아래 의존성 라이브러리인 Dependencies를 추가해줍니다.
Spring Web
Spring Data Jpa
Lombok
Validation
Thymeleaf (선택사항, API만 개발한다면 제외합니다)
testImplementation("org.junit.vintage:junit-vintage-engine") {
exclude group: "org.hamcrest", module: "hamcrest-core"
}

2. IDE 설정

annotation processing
build and run using

3. H2 데이터베이스 설치

(1) 데이터베이스 다운로드

(2) H2 데이터베이스 생성

> cd ~/Downloads/h2
> cd bin
> ./h2.sh
h2/bin 하위로 이동

(3) 데이터베이스 생성

(4) 스프링 프로젝트에 H2 데이터베이스 설정

spring:
datasource:
url: jdbc:h2:tcp://localhost/~/{데이터베이스명}
username: sa
password:
driver-class-name: org.h2.Driver

(5) DB 설정 옵션

spring:
jpa:
show-sql: true
database-platform: H2
hibernate:
ddl-auto: create
# ddl-auto: create
# 어플리케이션 실행시점에 테이블을 drop하고 생성합니다.
# 로컬환경을 제외한 Production이나 공용개발 환경에서는
# 반드시 spring.jpa.hibernate.ddl-auto:none 으로 꺼주세요.
# show-sql: true
# System.out에 하이버네이트 실행쿼리를 출력할 수 있습니다.
logging.level:
org.hibernate.SQL: debug
# logger에 하이버네이트 실행쿼리를 남길 수 있습니다.

(6) 쿼리 파라미터 로그 남기기

implementation("com.github.gavlyukovskiy:p6spy-spring-boot-starter:${version}"

4. 환경 설정중 생기는 흔한 에러 케이스

(1) EntityManager가 Transactional 안에서 수행되지 않았기 때문에 에러가 발생

# 에러
org.springframework.dao.InvalidDataAccessApiUsageException: No EntityManager with actual transaction available for current thread - cannot reliably process 'persist' call;
# 해결 방법
@Transactional 어노테이션을 코드블록에 추가해준다.

(2) Junit5부터는 build.gradle에 테스트코드 인식을 위하여 useJUnitPlatform 추가

# 에러
No tests found for given includes: [jpabook.jpashop.MemberRepositoryTest] (filter.includeTestsMatching)
# 해결 방법
아래 내용을 build.gradle에 추가해준다.
test {
useJUnitPlatform()
}

(3) Entity class에 테이블명이 없거나 테이블 등록중 테이블 시퀀스가 없어 에러발생

# 에러
Sequence "HIBERNATE_SEQUENCE" not found;
# 해결 방법
Id 필드의 GeneratedValue의 stragegy를 IDENTITY로 변경해준다
@GeneratedValue(strategy = GenerationType.IDENTITY)

5. 빌드된 Jar 실행

> cd {프로젝트 경로}
> ./gradlew clean build // 기존 파일 지우고 새롭게 빌드
> cd ./build/libs
> jar -jar {생성된 jar파일명}.jar

참고 출처

--

--

--

Blog https://chrisjune.dev Work for www.29cm.co.kr

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
chrisjune

chrisjune

Blog https://chrisjune.dev Work for www.29cm.co.kr

More from Medium

Solving XOR problem using dynamic weights

SOLR~FLAIR

Generating SOAP client using eclipse and usage of the auto generated code to call the remote web…

What is API-led Connectivity?

https://blogs.mulesoft.com/wp-content/uploads/2017/07/api-led-connectivity.png