스프링 부트 환경 설정

1. 프로젝트 환경설정

Spring Initializer 를 활용하면 초기 환경설정을 한번에 쉽게 해결할 수 있습니다.

# 좌측에서는 아래와 같이 설정하여 줍니다.
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 설정

(1) Lombok설치
이제는 필수라고 할 수 있는 개발 편의성을 높여주는 lombok plugin을 설치해줍니다. 그리고 롬복 어노테이션 라이브러리가 컴파일시 문제가 되지 않도록 선택하여 줍니다. Build > Compiler > Annotation Processors > Enable

annotation processing
build and run using

3. H2 데이터베이스 설치

개발과 테스트를 위한 H2 데이터베이스를 설치합니다.

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

https://www.h2database.com/html/main.html

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

다운로드 받은 폴더로 이동합니다. 폴더경로/bin/h2.sh 를 실행하면 h2db콘솔 화면이 오픈됩니다.

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

(3) 데이터베이스 생성

오픈된 콘솔에서 JDBC URL에 jdbc:h2:~/{데이터베이스명} 으로 지정하면 홈디렉토리에 {데이터베이스명}.mv.db파일이 생성됩니다.

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

데이터베이스 생성 이후 스프링 프로젝트의 src/main/resources/application.yml 에는 다음과 같이 DB설정 URL로 변경해줍니다.

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) 쿼리 파라미터 로그 남기기

외부 라이브러리를 사용하면 물음표로 남는 쿼리에 실제 값이 바인딩되어 System.out 출력됩니다. 단, 성능에 부하가 될 수 있으니 Production에서는 성능 부하 테스트 후 적용하는 것이 좋습니다.

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

참고 출처

해당 내용은 인프런 “실전! 스프링 부트와 JPA 활용1 — 웹 애플리케이션 개발”을 수강하며 정리한 내용입니다

--

--

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