inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바 ORM 표준 JPA 프로그래밍 - 기본편

조인

hibernate 의 완성된(?) 쿼리를 확인 하는 방법 문의 드립니다

1596

iam2010

작성한 질문수 1

1

안녕하세요. 

IntelliJ 를 통해서 

hibernate 에서 어떤식으로 쿼리를 만들어 내는지 확인이 가능한데요, 

파라미터는 ? 표로 표시됩니다. 

혹시 ? 에 어떤 값이 최종적으로 들어왔는지도 같이 확인 할 수 있는 방법이 있을까요?

물론, 파라미터를 찍어주면 되겠으나, 그런 방법 말고, 모든 경우에 같이 볼 수 있는 방법이 있는지 궁금해서요.. 

감사합니다. 

JPA java

답변 2

4

김영한

안녕하세요. iam2010님^^

크게 2가지 방법이 있습니다.

1. hibernate가 제공하는 방법

org.hibernate.type의 로그 레벨을 trace로 잡으면 됩니다.

그런데 먼저 로그라이브러리를 설정해야 해서 좀 일이 있습니다.

1. pom.xml에 다음을 추가해줍니다.

<!-- logback -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>

2. resources 아래에 logback.xml 파일을 만들어서 둡니다. 여기에 잘 보시면 org.hibernate.type이 trace로 설정되어 있습니다.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{HH:mm} %-5level %logger{36} - %msg%n</Pattern>
</layout>
</appender>

<logger name="org.hibernate.type" level="trace" />

<root level="info">
<appender-ref ref="STDOUT" />
</root>
</configuration>

그리고 실행하면 다음과 같은 추가로그를 볼 수 있습니다.

Hibernate: 

    /* insert hellojpa.Member

        */ insert 

        into

            Member

            (team_id, USERNAME, MEMBER_ID) 

        values

            (?, ?, ?)

21:34 TRACE o.h.type.descriptor.sql.BasicBinder - binding parameter [1] as [BIGINT] - [1]

21:34 TRACE o.h.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [member1]

21:34 TRACE o.h.type.descriptor.sql.BasicBinder - binding parameter [3] as [BIGINT] - [2]

위에 보시면 binding parameter가 보입니다.

2. 외부 라이브러리를 사용하는 방법

구글에 p6spy로 검색해보시면 관련 라이브러리가 있습니다.

이 라이브러리를 사용하면 매우 편리하게 정말 ?에 넣은 값 자체가 보입니다!

insert into ... values(1,member1,2) 이런식으로요.

그런데 설정하기가 좀 까다롭니다.

스프링 부트에서는 설정하기가 좀 쉬운데요.

관련해서 활용1편

섹션1. 프로젝트 환경설정 -> JPA와 DB설정, 동작확인 편에서 자세히 소개를 해드립니다^^

관련해서 활용1편 메뉴얼에 있는 내용을 남겨드립니다.

### 쿼리 파라미터 로그 남기기

* 로그에 다음을 추가하기`org.hibernate.type`: SQL 실행 파라미터를 로그로 남긴다.

* 외부 라이브러리 사용

* https://github.com/gavlyukovskiy/spring-boot-data-source-decorator

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

```

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

```

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

1

iam2010

많은 도움이 되었습니다. 감사합니다~

실무 조언 관련 질문입니다.

0

40

1

H2데이터베이스 파일 생성

0

48

2

서브쿼리 강의에서 ALL 예시 관련 질문드립니다.

0

49

2

수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?

0

46

1

JPQL 메소드와 락

0

49

1

Delivery @OneToOne

0

55

1

17강 4~5분대 테이블 값 조회가 안됩니다.

0

85

2

UnsupportedOperationException 발생

0

81

3

H2 Database 연결이 안됩니다.

0

87

2

연관관계 매핑 질문드립니다.

0

79

2

h2데이터베이스 실행오류

0

103

2

persistence.xml

0

101

2

양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?

0

76

1

영속성 컨텍스트

0

61

1

JPA 프록시

0

87

1

Native Query와 MyBatis

0

62

1

영속성 컨텍스트는 어떤 메모리에 저장되는건가요?

0

81

1

임베디드 타입 예시 코드 관련 질문

0

110

3

명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요

0

89

3

인텔리제이 패키지 커서 단축키 질문

0

104

2

혹시 현재는 ID 데이터 타입이 String이면 안되나요?

0

134

1

양방향 연관관계 시 연관관계 주인을 설정하는 이유

0

67

1

임베디드 타입과 MappedSuperClass의 차이점이 궁금합니다.

0

95

1

데이터베이스가 초기화되는 것 같아요

1

174

2