[Spring] 스프링부트에서 JPA로 데이터베이스 다뤄보기

ack·2021년 1월 20일
0

Spring

목록 보기
1/5
post-thumbnail

1 JPA 소개

JPA

  • 패러다임 불일치 문제 : 관계형 데이터베이스와 객체지향 프로그래밍 언어의 패러다임이 서로 다름
    • 기존 스프링에선 MyBatis같은 SQL매퍼 사용의 문제
    • SQL을 다루는 시간이 많음, 객체 모델링보다 테이블 모델링에 집중
  • 개발 자는 객체지향적으로 프로그래밍을 하고, JPA가 이를 관계형 데이터베이스에 맞게 SQL을 대신 생성해서 실행함
  • SQL에 종속적인 개발을 하지 않아도 됨.

Spring Data JPA

  • JPA는 인터페이스로서 자바 표준 명세서

  • JPA를 사용하기 위해서 구현체가 필요 - Hibernate, Eclipse link

  • 구현체를 쉽게 사용하고자 추상화 시킨 Spring Data JPA라는 모듈을 이용해서 JPA 기술을 다룸

  • Spring Data JPA 등장 이유

    1. 구현체 교체의 용이성

      Hiberate 외에 다른 구현체로 쉽게 교체하기 위함

    2. 저장소 교체의 용이성

      관계형 데이터베이스 외에 다른 저장소로 쉽게 교체하기 위함

2 프로젝트에 Spring Data Jpa 적용

  • domain 패키지
    - 도메인(소프트웨어에 대한 요구사항 혹은 문제 영역)을 담을 패키지
    - Setter 메소드가 없음 - 값 변경이 필요한 경우 그 목적과 의도를 명확히 나타낼 수 있는 메소드를 추가
    - 생성자 대신 @Builder 사용
//Entity클래스에는 절대 Setter메소드를 만들지 않음.
//DB와 실제 매칭되는 클래스 Entity클래스.
@Getter
@NoArgsConstructor //기본 생성자 자동추가 public Posts(){}
@Entity //JPA의 어노테이션
public class Posts {

    @Id //Pk
    @GeneratedValue( strategy = GenerationType.IDENTITY) //Pk 생성규칙 auto_increment
    private Long id;

    @Column(length = 500, nullable = false) //꼭 선언안해도 컬럼으로 인식, 기본값 이외의 추가사항이 있는 경우 사용
    private String title;

    @Column(columnDefinition = "TEXT", nullable = false)
    private String content;

    private String author;

    @Builder //생성자 대신 사용
    public Posts(String title, String content, String author){
        this.title = title;
        this.content = content;
        this.author = author;
    }
}
  • JpaRepository

  • 도메인 클래스로 DB를 접근하게 해줌

    • Dao라고 불리는 DB Layer 접근자
    • 인터페이스로 생성 후, JpaRepository<Entity클래스, PK 타입>을 상속하면 기본적인 CRUD 메소드가 자동 생성
    • Entity클래스와 기본 Entitiy Repository는 홤께 위치해야함
public interface PostsRepository extends JpaRepository<Posts, Long> {
}

출처 : [도서] 스프링부트와 AWS로 혼자 구현하는 웹서비스

profile
아자 (*•̀ᴗ•́*)و

0개의 댓글