SQL을 대신 작성해 주는 JPA 기술을 사용하다 보면 과연 적합한 SQL을 사용하는지 궁금해지기 마련입니다. 특히나 테이블 크기가 크고 복잡한 조인 쿼리를 사용해서 여러 테이블의 데이터를 구해야 하는 경우 JPA가 최적의 SQL을 작성해서 사용하는지 검토해 볼 필요가 있습니다.
오랜 역사의 오라클데이터베이스도 때때로 최적의 쿼리를 사용하지 않고 있는 모습을 볼 수 있습니다. 그럴 때 힌트를 사용해서 개발자가 직접 쿼리의 실행계획을 조정할 필요가 있습니다. 이와 마찬가지로 JPA가 작성해서 사용하는 쿼리도 최적의 쿼리가 아닐 수 있습니다. 어떤 SQL 쿼리를 사용하느냐에 따라 성능의 차이가 날 수 있기 때문에 개발자가 직접 확인 해야 합니다. 이를 위해 프로젝트에 로깅기술을 적용해서 사용된 쿼리를 살펴보기 쉽도록 만들 필요가 있습니다.
프로젝트 생성
앞서 작업한 프로젝트 chapter1-4를 선택한 상태에서 ctrl+c, ctrl+v 키를 연속으로 눌러서 소스 전체를 복사해 chapter1-5라고 명명하면서 프로젝트를 추가합니다.
디펜던시 설정
pom.xml 파일에 다음 설정을 추가합니다.
로깅 환경설정
환경설정파일에 로깅을 위한 설정을 추가합니다.
application.properties
기존 드라이버 설정은 # 주석으로 막고 드라이버 스파이를 사용하도록 변경합니다. 로깅설정의 상세한 내용은 logback-spring.xml에 작성합니다. logback은 log4j를 업그레이드 한 기술입니다.
logback-spring.xml
n "STDOUT" 설정으로 로깅정보가 콘솔에 출력됩니다.
n "dailyRollingFileAppender" 설정으로 로깅 정보가 프로젝트 루트에 파일로 기록됩니다.
log4jdbc.log4j2.properties
로깅을 처리할 때 로거가 참조하는 설정정보를 알려줍니다.
테스트
스프링 기동 로그 살펴보기
application.properties 파일에 spring.jpa.hibernate.ddl-auto=create 설정으로 프로젝트가 기동 시 기존 테이블을 삭제하고 다시 생성할 것입니다. 로그 정보에서 관련 로그내역을 찾아보세요.
data.sql에 작성된 쿼리를 처리하는지 확인합니다.
브라우저로 접근해서 데이터를 요청하여 테스트 합니다.
질의 관련 로그 살펴보기
드라이버스파이는 조회쿼리인 경우 결과를 보기 좋게 테이블로 표시해 줍니다.
쿼리의 퍼포먼스를 판단할 수 있는 실행계획까지는 보여주지 않으므로 로그에 표시된 쿼리를 데이터베이스 전용 프로그램에서 실행하여 실행계획을 살펴 보시기 바랍니다.
댓글 없음:
댓글 쓰기