SpringDataJPA - 소개 및 사용법

박민수·2023년 11월 14일
0

JPA

목록 보기
12/24
post-thumbnail

SpringDataJPA

스프링 데이터 JPA는 Spring Framework와 JPA라는 기반 위에 JPA를 편리하게 사용할 수 있도록 돕는 기술이다. 스프링 데이터 JPA를 사용하면 Repositoy에 구현 클래스 없이 인터페이스만으로 개발을 완료할 수 있게 된다.
또한 그동안 반복 개발해 오던 등록, 수정, 삭제, 조회 같은 기본적인 CRUD 기능들을 모두 제공한다. 지금까지 개발자들이 단순하게 반복이라고 생각해 왔던 개발 코드들이 확연하게 줄어든다. 따라서 개발자는 핵심 비즈니스 로직을 개발하는 데 집중할 수 있다.

사용법

application.yml 설정

spring.jpa.hibernate.ddl-auto: create 애플리케이션 실행 시점에 테이블을 drop 하고, 다시 생성한다.
show_sql : System.out 에 하이버네이트 실행 SQL을 남긴다.
org.hibernate.SQL : logger를 통해 하이버네이트 실행 SQL을 남긴다.
모든 로그 출력은 가급적 로거를 통해 남겨야 한다.

spring:
  datasource:
    url: jdbc:h2:tcp://localhost/~/datajpa
    username: sa
    password:
    driver-class-name: org.h2.Driver
  
  jpa:
    hibernate:
      ddl-auto: create
    properties:
      hibernate:
        # show_sql: true
        format_sql: true

logging.level:
  org.hibernate.SQL: debug
  # org.hibernate.type: trace

스프링 데이터 JPA 리포지토리

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

스프링 데이터 JPA 테스트

@SpringBootTest
@Transactional
@Rollback(false)
public class MemberRepositoryTest {

    @Autowired MemberRepository memberRepository;

    @Test
    public void testMember() {
        Member member = new Member("memberA");
        Member savedMember = memberRepository.save(member);
        
        Member findMember = memberRepository.findById(savedMember.getId()).get();

        Assertions.assertThat(findMember.getId()).isEqualTo(member.getId());
        Assertions.assertThat(findMember.getUsername()).isEqualTo(member.getUsername());
        Assertions.assertThat(findMember).isEqualTo(member); //JPA 엔티티 동일성 보장
    }
}

쿼리 파라미터 로그 남기기

p6spy 외부 라이브리 추가

스프링 부트를 사용하면 이 라이브러리만 추가하면 된다.

implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.7'

참고: 쿼리 파라미터를 로그로 남기는 외부 라이브러리는 시스템 자원을 사용하므로, 개발 단계에서는 편하게 사용해도 된다. 하지만 운영시스템에 적용하려면 꼭 성능테스트를 하고 사용하는 것이 좋다.


참조
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EB%8D%B0%EC%9D%B4%ED%84%B0-JPA-%EC%8B%A4%EC%A0%84/dashboard

profile
안녕하세요 백엔드 개발자입니다.

0개의 댓글