스프링 데이터 JPA는 Spring Framework와 JPA라는 기반 위에 JPA를 편리하게 사용할 수 있도록 돕는 기술이다. 스프링 데이터 JPA를 사용하면 Repositoy에 구현 클래스 없이 인터페이스만으로 개발을 완료할 수 있게 된다.
또한 그동안 반복 개발해 오던 등록, 수정, 삭제, 조회 같은 기본적인 CRUD 기능들을 모두 제공한다. 지금까지 개발자들이 단순하게 반복이라고 생각해 왔던 개발 코드들이 확연하게 줄어든다. 따라서 개발자는 핵심 비즈니스 로직을 개발하는 데 집중할 수 있다.
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
public interface MemberRepository extends JpaRepository<Member, Long> {
}
@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 엔티티 동일성 보장
}
}
스프링 부트를 사용하면 이 라이브러리만 추가하면 된다.
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.7'
참고: 쿼리 파라미터를 로그로 남기는 외부 라이브러리는 시스템 자원을 사용하므로, 개발 단계에서는 편하게 사용해도 된다. 하지만 운영시스템에 적용하려면 꼭 성능테스트를 하고 사용하는 것이 좋다.