[java] MyBatis에서 동적 SQL 디버깅하기

MyBatis는 자바 애플리케이션에서 쉽게 데이터베이스를 다루기 위한 프레임워크입니다. 많은 경우 SQL 쿼리를 동적으로 생성해야할 때가 있는데, 이때 디버깅이 어려울 수 있습니다. 이번 포스트에서는 MyBatis에서 동적 SQL을 디버깅하는 방법을 알아보겠습니다.

1. Logging 설정하기

먼저 MyBatis의 로깅 설정을 변경해야 합니다. MyBatis는 자체적으로 로깅을 수행하며, 디버깅을 위해 로그를 출력할 수 있습니다. MyBatis의 로깅 레벨을 조정해서 표시할 로그의 상세도를 설정할 수 있습니다.

<configuration>
  <settings>
    <setting name="logImpl" value="LOG4J2"/>
  </settings>
</configuration>

위의 예제에서는 Log4j2를 사용하는 것을 가정하고 있습니다. Log4j 설정은 애플리케이션의 로그 구성에 따라 다를 수 있습니다. 자세한 설정 방법은 Log4j2의 공식 문서를 참조하시기 바랍니다.

2. SQL 로그 출력하기

로그 출력을 위해 MyBatis는 org.apache.ibatis.logging 패키지에 다양한 로깅 구현체를 제공합니다. 이 중에서 Slf4jImpl 구현체를 사용하여 실제로 SQL 로그를 출력할 수 있습니다.

먼저 Maven을 통해 다음 의존성을 추가해야 합니다.

<dependencies>
  <!-- MyBatis -->
  <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.7</version>
  </dependency>

  <!-- Logging implementation (Slf4j) -->
  <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.30</version>
  </dependency>
  <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.30</version>
  </dependency>
</dependencies>

그리고 MyBatis 설정 파일에 다음과 같이 추가해야 합니다.

<configuration>
  <settings>
    <setting name="logImpl" value="SLF4J"/>
  </settings>
</configuration>

이렇게 설정하면 MyBatis는 SQL을 로그로 출력합니다.

3. SQL 로그 출력 내용 확인하기

실행 중인 애플리케이션의 로그를 확인하면 MyBatis가 생성한 SQL 쿼리와 매개 변수 값을 볼 수 있습니다. 이를 통해 동적 SQL이 어떻게 생성되고 실행되는지 쉽게 파악할 수 있습니다.

예를 들어, 다음과 같은 MyBatis 매퍼 파일에서 동적 SQL을 사용한다고 가정해 보겠습니다.

<select id="getUserList" resultType="User">
  SELECT * FROM user
  <where>
    <if test="name != null">
      AND name = #{name}
    </if>
    <if test="age != null">
      AND age = #{age}
    </if>
  </where>
</select>

실행 중인 애플리케이션 로그에는 다음과 같은 내용이 포함될 것입니다.

DEBUG org.apache.ibatis.mapping.BoundSql - |==> Preparing: SELECT * FROM user WHERE name = ? AND age = ?
DEBUG org.apache.ibatis.mapping.BoundSql - |==> Parameters: John(String), 25(Integer)

위의 내용을 보면 동적 SQL의 조건에 따라 생성된 쿼리와 매개 변수 값이 출력된 것을 확인할 수 있습니다.

결론

MyBatis는 동적 SQL을 쉽게 디버깅할 수 있는 방법을 제공합니다. 로깅 설정과 로그 출력을 통해 MyBatis가 생성한 SQL 쿼리와 매개 변수 값을 확인할 수 있습니다. 이를 통해 개발 및 디버깅 과정에서 동적 SQL의 동작을 분석하고 문제를 해결할 수 있습니다.

참고 자료