소소한개발팁
반응형

MyBatis 는 흔히 SQL Mapping 프레임 워크로 분류되고 , JDBC 코드의 복잡하고 지루한 작업을 피하는 용도로 많이 사용됩니다. 

 

JDBC 프로그램

1. 직접 Connection을 맺고 마지막에 close()

2. PreparedStatement 직접 생성 및 처리

3. PreparedStatement 의 setXXX()등에 대한 모든 작업을 개발자가 처리

4. SELECT의 경우 직접 ResultSet처리

 

MyBatis

1. 자동으로 Connection close()기능

2. MyBatis 내부적으로 PreparedStatement 처리

3. #{prop} 와 같이 속성을 지정하면 내부적으로 자동처리

4. 리턴 타입을 지정하는 경우 자동으로 객체 생성 및 ResultSet 처리 

 

MyBatis는 기존의 SQL을 그대로 활용할 수 있다는 장점이 있고, 진입장벽이 낮은 편이여서 JDBC의 대안으로 많이 사용합니다. 스프링 프레임워크의 특징 중 하나는 다른 프레임워크들을 배척하는 대신에 다른 프레임워크들과의 연동을 쉽게 하는 추가적인 라이브러리들이 많은 것입니다. MyBatis 역시 mybatis-spring 이라는 라이브러리를 통해서 쉽게 연동이 가능합니다.

 

MyBatis에서 가장 핵심적인 객체는 SQLSession이라는 존재와 SQLSessionFactory입니다. 

SQLSEssionFactory는 내부적으로 SQLSession을 만들어 내는 존재인데 개발에서는 SQLSession을 통해 Connection을 생성하거나 SQL을 전달하고 결과를 리턴 받는 구조로 작성하게 됩니다.

 

스프링에서 SqlSessionFactory를 등록하는 작업은 SqlSessionFactoryBean을 이용합니다. 

패키지 명을 보면 MyBatis 패키지가 아닌 스프링과 연동 작업을 처리하는 mybatis-spring 라이브러리의 클래스임을 알수 있습니다.

 

MyBatis 의 Mapper 

 

Mapper 는 쉽게 말해서 SQL과 그에 대한 처리를 지정하는 역할을 합니다. MyBatis-Spring 을 이용하는 경우에는 Mapper 를 XML과 인터페이스 + 어노테이션의 형태로 작성 가능합니다.

 

SQL을 처리할 때 어노테이션을 이용하는 방식이 압도적으로 편리하기는 하지만 , SQL이 복잡하거나 길어지는 경우에는 어노테이션 보다는 XML을 이용하는 방식을 더 선호하게 됩니다.

 

MyBatis-Spring 의 경우 Mapper 인터페이스와 XML을 동시에 이용할 수 있습니다.

 

XML을 작성할 때는 XML파일의 위치와 XML파일에 지정하는 namespace속성이 중요한데 , XML 파일 위치의 경우 Mapper 인터페이스가 있는 곳에 같이 작성하거나 src/main/resources 구조에 XML을 저장할 폴더를 생성할 수 있습니다. XML 파일을 만들 때 이름에 대한 규칙은 없지만 , 가능하다면 Mapper 인터페이스와 같은 이름을 이용하는 것이 가독성을 높여줍니다.

 

XML 매퍼를 이용할 때 신경 서야 하는 부분은 <mapper> 태그의 namespace 속성값입니다. 

MyBatis는 Mapper 인터페이스와 XML을 인터페이스의 이름과 namespace 속성 값을 가지고 판단합니다.

 

<select> 태그의 id 속성 값은 메서드의 이름과 동일하게 맞춰야 합니다. <select> 태그의 경우 resultType 속성을 가지는데 이 값은 인터페이스에 선언된 메서드의 리턴 타입과 동일하게 작성합니다.

 

log4jdbc-log4j2 설정

 

MyBatis는 내부적으로 JDBC의 PreparedStatement를 이용해서 SQL을 처리합니다.

따라서 SQL에 전달되는 파라미터는 JDBC에서와 같이 "?"로 치환되어서 처리됩니다. 복잡한 SQL의 경우 '?' 로 나오는 값이 제대로 되었는지 확인하기가 쉽지 않고 실행된 SQL의 내요을 정확히 확인하기는 어렵습니다. 이런 문제를 해결하기 위해서 SQL을 변환해서 PreparedStatement에 사옹된 '?'가 어떤 값으로 처리되었는지 확인하는 기능을 추가하도록 합니다. SQL 로그를 제대로 보기위해서는 log4jdbc-log4j2 라이브러리를 사용해야 합니다.

 

라이브러리를 추가한 후에는 로그 설정 파일을 추가하는 작업과 JDBC의 연결 정보를 수정해야 합니다.

 

 

로그의 레벨 설정

 

테스트 코드를 실행하면 상당히 많은 양의 로그가 출력되는 데 시간이 지나면 불편해집니다. 

로그를 조절하고 싶다면 추가적인 <logger>를 지정해서 처리합니다.

기본 설정의 로그는 info 레벨이기 때문에 warn과 같이 좀 더 높은 레벨의 로그만 기록하게 수정하면 테스트 코드를 실행할 때 이전에 비해 로그의 양이 줄어드는 것을 확인할 수 있습니다.

 

반응형
profile

소소한개발팁

@개발자 뱅

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!