Spring 사용하기 (Coupon_check 백엔드(6-3) - DB 스프링 데이터 JPA) (문제있음)

김태훈·2022년 12월 31일
0

Spring_CouponCheck

목록 보기
14/14

스프링 부트 + JPA 위에, 스프링 데이터 JPA? = 끝장 나게 쉽다
스프링 데이터 JPA는 JPA를 편리하게 사용하게끔 도와준다.
따라서 JPA를 먼저 잘 알고 사용할 것.

1. Repository를 class가 아닌 Interface로 만들기

package Goat.CouponCheck.repository;

import Goat.CouponCheck.domain.Member;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.Optional;

public interface SpringDataJpaRepository extends JpaRepository<Member,Long>,Repository {
    Optional<Member> findByName(String name);
}

인터페이스는 다중상속이 된다!
그렇다면 어떻게 인터페이스가 Repository로 구현이 되는 것인가?
해당 답변은, spring boot가 JpaRepository(SpringData가 관리함)를 extends로 받고 있으면, 자동으로 구현체를 만들어 등록시킨다.

하지만, SpringConfig에서 Repository를 등록한 것이 없다. 어떻게 되는 것일까?
SpringDataJpaRepository를 등록시켜 놓았기 때문에, 거기서 interface 구현체를 자동으로 생성한다.

해결되지 않은 점
아직 JPA를 잘 몰라서인가, 자꾸 오류가 뜬다.
JpaRepository<Member,Long>때문인 거 같은데 차차 공부하며 알아가보자.

2. JPA가 간단한 이유


출처 : 김영한님 강의 https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/

해당 구조로 되어있어서, 그대로 가져다 쓰면되기 때문이다.
따라서 기본적인 CRUD 구조 및 매우 보편화된 클래스들은 스프링 데이터 JPA 다 구현이 되어있다.

하지만, 공통적으로 들어가기 어려운 서비스같은 경우에 직접 짜야하는 것은 당연하다.

Optional<Member> findByName(String name); //select m from Member m where m.name = ?

해당 경우가 그러하다.
이러한 스프링 데이터 JPA를 활용하는 것에는 규칙이 있는데,
findBy"~~" 에 들어가는 물결표에 따라 정형화된 규칙이 존재한다.
즉 이러한 인터페이스 이름만 가지고 개발을 끝낼 수 있다.

내가 하고있는 프로젝트에서는 해당 부분에 구현을 실패했다.
나중에 다시 구현해보도록 하자.

profile
기록하고, 공유합시다

0개의 댓글