본문 바로가기

Java/Spring Boot

[Spring Boot] Spring-Data-JPA

1. 의존성 추가

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

 

 

 

 

 

 

 

2. ORM(Object Relational Mapping)

  • 객체와 릴레이션을 매핑할 때 발생하는 개념적 불일치를 해결하는 프레임워크
  • JPA(Java Persistence API): ORM을 위한 JAVA(EE) 표준

 

 

 

 

 

 

 

 

 

3. 스프링 데이터 JPA

    • JPA 표준 스펙을 아주 쉽게 사용할 수 있도록 Spring-Data로 추상화 시켜 놓은 것
    • 구현체 : Hibernate 
    • Spring-Data-JDBC의 기능을 전부 + 부가적인 기능
    • 원래는 @EnableJpaReopositories를 사용해서 설정을 해야 spring-data-jpa 사용 가능하지만
      해당 부분이 자동설정되기 때문에 필요없음
    • Spring Data JPA -> JPA -> Hibernate -> Datasource

  • spring-boot-starter-data-jpa 내에 jdbc 포함된 것 확인 가능
    -> DataSource, JDBCTemplate 빈으로 등록해줌
    -> 부가적으로 spring-data-jpa와 hibernate까지 들어옴

  • spring-data-jpa를 보면 spring-orm 확인 가능

 

 

 

 

 

 

 

 

 

4. JPA 슬라이싱 테스트

  • 슬라이싱 테스트 : Repository와 관련된 빈들만 등록을 해서 테스트를 만드는 것
  • @DataJpaTest 어노테이션 사용
    -> DataSource, JdbcTemplate을 빈으로 받을 수 있음
  • embedded(인-메모리) 데이터베이스가 반드시 필요함
    없을 경우 아래와 같이 "IllegalStatementException" 발생

 

 

 

 

 

 

 

 

 

5. @DataJpaTest  VS @SpringBootTest

test scope으로 지정한 h2와 test scope을 지정하지 않은 postgresql이 있을 때

 

 

① @DataJpaTest -> h2

 

 

② @SpringBootTest -> postgresql

-> Integration Test

@SpringBootApplication 어노테이션을 찾아서 어플리케이션에 있는 모든 빈을 다 등록하고,

application.properties도 적용이 되기 때문에 postgresql로 실행됨

느리고, Test용 DB가 필요하기 때문에 Test 실행 시 Embedded DB 사용할 것 권장

 

 

 

 

 

 

 

 

 

 

 

 

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/dashboard

 

스프링 부트 개념과 활용 - 인프런 | 강의

스프링 부트의 원리 및 여러 기능을 코딩을 통해 쉽게 이해하고 보다 적극적으로 사용할 수 있는 방법을 학습합니다., - 강의 소개 | 인프런...

www.inflearn.com

http://hibernate.org/orm/what-is-an-orm/

 

What is Object/Relational Mapping? - Hibernate ORM

Idiomatic persistence for Java and relational databases.

hibernate.org