[4] 스프링 부트와 JPA 활용 (1) - 프로젝트 세팅 (Gradle / H2 / Lombok / JPA)

김정욱·2021년 3월 15일
1
post-thumbnail

Start.spring.io - 프로젝트 생성

  • Project
    • Gradle 빌드 툴
  • Dependencies
    • Spring Web
    • Thymeleaf
    • Lombok
    • Spring Data JPA
      : 지금Spring Data JPA는 안쓰지만 여기에 JPA 설정들이 있어서 선택
    • H2 DataBase

라이브러리 살펴보기

  • spring-boot-starter-web
    • spring-boot-starter-tomcat : 톰캣(웹서버)
    • spring-webmvc : 스프링 웹 MVC
  • spring-boot-starter-thymeleaf
    : 타임리프 템플릿 엔진(View)
  • spring-boot-starter-data-jpa
    • spring-boot-starter-aop
    • spring-boot-starter-jdbc
      • HikariCP : 커넥션 풀
    • hibernate + JPA : Hibernate와 JPA
    • spring-data-jpa : 스프링 데이터 JPA
  • spring-boot-starter(공통) : 스프링 부트 + 스프링 코어 + 로깅
    • spring-boot
      • spring-core
    • spring-boot-starter-logging
      • logback / slf4j
        : slf4j는 인터페이스 / logback은 구현체

Thymeleaf

  • Server-Side에서 html을 내려주는 방식의 템플릿 엔진
    (Client-Side 템플릿 엔진도 존재)
    --> 요즘에는 이러한 템플릿 엔진보다 Client-Side Rendering하는 React / Vue 많이 사용
  • 다른 템플릿 엔진과 다르게 기존 MarkUp을 깨지 않는 자연스러운 템플릿 엔진이다
  • Spring에서 밀고있는 템플릿 엔진
  • resource/templates/~~.html로 두고 사용

1. Lombok 설정

1. Lombok Plugin 다운로드

  • Preferences -> Plugins -> Lombok 검색 & 다운로드

2. Annotation Processor 활성화

  • Preferences -> Compiler -> Annotation Processors

2. Build & Run 실행 설정

  • Preferences -> gradle 검색
  • 최근 Intellij 버전은 Gradle로 실행을 하는 것이 기본설정
  • Gradle로 하면 실행 속도가 느리기 때문에 java로 변경해서 사용

3. H2 DataBase 설정

1. H2 Database 설치

2. application.yml 설정

spring:
  datasource:
    url: jdbc:h2:tcp://localhost/~/jpashop
    username: sa
    password:
    driver-class-name: org.h2.Driver

4. dev-tools 설정

[ 설명 ]

  • 개발에 자동 재시작 / 실시간 변경 등 기능을 사용하기 위한 플러그인
  • Automatic Restart
    : 변경 내용에 따라 서버를 알아서 재시작해주는 옵션
  • Live reload
    : 실시간 변경을 rebuild가 아닌 recompile로 반영하는 것
    (추가로, 크롬의 reload 확장 툴을 받으면 알아서 해줌)

[ 설정 ]

1. Registry 설정 변경

  • 2021년 2월 이후로 해당 옵션이 없어짐
    => Preferences에서 최하단에 있는 Advanced Settings에서 "Allow auto-make to stat even if developed application is currently running"을 체크

2. Preferences 설정

3. build.gradle에 의존성 추가

// build.gradle
configurations{
    developmentOnly{
        runtimeClasspath{
            extendsFrom developmentOnly
        }
    }
}

dependendies{
   ...
   implementation 'org.springframework.boot:spring-boot-devtools'
   ...
}

4. application.yml에 설정 추가

spring:
  devtools:
    livereload:
      enabled: true
  freemarker:
    cache: false

5. JPA 설정

  • 기존에는 persistence.xml 파일에서 설정했으나 스프링 부트로 넘어오면서 해당 설정을 해준다
  • 우리는 hibernate 옵션 지정만 해주면 된다

1. application.yml 설정

(application.yml 파일은 띄어쓰기 2개로 영역 구분하며 조금이라도 다르면 실행 X - 주의!)

spring:
  # h2 DB 설정
  datasource:
    url: jdbc:h2:tcp://localhost/~/jpashop
    username: sa
    password:
    driver-class-name: org.h2.Driver

  # jpa 설정
  jpa:
    hibernate:
      ddl-auto: create
    properties:
      hibernate:
        format_sql: true

  # devtools 설정
  devtools:
    livereload:
      enabled: true
  freemarker:
    cache: false

logging.level:
  org.hibernate.SQL: debug

2. 테스트 코드로 확인

  • @SpringBootTest
    : 스프링 부트 테스트를 알리는 어노테이션
  • 필드 의존성 주입 으로 MemberRepository 가져오기
    : 필드 의존성 주입은 테스트코드 작성시에는 유용하게 사용됨 (실무에서는 X)
  • @Transactional
    : 기존에 트랜잭션시작해주고 종료해주는 코드가 필요했지만, 해당 어노테이션의 사용으로
    트랜잭션 처리가 알아서 된다.

    그리고, 해당 어노테이션이 Test코드에 있을 때는 수행 후 자동 Rollback을 한다
  • @Rollback(false)
    : @Tansactional로 자동 롤백되는 것을 막아 실제 DB에 수행 결과를 남기는 어노테이션
  • Entity Manager가 없는 이유? : 이제 실제 DB에 접근하는 Repository에서 @PersistenceContext를 통해 EntityManager를 자동으로 주입해줄 수 있기 때문

3. query Parameter 추적 설정

  • 실제로 들어가는 query Parameterorg.hibernate.type: trace로 추가 가능
  • 이것보다 더 가시적으로 좋게 하기 위해서, p6spy 라는 외부 라이브러리를 사용!!
    : 의존성 추가를 해주고 기존 trace 옵션을 꺼주면 이렇게 멋지게 나온다!

6. (추가) tdd 단축키 추가

  • 테스트 코드를 작성할 때 마다 기본 틀을 작성하는 것이 귀찮을 경우 명령어로 등록 가능
  • template에서 custom을 만들고 내부에 tdd를 추가하면 된다
profile
Developer & PhotoGrapher

0개의 댓글