[Spring] - JPA란?

2025. 2. 5. 19:07·Spring
728x90
반응형
SMALL

(1)JPA의 등장배경

웹 서비스 개발하고 운영시 피할 수 없는 문제가 데이터베이스를 다루는 일이다.

옛날에 스프링을 공부할 때는 iBatis와 같은 SQL매퍼를 이용해서 DB쿼리를 작성했다고 한다.

그러다보니 개발보다 SQL을 다루는 시간이 더 많아졌다. 그래서 JPA라는 자바 표주 ORM(object relational Mapping)


※ORM이란?

객체와 관계형 DB의 데이터를 자동으로 매핑해주는 것을 말한다.

  • 객체지향은 클래스를 사용, 관계형 DB는 테이블을 사용하는 객체 모델이랑 관계형 모델간의 불일치가 발생한다.
    • ORM을 통해 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결해준다.
  • DB 데이터 <- Mapping -> 객체 필드
    • 객체를 통해 간접적으로 데이터베이스 데이터를 다룬다.
  • Persistant API라고도 불린다.
    • Ex) JPA(Java Persistance API), Hibernate

(2) 프로젝트에 Spring Data Jpa 적용하기

먼저 build.gradle의 의존성 영역에 

compile('org.springframework.boot:spring-boot-starter-data-jpa')
compile('com.h2database:h2')

위 코드를 추가하여 의존성 다운을 받는다.

 

  • spring-boot-starter-data-jpa
    • 스프링 부트용 Spring Data Jpa 추상화 라이브러리이다.
    • 스프링 부트 버전에 맞춰 자동으로 JPA관련 라이브러리들의 버전을 관리해 준다.
  • h2
    • 인메모리 관계형 DB이다. 별도 설치 필요없이 프로젝트 의존성만으로 관리 가능
    • 메모리에서 실행되기때문에 애플리케이션을 재시작할 때마다 초기화된다는 점을 이용하여 테스트 용도로 많이 사용

의존성이 등록되었으면 

domain패키지 -> posts패키지 -> Posts클래스를 순서대로 만든다.

 

※BaseTimeEntity는 나중에 나올 내용

 

(2)-1 Posts클래스 생성

그 후 Posts클래스에 다음과 같이 코드를 추가한다.

package com.jojoldu.book.springboot.domain.posts;


import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import javax.persistence.*;

@Getter
@NoArgsConstructor
@Entity
public class Posts {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    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;
    }

 

여기서 Posts클래스는 실제 DB와 매칭될 클래스이며 Entity클래스라고도 한다.

JPA 사용시 DB 데이터에 작업할 경우 실제 쿼리를 날리기 보단 Entity클래스의 수정을 통해 작업할 수 있다. 

  • @Entity
    • 테이블과 링크될 클래스임을 나타낸다.
    • 기본값으로 클래스의 카멜케이스 이름을 언더스코어 네이밍으로 테이블 이름을 매칭한다.
    • Ex) SalesManager.java -> Sales_manager table
  • @Id
    • 해당 테이블의 PK필드를 나타낸다.
  • @GeneratedValue
    • PK의 생성규칙을 나타낸다.
    • GenerationType.IDENTITY 코드를 추가해야지만 auto_increment가 가능해진다.
  • @Column
    • 테이블의 칼럼을 나타내며 굳이 선언하지 않아도 해당 클래스의 필드는 모두 칼럼이 된다
    • 기본값 외에 추가로 변경이 필요한 옵션이 있으면 사용한다.

Setter메소드가 없다?

Entity클래스에서는 절대 Setter메소드를 만들지 않는다. 

해당 클래스의 인스턴스 값들이 언제 어디서 변해야 하는지 모르기때문에 차후 변경 시 정말 복잡해진다.

 

(2)-2 JpaRepository생성

이렇게 Posts클래스 생성이 끝났으면 ,Posts 클래스로 DB에 접근하게 해줄 JpaRepository를 생성해준다.

package com.jojoldu.book.springboot.domain.posts;

import org.springframework.data.jpa.repository.JpaRepository;

public interface PostsRepository extends JpaRepository<Posts, Long> {

}
  • ibatis나 MyBatis등에서 Dao라고 불리는 DB Layer 접근자이다.
  • JPA에서는 Repository라고 부르며 인터페이스를 생성한다.
  • 인터페이스 생성 후 JpaRepository<Entity클래스, PK 타입>을 상속하면 기본적인 CRUD 메소드가 자동으로 생성된다.
  • Entity 클래스와 기본 Entity Repository는 함께 위치해야 한다. Entity클래스는 기본 Repository없이는 제대로 역할을 할 수가 없다. 
  • 도메인별로 프로젝트를 분리할 때 Entity 클래스와 기본 Repository는 함께 움직어야 하므로 도메인 패키지에서 함께 관리를 해야한다.
728x90
반응형
LIST

'Spring' 카테고리의 다른 글

[Spring] - 스프링 빈(bean)이란?  (0) 2025.02.12
[Spring] - Spring Data JPA 테스트코드 작성하기  (1) 2025.02.06
[Spring] - 롬복 알아보기 및 설치하기  (1) 2025.02.04
[Spring] - 스프링부트에서 테스트코드 작성하기  (1) 2025.02.03
[Spring] Hello Controller 테스트 코드 작성하기  (2) 2025.01.31
'Spring' 카테고리의 다른 글
  • [Spring] - 스프링 빈(bean)이란?
  • [Spring] - Spring Data JPA 테스트코드 작성하기
  • [Spring] - 롬복 알아보기 및 설치하기
  • [Spring] - 스프링부트에서 테스트코드 작성하기
코린이 파닥거리기
코린이 파닥거리기
    반응형
    250x250
  • 코린이 파닥거리기
    코린이 파닥거리기의 블로그
    코린이 파닥거리기
  • 전체
    오늘
    어제
    • 분류 전체보기 (130) N
      • 백준[파이썬] (57) N
      • Spring (31)
      • CS (1)
      • 자바 (4)
      • 백준[자바] (20)
      • 프로그래머스 (5)
      • 토이프로젝트 (1)
      • SWEA (2)
      • MSA (8) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    스프링 클라우드
    스프링
    SpringBoot
    코딩테스트
    자바
    프로그래머스
    MSA
    스프링부트
    JWT
    재귀
    AOP
    spring
    누적합
    Java
    테스트코드
    백준
    파이썬
    SWEA
    스프링 부트와 AWS로 혼자 구현하는 웹 서비스
    JPA
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코린이 파닥거리기
[Spring] - JPA란?
상단으로

티스토리툴바