인프런 - 실전! 스프링 데이터 JPA


프로젝트 생성

스프링 부트 스타터 https://start.spring.io/

사용 기능 : web, jpa, h2, lombok

      - SpringBootVersion: 2.2.1
      - groupId: study
      - artifactid: data-jpa

 

스프링 부트 스타터

bulid.gradle 열기

실행 확인

컨트롤러 생성 후 실행

설정 변경

lombok 설정

라이브러리 살펴보기

인텔리제이 터미널 설정

스프링 부트 라이브러리

      * spring-boot-starter-web
          - spring-boot-starter-tomcat: 톰캣 (웹서버)
          - spring-webmvc: 스프링 웹 MVC

      * spring-boot-starter-data-jpa      
          - spring-boot-starter-aop
          - spring-boot-starter-jdbc
              - HikariCP 커넥션 풀 (부트 2.0 기본)
          - hibernate + JPA: 하이버네이트 + JPA
          - spring-data-jpa: 스프링 데이터 JPA

      * spring-boot-starter(공통): 스프링 부트 + 스프링 코어 + 로깅
          - spring-boot
              - spring-core
          - spring-boot-starter-logging
              - logback, slf4j  

 

테스트 라이브러리

        - spring-boot-starter-test
            - junit: 테스트 프레임워크, 스프링 부트 2.2부터 junit5( jupiter ) 사용
                - 과거 버전은 vintage
            - assertj: 테스트 코드를 좀 더 편하게 작성하게 도와주는 라이브러리
            - spring-test: 스프링 통합 테스트 지원

 

핵심 라이브러리

        - 스프링 MVC
        - 스프링 ORM
        - JPA, 하이버네이트
        - 스프링 데이터 JPA

 

기타 라이브러리

        - H2 데이터베이스 클라이언트
        - 커넥션 풀: 부트 기본은 HikariCP
        - 로깅 SLF4J & LogBack
        - 테스트

 

H2 데이터베이스 설치

https://www.h2database.com

 

H2 Database Engine (redirect)

H2 Database Engine Welcome to H2, the free SQL database. The main feature of H2 are: It is free to use for everybody, source code is included Written in Java, but also available as native executable JDBC and (partial) ODBC API Embedded and client/server mo

www.h2database.com

h2 데이터베이스 버전은 스프링 부트 버전에 맞춤

데이터베이스 파일 생성 방법

      - jdbc:h2:~/datajpa (최소 한번)
      - ~/datajpa.mv.db 파일 생성 확인
      - 이후 부터는 jdbc:h2:tcp://localhost/~/datajpa 이렇게 접속

 

스프링 데이터 JPA와 DB 설정, 동작확인

# main/resources/application.yml (properties 삭제)
spring:
 datasource:
  url: jdbc:h2:tcp://localhost/~/datajpa
  username: sa
  password:
  driver-class-name: org.h2.Driver

 jpa:
  hibernate:
    ddl-auto: create # 로딩시점에 테이블을 전부 drop 후 재생성, 운영 시 사용 X
    properties:
      hibernate:
        # show_sql: true # jpa 실행 쿼리를 콘솔에 조회
        format_sql: true

logging.level:
 org.hibernate.SQL: debug # 로그로 남기기
# org.hibernate.type: trace # 파라미터까지 볼 수 있는 옵션

 

1. Entity 생성

@GeneratedValue - PK 자동 생성

2. JPA Repository 생성

@PersistenceContext - 스프링 컨테이너가 Entity Manager를 가져다줌

 

3. 테스트 - JPA Repository

*  ctrl + shift + T

 

* 생성자 추가

protected 사용 이유 - jpa가 프록시를 사용할 때 쓸 수 있도록 private -> protected 로 변경

 

*  테스트 시 , 에러 발생

 

*  @Transactional 어노테이션 추가하여 해결

 

* assertThat(findMember).isEqualTo(member); 테스트시 결과는?

- true  : 한 트랜잭션 내에서는 영속성 컨텍스트 보장

 

4. Spring Data Repository 생성

 

5. 테스트 - Spring Data Repository

 

6. 쿼리 파라미터 로그 남기기

    * build.gradle / dependencies 에  
      implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.7' 추가  
      운영에서는 성능저하로 인해 사용 고려

+ Recent posts