5.4 Spring Data · Spring Data JPA

SummerToday·2024년 2월 4일
1
post-thumbnail
post-custom-banner

Spring Data

  • 스프링 데이터는 개발자의 엔티티 관리, 시점에 맞는 커밋 등의 부담을 줄여 비즈니스 로직에만 집중할 수 있도록 데이터베이스 사용 기능을 클래스 레벨에서 추상화한 인터페이스이다.

  • CRUD를 포함한 여러 메소드가 포함되어 있으며, 쿼리도 알아서 짜줄 수 있다.

  • 페이징 처리 기능과 메소드 이름으로 자동으로 쿼리를 빌딩하는 기능이 제공된다.

  • 각 데이터베이스의 특성에 맞춰 기능을 확장해 제공하는 기술도 제공된다.
    ex. JPA -> Spring Data JPA , MongoDB -> Spring Data MongoDB

Spring Data JPA

  • 스프링 데이터의 공통적인 기능에서 JPA의 유용한 기술들이 추가된 기술이다.

다음과 같이 스프링 데이터 JPA를 사용하면 리포지토리 역할을 하는 인터페이스를 생성하여 데이터베이스의 조회, 수정, 생성, 삭제 같은 작업을 간단히 할 수 있다.

public interface MemberRepository extends JpaRepository<Member, Long> {
} // 제네릭 -> <엔티티 이름, 엔티티 기본키의 타입>

위와 같이 JpaRepository 인터페이스를 상속 받게 되면 기본 CRUD를 할 수 있는 메소드를 사용할 수 있다.

Spring Data JPA에서 제공하는 메소드

@Service
public class MemberService {
    @Autowired
    MemberRepository memberRepository;
    public void test() {
        // 생성 (Create) - a
        memberRepository.save(new Member(1L, "A"));
        
        // 조회 (Read) - b
        Optional<Member> member = memberRepository.findById(1L);
        List<Member> allMembers = memberRepository.findAll();
        
        // 삭제 (Delete) - c
        memberRepository.deleteById(1L);
    }
}
  • a
    save() 메소드를 호출해 데이터 객체를 저장한다.
    전달 인수로 엔티티 Member를 넘기면 반환값으로 저장한 엔티티를 반환한다.

  • b
    findById() 메소드를 id에 지정해 엔티티를 하나 조회한다.
    findAll() 메소드는 전체 엔티티를 조회한다.

  • c
    deleteById() 메소드에 id를 지정하여 엔티티를 삭제한다.

    delete() 메소드를 호출해 엔티티를 전달 인수로 넘겨 삭제할 수도 있다.


예제 코드 분석 - 1

// Member.java

@Entity // 엔티티로 지정 - a
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)  // 기본생성자 - b
@AllArgsConstructor
public class Member {
    @Id  // id 필드를 기본키로 지정 - c
    @GeneratedValue(strategy = GenerationType.IDENTITY) // 기본키를 자동으로 1씩 증가. - d
    @Column(name = "id", updatable = false)
    private Long id;
    
    @Column(name = "name", nullable = false) // name이라는 not null 컬럼과 매핑 - e
    private String name;
}
  • a
    @Entity 애너테이션은 Member 객체를 JPA가 관리하는 엔티티로 지정한다. 즉, Member 클래스와 실제 데이터베이스의 테이블을 매핑시킨다.

    • @Entity(name = "~") 또는 추가로 @Table(name = "~") 애너테이션을 사용시 name에 해당하는 클래스와 매핑이 된다.

    • 따로 테이블 이름을 명시하지 않을 경우 클래스 이름과 같은 이름의 테이블과 매핑이 된다.
  • b
    파라미터가 없는 기본 생성자를 protected 타입으로 생성한다.
    엔티티는 반드시 기본 생성자가 있어야 하고 접근 제어자는 public 또는 protected여야 한다.

    public 보다는 protected가 더 안전하므로 protected인 기본 생성자를 생성한다.

  • c
    @Id는 Long 타입의 id 필드를 테이블의 기본키로 지정한다.

  • d
    @GeneratedValue는 기본키의 생성 방식을 결정한다.
    Identity 전략은 자동으로 기본키가 증가하는 방식으로 기본키를 생성한다.

    • 자동키 생성 설정 방식

      • AUTO
        : 선택한 데이터베이스 방언(dialect)에 따라 방식을 자동으로 선택(기본값).

      • Identity
        : 기본 키 생성을 데이터베이스에 위임 (AUTO_INCREMENT).

      • SEQUENCE
        : 데이터베이스 시퀀스를 사용해서 기본 키를 할당하는 방법. 오라클에서 주로 사용.

      • TABLE
        : 키 생성 테이블 사용
  • e
    @Column 애너테이션은 데이터베이스의 컬럼과 필드를 매핑해준다.

    • @Column 애너테이션의 속성

      • name
        : 필드와 매핑할 컬럼 이름. 설정하지 않을 시 필드 이름으로 지정한다.

      • nullable
        : 컬럼의 null 허용 여부. 설정하지 않을 시 true(nullable)

      • unique
        : 컬럼의 유일한 값(unique) 여부. 설정하지 않을 시 false(non unique)

      • coulmnDefinition
        : 컬럼 정보 설정. default 값을 줄 수 있다.

예제 코드 분석 - 2

// MemberRepository.java

public interface MemberRepository extends JpaRepository<Member, Long> {
}
  • 리포리티지는 엔티티에 있는 데이터들을 조회하거나 저장, 변경, 삭제를 할 때 사용하는 인터페이스이다.

  • 스프링 데이터 JPA에서 제공하는 인터페이스인 JpaRepository클래스를 상속 받아 간단히 구현할 수 있다.


정리

  • ORM : 관계형 데이터베이스와 프로그램 간의 통신 개념. (프로그래밍 기법)

  • JPA : 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 기술 명세.          (인터페이스)

  • Hibernate : JPA의 구현체중 대표적인 구현체로, 자바 언어를 위한 ORM 프레임워크.

  • Spring Data JPA : JPA를 쓰기 편하게 만들어놓은 모듈.




해당 글은 다음 도서의 내용을 정리하고 참고한 글임을 밝힙니다.
신선영, ⌜스프링 부트 3 벡엔드 개발자 되기 - 자바 편⌟, 골든래빗(주), 2023, 384쪽
profile
IT, 개발 관련 정보들을 기록하는 장소입니다.
post-custom-banner

0개의 댓글