
위치 : main/resources/application.yml
spring:
# 데이터베이스 커넥션 관련 설정
datasource:
url: jdbc:h2:tcp://localhost/~/jpashop
username: sa
password:
driver-class-name: org.h2.Driver
# JPA 관련 설정
jpa:
hibernate:
ddl-auto: create
properties:
hibernate:
show_sql: true
format_sql: true
# 로그 관련 설정
logging:
level:
org.hibernate.sql: debug
org.hibernate.type: trace #스프링 부트 2.x, hibernate5
spring.datasource.url: MVCC=TRUE → H2 1.4.198 버전부터 제거
spring.jpa.hibernate.ddl-auto: create
참고 : 모든 로그 출력은 가급적 로거를 통해 남겨야 함
spring.jpa.properties.hibernate.show_sql
- System.out 에 하이버네이트 실행 SQL을 남김.
- 개발 단계에선 사용할 수 있으나, 운영 환경에서는 사용 자제
logging.level.org.hibernate.sql
- logger를 통해 하이버네이트 실행 SQL을 남김.
주의!
yml 파일은 띄어쓰기(스페이스) 2칸으로 계층을 만듬.
따라서 띄어쓰기 2칸을 필수로 적어주어야 함.
@Entity
@Getter @Setter
public class Member {
@Id @GeneratedValue
private Long id;
private String username;
}
@Repository // ComponentScan 대상 -> 자동으로 bean에 저장
public class MemberRepository {
@PersistenceContext // EntityManager 주입
private EntityManager em;
public Long save(Member member) {
em.persist(member);
return member.getId(); // 커맨드와 쿼리를 분리
}
public Member find(Long id) {
return em.find(Member.class, id);
}
}
단축키
- 테스트 코드 생성
- commend + shift + T
- 변수 뽑는 단축키 (Extract → Variable)
- commend + option + V
@RunWith(SpringRunner.class) // Junit한테 알려주기
@SpringBootTest
public class MemberRepositoryTest {
@Autowired MemberRepository memberRepository; // Injection 주입
@Test
@Transactional // Transaction을 주입하지 않으면 에러 발생
@Rollback(value = false)
public void testMember() throws Exception {
// given
Member member = new Member();
member.setUsername("memberA");
// when
Long savedId = memberRepository.save(member);
Member findMember = memberRepository.find(savedId);
// then -> 검증
Assertions.assertThat(findMember.getId()).isEqualTo(member.getId());
Assertions.assertThat(findMember.getUsername()).isEqualTo(member.getUsername());
Assertions.assertThat(findMember).isEqualTo(member); // JPA 엔티티 동일성 보장
System.out.println("findMember == member : " + (findMember == member));
}
}
intelij 단축키 만들기
- Setting → Live Templates → custom
![]()
- Template text
@Test public void $NAME$() throws Exception { // given $END$ // when // then }
주의!
- @Test : JUnit4 → org.junit.Test


@Rollback(value = false) 적용 시
Assertions.assertThat(findMember).isEqualTo(member); // JPA 엔티티 동일성 보장
System.out.println("findMember == member : " + (findMember == member));




org.hibernate.type: trace
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.6'
참고
쿼리 파라미터를 로그로 남기는 외부 라이브러리는 시스템 자원을 사용하므로, 개발 단계에서는 편하게 사용해도 된다.
하지만 운영시스템에 적용하려면 꼭 성능테스트를 하고 사용하는 것이 좋다.