[java] MyBatis에서 실행 계획 확인하기

애플리케이션 개발 시 데이터베이스와의 상호작용은 항상 중요한 부분입니다. 그리고 성능이 문제가 될 수도 있는데요. MyBatis는 많은 개발자들이 사용하고 있는 자바 프레임워크 중 하나입니다. MyBatis는 데이터베이스 쿼리를 실행하고 그 결과를 매핑하는 역할을 담당하는데, 이 과정에서 어떤 SQL 쿼리가 실행되는 지, 그리고 실행 계획이 어떤지 확인하는 것은 매우 유용합니다.

이번에는 MyBatis에서 실행 계획을 확인하는 방법을 알아보겠습니다.

1. 로그 설정하기

MyBatis에서 실행된 SQL 쿼리와 실행 계획을 확인하려면 먼저 로그 설정을 해야 합니다. MyBatis의 로그는 로깅 라이브러리인 Log4j나 Logback을 통해 출력할 수 있습니다.

Log4j 설정 파일인 log4j.properties에서 아래와 같이 MyBatis의 로그 레벨을 설정합니다.

log4j.logger.org.apache.ibatis=DEBUG

유사하게 Logback 설정 파일인 logback.xml에서 아래와 같이 MyBatis의 로그 레벨을 설정할 수도 있습니다.

<logger name="org.apache.ibatis">
    <level value="debug" />
</logger>

로그 레벨을 DEBUG로 설정하면 실행된 SQL 쿼리와 실행 계획이 상세하게 출력됩니다.

2. 실행 계획 확인하기

로깅 설정을 마친 후, MyBatis 애플리케이션을 실행하면 SQL 쿼리 및 실행 계획이 로그에 출력됩니다.

아래는 MyBatis에서 실행된 SQL 쿼리와 실행 계획의 예시입니다.

DEBUG [main] org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(_prepareStatement:133) - ==>  Preparing: SELECT * FROM customers WHERE age > ? 
DEBUG [main] org.apache.ibatis.logging.jdbc.BaseJdbcLogger.trace(_setObject:134) - ==>  Parameters: 21(Integer)
DEBUG [main] org.apache.ibatis.logging.jdbc.BaseJdbcLogger.trace(_query:139) - ==> Connection ID: XXXX
DEBUG [main] org.apache.ibatis.logging.jdbc.BaseJdbcLogger.trace(_query:140) - ==> Executing: SELECT * FROM customers WHERE age > ? 
DEBUG [main] org.apache.ibatis.logging.jdbc.BaseJdbcLogger.trace(_query:141) - ==> Parameters: 21(Integer)
DEBUG [main] org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(_resultSetHandler:136) - <==    Columns: id, name, age, email
DEBUG [main] org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(_resultSetHandler:137) - <==        Row: 1, John Doe, 25, johndoe@example.com
DEBUG [main] org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(_resultSetHandler:137) - <==        Row: 2, Jane Smith, 28, janesmith@example.com

로그에서 Preparing은 쿼리를 준비하는 단계, Executing은 쿼리를 실행하는 단계를 의미합니다. Parameters에는 쿼리에 전달되는 인자 값들이 출력되는데, 이를 통해 어떤 값으로 쿼리가 실행되고 있는지 확인할 수 있습니다. Columns에서는 조회된 결과의 컬럼 목록이 출력되고, Row에는 조회된 각 행의 데이터가 출력됩니다.

이렇게해서 MyBatis에서 실행되는 SQL 쿼리와 실행 계획을 확인할 수 있습니다. 이를 통해 성능 문제를 식별하고 최적화할 수 있습니다.

3. 참고 자료