Spring/스프링 입문

스프링 데이터 JPA & 통합 테스트

코징 2022. 3. 10. 13:05

스프링 데이터 JPA를 사용하면 리포지토리에 구현 클래스 없이 인터페이스 만으로 개발을 완료할 수 있다.

사용법을 알아보자.

1) SrpingDataJpaMemberRepostiory 인터페이스를 생성

  1. SrpingDataJpaMemberRepostiory 인터페이스에 extends JapRepository <Member, Long>, MemberRepostiory로 상속받는다.
  2. 상속을 받게되면 Spring Jpa가 JpaRepostiory를 상속받는 클래스의 구현체를 자동으로 만들어주고, 만들어진 구현체를 토대로 스프링 빈에 자동으로 등록을 해준다.
  3. 우리는 이제 SpringConfig에서 등록된 MemberRepository를 사용하면 된다.
package hello.hellospring.repository;

import hello.hellospring.domain.Member;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.Optional;

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

    @Override
    Optional<Member> findByName(String name);
}

 - 여기서 부연설명을 하자고 하면 findByName은 따로 만든 이유는 데이터 베이스마다 조회할 때 엔티디 정보들이 전부 다르기 때문에 해당하는 값은 직접 지정해줘야 된다.  또한 추가적인 엔티티로 조회를 하기 위해서는 findByNameAndIDAnd... 이런 식으로 추가해 주면 된다.

 

2) SpringConfig DI 의존성 주입

  • 자동으로 등록된 MemberRepository로 변경해주자.
package hello.hellospring;
import hello.hellospring.repository.MemberRepository;
import hello.hellospring.service.MemberService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class SpringConfig {

    private final MemberRepository memberRepository;

    public SpringConfig(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }

    @Bean
    public MemberService memberService() {
        return new MemberService(memberRepository);
    }

    /*@Bean
    public MemberRepository memberRepository() {
        // return new MemoryMemberRepository();
        // return new JdbcMemberRepository(dataSource);
        // return new JdbcTemplateMemberRepository(dataSource);
        // return new JpaMemberRepository(em);
    }*/
}
결론

우리는 이제 쿼리 하나 없이 인터페이스를 구현한 것만으로 데이터 조회, 추가, 삭제 등 간단한 쿼리드를 작성할 수 있다. 그리고 복잡한 쿼리들은 jdbcTemplate이나, 마이 바티스, 등등 여러 가지 조합들을 통해서 조회하면 된다고 설명한다. 이후에 JPA를 들을 것이지만, 해당하는 기술을 접하지 못한 사람들이 이 코드를 봤을 때 동작을 어떻게 유추해야 될지.. 감이 안 올 것 같다. 

 

이 글은 인프런의

제목 : 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

강사 : 김영한 님의 동영상을 참조해 만들었습니다.

'Spring > 스프링 입문' 카테고리의 다른 글

AOP가 필요한 상황, 사용법  (0) 2022.03.10
스프링 JPA & 통합 테스트  (0) 2022.03.08
스프링 JDBCTemplate & 통합 테스트  (0) 2022.03.08
스프링 통합 테스트  (0) 2022.03.08
순수 JDBC 사용 및 연동  (0) 2022.03.08