on
스프링 부트 활용 : 스프링 데이터 4부
스프링 부트 활용
Spring Data JPA
스프링 데이터 JPA에 대해 알기 전에 ORM에 대해서 알아야 한다.
ORM이란 Object Relational Mapping의 약자로, 객체와 relational(테이블)을 mapping 할 때 발생하는 개념적인 불일치를 해결하는 프레임워크이다.
객체는 크기가 다양한 여러 프로퍼티를 가지고 있지만 테이블은 한정되어 있기 때문에, ‘어떻게 객체를 테이블에 매핑할 수 있을까?’라는 고민에 대한 해결책이다.
여러가지 ORM 해결책들이 있는데 그 중에 JPA는 거기에 대한 자바 표준을 정한 것이다. 대부분의 자바 표준은 하이버네이트 기반으로 만들어져 있다. 그러나 하이버네이트의 모든 기능을 JPA가 커버하지는 못한다.
스프링 데이터 JPA는, JPA 표준 스펙을 아주 쉽게 사용할 수 있게 스프링 데이터로 추상화 시켜놓은 것이다. 구현체로 하이버네이트를 사용해서 JPA, ORM을 아주 쉽게 사용할 수 있다.
하이버네이트 밑단에는 jdbc가 있다. 즉, Spring Data JPA -> JPA -> Hibernate -> Datasource이다.
예제
pom.xml에 jpa 의존성을 추가해준다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
의존성을 추가해주면, 모든 자동설정이 설정된 상태이다.
account라는 패키지를 만들어 Account 클래스를 만들어 @Entity 어노테이션을 붙여준다.
package com.gracenam.springdatajpa.account;
import javax.persistance.Entity;
@Entity
public class Account {
}
Id 값과 username, password를 만들어준다. getter-setter와 equals, hashCode도 만들어준다.
@GeneratedValue 어노테이션은 repository를 통해 저장할 때, 자동으로 값을 주겠다는 뜻이다.
@Entity
public class Account {
@Id @GeneratedValue
private Long id;
private String username;
private String password;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Account account = (Account) o;
return Objects.equals(id, account.id) &&
Objects.equals(username, account.username) &&
Objects.equals(password, account.password);
}
@Override
public int hashCode() {
return Objects.hash(id, username, password);
}
}
그 다음에 Repository interface를 만든 후 JpaRepository를 extends해준다.
JpaRepository<'entity 타입', 'id 타입'>`
package com.gracenam.springdatajpa.account;
public interface AccountRepository extends JpaRepository<Account, Long> {
}
이러면 repository 생성이 끝났으니 만든 repository를 테스트 할 껀데 슬라이스 테스트1로 해보자.
슬라이스 테스트를 하려면 인메모리 데이터베이스가 필요하다. h2 의존성을 추가하자.
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
@DataJpaTest 어노테이션에 의해, DataSource, JdbcTemplate, AccountRepository를 주입받을 수 있다.
@RunWith(SpringRunner.class)
@DataJpaTest
public class AccountRepositoryTest {
@Autowired
DataSource dataSource;
@Autowired
JdbcTemplate jdbcTemplate;
@Autowired
AccountRepository accountRepository;
@Test
public void test() {
}
}
테스트와 마찬가지로 실제 애플리케이션을 실행 할 때도, DB가 필요하다.
Reference
1 : repository를 포함해 repository와 관련된 Bean들만 등록해서 테스트하는 것.
Comments
SPRING BOOT 의 다른 글
-
스프링 부트 활용 : 스프링 데이터 4부 17 Sep 2021
-
스프링 부트 활용 : 스프링 데이터 3부 16 Sep 2021
-
스프링 부트 활용 : 스프링 데이터 2부 15 Sep 2021
-
스프링 부트 활용 : 스프링 데이터 1부 14 Sep 2021
-
스프링 부트 활용 : 스프링 웹 MVC 11부 13 Sep 2021
-
스프링 부트 활용 : 스프링 웹 MVC 10부 10 Sep 2021
-
스프링 부트 활용 : 스프링 웹 MVC 9부 09 Sep 2021
-
스프링 부트 활용 : 스프링 웹 MVC 8부 08 Sep 2021
-
스프링 부트 활용 : 스프링 웹 MVC 7부 03 Sep 2021
-
스프링 부트 활용 : 스프링 웹 MVC 6부 05 Aug 2021
-
스프링 부트 활용 : 스프링 웹 MVC 5부 27 Jun 2021
-
스프링 부트 활용 : 스프링 웹 MVC 4부 13 Jun 2021
-
스프링 부트 활용 : 스프링 웹 MVC 3부 06 Jun 2021
-
스프링 부트 활용 : 스프링 웹 MVC 2부 05 Jun 2021
-
스프링 부트 활용 : 스프링 웹 MVC 1부 30 May 2021
-
스프링 부트 활용 : Spring-Boot-Devtools 30 May 2021
-
스프링 부트 활용 : 테스트 26 May 2021
-
스프링 부트 활용 : 로깅 2부 25 May 2021
-
스프링 부트 활용 : 로깅 1부 23 May 2021
-
스프링 부트 활용 : 프로파일 23 May 2021
-
스프링 부트 활용 : 외부 설정 2부 21 May 2021
-
스프링 부트 활용 : 외부 설정 1부 15 May 2021
-
스프링 부트 활용 : SpringApplication 11 May 2021
-
스프링 부트 원리 : 정리 06 May 2021
-
스프링 부트 원리 : 독립적으로 실행 가능한 JAR 06 May 2021
-
스프링 부트 원리 : 내장 웹 서버 04 May 2021
-
스프링 부트 원리 : 자동 설정 02 May 2021
-
스프링 부트 원리 : 의존성 01 May 2021
-
스프링 부트 시작하기 01 May 2021