반응형
3.1 JPA 소개
패러다임 불일치
- 관계형 데이터베이스 : 어떻게 데이터를 저장할지에 초점이 맞춰짐
- 객체지향 프로그래밍 : 기능과 속성을 한 곳에서 관리하는 기술
JPA
관계형 데이터베이스와 객체지향 프로그래밍을 중간에서 패러다임 일치를 시켜주는 기술
JPA <- Hibernate <- Spring Data JPA
개발자 : 객체지향적으로 프로그래밍
JPA : 프로그래밍된 것을 관계형 데이터베이스에 맞게 SQL 생성
DB : SQL 구문 실행
-> 개발자는 SQL에 종속적이지 않게됨
Spring Data JPA
- 구현체 교체의 용이성 : 다른 구현체로 쉽게 교체
- 저장소 교체의 용이성 : 다른 저장소로 쉽게 교체
Spring Data 하위 프로젝트는 기본적으로 CRUD 인터페이스가 같다.
3.2 프로젝트에 Spring Data Jpa 적용하기
주요 어노테이션을 클래스에 가깝게 두어야 함
(ex. @Entity는 맨 아래에, @Getter은 맨 위에(중요도 낮음))
무분별한 Setter의 생성
이 곳에서도 언급을 하셨었다.
Entity 클래스를 생성하실때, 주의하실것은 무분별한 setter 메소드 생성입니다.
자바빈 규약을 생각하시면서 getter/setter를 무작정 생성하시는 분들이 계시는데요.
이렇게 되면 해당 클래스의 인스턴스 값들이 언제 어디서 변해야하는지 코드상으로 명확히 구분할수가 없어, 차후 기능변경시 정말 복잡해집니다.
해당 필드의 값 변경이 필요하면 명확히 그 목적과 의도를 나타낼 수 있는 메소드를 추가하셔야만 합니다.
기본적인 구조
생성자로 생성
값 변경이 필요한 경우
해당 이벤트에 맞는 public 메소드 생성
people.setAge(20); // 잘못된 예 people.plusAge(); // 올바른 예
3.3 Spring Data JPA 테스트 코드 작성하기
콘솔에서 JPA SQL 보는 방법
spring:
datasource:
url: jdbc:h2:mem:testdb
data-username: sa
data-password:
driver-class-name: org.h2.Driver
jpa:
database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
hibernate:
ddl-auto: create
properties:
hibernate:
format_sql: true