스프링 데이터는 비즈니스 로직에 초점을 맞출 수 있도록 데이터베이스 사용 기능을 클래스 레벨에서 추상화한다. 이를 위해 제공하는 여러 인터페이스를 통해 스프링 데이터를 활용할 수 있다. 이들 인터페이스는 CRUD와 같은 다양한  메서드를 포함하며, 이를 사용하면 스프링 데이터가 자동으로 쿼리를 생성해준다.

 

추가적으로, 스프링 데이터는 페이징 처리 기능이나 메서드 이름으로 자동 쿼리 빌딩 등 다양한 기능을 제공한다. 그리고 각 데이터 베이스의 특성에 맞춰 확장 기능을 제공한다. 예를 들자면, JPA(Java Persistence API) 표준 스펙은 스프링 데이터 JPA를, MongoDB는 스프링 데이터 MongoDB를 사용할 수 있다.

 

🤔  < 스프링 데이터 JPA란? > 🤔 

스프링 데이터 JPA는 스프링 데이터의 일반적인 기능에 JPA 특화 기능이 추가된 라이브러리이다. 여기서 제공하는 JpaRepository 인터페이스는 스프링 데이터의 PagingAndSortingRepository 인터페이스를 상속받아 만들어졌으며,

JPA를 좀 더 간편하게 사용할 수 있는 메서드를 제공한다.

 

예를 들어, 스프링 데이터 JPA를 사용하지 않고, 엔티티의 상태를 바꾸려면 다음과 같이 작업을 해야 한다.

@PersistenceContext
EntityManager em;

public void join() {
// 기존에 인티티 상태를 바꾸는 방법(메서드 호출을 해서 상태 변경)
Member member = new Member(1L, "홍길동");
em.persist(member);
}

하지만 스프링 데이터 JPA를 사용하면, 데이터베이스의 CRUD 작업을 간편하게 처리할 수 있다. 다음과 같이 JpaRepository 인터페이스를 상속받은 사용자 정의 인터페이스를 만들고, 제네릭에는 <관리할 엔티티 이름, 엔티티 기본키 타입>을 입력하면, 기본적으로 제공되는 CRUD 메서드를 사용할 수 있다.

public interface MemberRepository extends JpaRepository<Member, Long> {
}

 

🐻‍❄️< 스프링 데이터 JPA에서 제공하는 메서드 사용해보기 > 🐻‍❄️

1.src/main/java/me/taeyoung/springbootdeveloper 경로에 MemberService.java를 생성해 코드를 아래와 같이 작성했다.

① save() 메서드를 호출해 데이터 객체를 저장할 수 있다. 전달 인수로 엔티티 Member를 넘기면 반환값으로 저장한 엔티티를 반환받을 수 있다.

②.findById() 메서드에 id를 지정해 엔티티를 하나 조회할 수 있다. findAll()메서드는 전체 엔티티를 조회한다.

③.deleteById()메서드에 id를 지정하면 엔티티를 삭제할 수 있다.


 

< 예제 코드 살펴보기 >

지금까지 많은 Annotation을 사용했다. 이제 Annotation이 어떤 역할을 하는지 알아볼 차례이다.

 

[Member.java]

①. @Entity Annotation은 Member 객체를 JPA가 관리하는 엔티티로 지정한다. 즉, Member 클래스와 실제 데이터베이스의 테이블을 매핑시킨다. @Entity의 속성 중에 name을 사용하면 name의 값을 가진 테이블 이름과 매핑되고 테이블 이름을 지정하지 않으면 클래스 이름과 같은 이름의 테이블과 매핑이 된다. 여기서는 테이블 이름을 지정하지 않았으므로 클래스 이름과 같은 데이터베이스의 테이블인 member 테이블과 매핑된다. @Entity Annotation에서 테이블을 지정하고 싶다면 다음과 같이 name 파라미터에 값을 지정해주자.

② protected 기본 생성자이다. 엔티티는 반드시 기본 생성자가 있어야 하고, 접근 제어자는 public 또는 protected 이어야 한다. public보다는 protected가 더 안전하므로 접근 제어자가 protected인 기본 생성자를 생성한다. 

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

④ @GeneratedValue는 기본키의 생성 방식을 결정한다. 여기서는 자동으로 기본키가 증가하도록 지정했다.

여기서는 IDENTITY라는걸 사용 했는데, 다양한 자동키 생성 설정 방식이 있다.

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

IDENTITY : 기본 키 생성을 데이터베이스에 위임(= AUTO_INCREMENT)

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

TABLE : 키 생성 테이블 사용

⑤ @Column Annotation은 데이터베이스의 컬럼과 필드를 매핑해준다. 대표적인 @Column Annotation의 속성을 알아보자.

name : 필드와 매핑할 컬럼 이름. 설정하지 않으면 필드 이름으로 지정해준다.

nullable : 컬럼의 null 허용 여부, 설정하지 않으면 true(nullable)

unique : 칼럼의 유일한 값(unique) 여부. 설정하지 않으면 false

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


[MemberRepository.java]

Repository는 엔티티에 있는 데이터들을 조회하거나 저장, 변경, 삭제를 할 때 사용하는 인터페이스로, 스프링 데이터 JPA에서 제공하는 인터페이스인 JpaRepository클래스를 상속받아 간단하게 구현할 수 있다.

 

JpaRepository 클래스를 상속받을 때, 엔티티 Member와 엔티티의 기본키 타입 Long을 인수로 넣어준다. 이제 해당 리포지토리를 사용할 때 JpaRepository에서 제공하는 여러 메서드를 사용할 수 있게 된다. 

 

 

Source :스프링 부트 3 백엔드 개발자 되기 - 자바 편

http://www.yes24.com/Product/Goods/118625612

 

스프링 부트 3 백엔드 개발자 되기 - 자바 편 - YES24

- 자바 백엔드 개발자가 되고 싶다면- 자바 언어 입문 그다음에 꼭 보세요실력을 갖춘 개발자로 성장하려면 시작이 중요합니다. 그래서 이 책은 무엇부터 익혀야 하는지 막막한 입문자에게 백엔

www.yes24.com

 

+ Recent posts