테마.log/Clone project

[Web Service Project] 3. SpringBoot & JPA로 간단 API 만들기(1)

_2J 2021. 3. 6. 22:59

 

 

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