스프링 데이터와 JPA

도람·2025년 7월 20일
post-thumbnail

스프링 데이터 JPA

  • 지금까지는 개발자가 엔티티의 상태를 직접 관리하고, 필요한 시점에 직접 커밋을 하는 등, 신경써야 할 부분이 많았다.
  • 그러나 스프링 데이터는 비지니스 로직에 더 집중할 수 있도록 DB 사용 기능을 클래스 레벨에서 추상화했다.
  • 스프링 데이터에서 제공하는 인터페이스를 통해 스프링 데이터를 사용할 수 있다.
    -> 이 인터페이스에 CRUD및 각종 메서드 기능, 페이징 기능, 메서드 이름으로 자동 쿼리 빌딩하는 기능 등 많은 기능이 제공된다.
    ex) JPA는 spirng data JPA
    ex) 몽고디비는 spring data MongoDB

메서드 호출로 엔티티 상태 변경

  • 스프링 데이터 JPA는 스프링 데이터의 공통적인 기능에서 JPA의 유용한 기술이 추가된 것이다.
  • 스프링 데이터 JPA는 스프링 데이터 인터페이스인 PagingAndSortingRepository를 상속받아 JpaRepositry 인터페이스를 만들었다.

다음은 JPA를 활용한 예시이다.

//기존 엔티티 상태 바꾸는 방법(메서드 호출을 통해 상태 변경)
@PersistenceContext
EntityManager em;

public void join(){
	Member member = new Member(1L, "이름");
    em.persist(member);

//기본 CRUD 메서드를 사용하기 위해 JpaRepository 상속
public interface MemberRepository extends JpaRepository<Member, Long>{
}

이와 같이, JPA를 사용하면 기본적인 CRUD작업을 간단히 할 수 있다. JpaRepository 인터페이스를 자신이 만든 인터페이스에서 상속받고, 제네릭에는 관리할 <엔티티, 엔티티 기본키의 타입>을 입력하면 기본 메서드를 사용할 수 있다.

스프링 데이터 JPA에서 제공하는 메서드

@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@Getter
@Entity
public class Member {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", updatable = false)
    private Long id;

    @Column(name = "name", nullable = false )
    private String name;
}
  • @Entity : Member 객체를 JPA가 관리하는 엔티티로 지정한다. (=Member 클래스와 실제 데이터베이스의 테이블 매핑)
  • @Entity의 속성중에 name을 사용하면 name의 값을 가진 테이블 이름과 매핑. 지정하지 않으면 클래스 이름과 같은 이름의 테이블과 매핑.
    (여기에선 지정하지 않아, 클래스 이름과 같은 테이블인 member 테이블과 매핑.)
<name 파라미터로 Article 클래스와 member_list 테이블 매핑 예시>
// 'member_list'라는 이름을 가진 테이블과 매핑
@Entity(name = "member_list")
public clas Article {
}
  • @NoArgsConstructor(access = AccessLevel.PROTECTED)에서 protected는 기본 생성자.
  • 엔티티는 반드시 기본 생성자가 있어야 하며 public이나 protected여야 한다.
  • @Id는 Long 타입의 id필드를 테이블의 기본키로 지정한다.
  • @GeneratedValue는 기본키의 생성 방식을 결정한다.

<기본키 생성 방식>

  • Auto: 선택한 데이터베이스의 방언에 따라 방식을 자동으로 선택.
  • IDENTITY : 기본 키 생성을 데이터베이스에 위임
  • SEQUENCE: 데이터베이스 시퀀스를 사용하여 기본키를 할당. 주로 오라클에서 사용
  • TABLE: 키 생성 테이블에 사용

<@Column 애너테이선 속성>

  • name: 필드와 매핑할 컬럼 이름, 설정하지 않으면 필드 이름으로 지정
  • nullable: 컬럼의 null 허용 여부, 설정하지 않으면 true
  • unique: 컬럼의 유일값 여부 지정. 설정하지 않으면 false
  • columnDefinition : 컬럼 정보 설정. default를 사용할 수 있다.
profile
정도를 걷는 엔지니어

0개의 댓글