03장. 스프링부부트에서 JPA로 데이터베이스 다뤄보자 (1)

ajufresh·2020년 2월 25일
0
post-thumbnail

블로그에 게시하는 위 글은 전체적인 내용 정리가 아닌
책을 읽으면서 새로 알게된 내용이나 제가 중요하다고 생각하는 내용을 정리한 글입니다.

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.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect

application.properties에 추가

profile
공블로그

0개의 댓글