아이바티스
아이바티스(iBatis)는 자바(Java) 등 응용 프로그램을 에스큐엘(SQL)에 기반한 데이터베이스와 연결시켜 주는 역할을 하는 오픈소스 기반의 표준 프레임워크이다. 아파치재단이 개발했고, 아파치 라이선스(Apache License)를 따른다. 하이버네이트의 경우 사용자가 객체모델을 생성하면 DB와 연결시켜주는 방식인데 반해, 아이바티스는 사용자가 DB에서 SQL 문장을 생성하면 그에 적합한 객체모델을 생성해주는 방식으로 작동한다. 2010년 아이바티스(iBatis)를 포크하여 마이바티스(MyBatis)가 만들어진 후 개발이 중단되었다. 한국 정부가 만든 전자정부 표준 프레임워크(eGovFrame)에 아이바티스의 기본 기능이 포함되어 있다.
목차
개요
아이바티스(iBatis)는 자바, 닷넷(.NET), 루비(Ruby) 의 SQL 데이터베이스와 객체 간의 매핑을 자동화 시켜주는 역할을 하는 영속성 프레임워크이다. 이러한 연결은 프로그램의 소스 코드에서 SQL문을 분리하여 별도의 XML 파일로 저장하고 이 둘을 서로 연결 시켜주는 방식으로 작동한다. 아이바티스는 "Internet" 과 "Abatis"의 합성어로 abatis는 적의 공격을 방어하기 위한 장애물이라는 뜻으로 iBatis 는 인터넷을 지키는데에 쓰이는 암호를 의미한다.[1]아이바티스는 2010년 5월 iBatis 팀 전원이 아파치 소프트웨어 재단에서 Google code로 이전하면서 명칭이 MyBatis로 변경되었다.
등장 배경
2001년 클린턴 비긴(Clinton Begin)에 의해 iBatis라는 프로젝트가 처음 시작되었다. 암호화 소프트웨어 솔루션 개발에 중점을 두었으며, iBatis가 출시 한 첫 번째 제품은 PGP와 같은 개인 데이터 암호화 및 서명 도구인 Secrets이다. Secrets는 자바로 작성되었으며 오픈 소스 라이선스하에 배포되었다.
역사
- 2002년 07월 01일 : iBatis 1.0 공개
- 2004년 06월 17일 : iBatis 2.0 출시
- 2010년 05월 19일 : iBatis 3.0 공개
- 2010년 06월 16일 : iBatis 팀 Apahce Software Foundation에서 Google code로 이전, 명칭이 iBastis 에서 MyBatis로 변경되었다.
- 2012년 03월 11일 : MyBatis 3.1.0 출시
- 2012년 03월 12일 : MyBatis-Spring 1.1.0 출시
- 2012년 04월 11일 : MyBatis-Guice 3.3 출시
- 2012년 04월 16일 : MyBatis 3.1.1 출시
- 2012년 04월 22일 : MyBatis-Spring 1.1.1 출시
- 2012년 07월 26일 : [ANN] Mybatis for Scala Beta 2 출시
- 2012년 09월 10일 : MyBatis Schema Migrations 3.1.0
- 2013년 02월 21일 : MyBatis 3.2.0, MyBatis-Spring 1.2.0 출시
- 2013년 03월 10일 : MyBatis 3.2.1 출시
- 2013년 04월 02일 : MyBatis 3.2.2 출시
- 2013년 04월 30일 : MyBatis Velocity Scripting 1.0 출시
- 2013년 09월 30일 : MyBatis 3.2.3, MyBatis-Spring 1.2.1, MyBatis-Guice 3.5, MyBatis-Velocity 1.1, Migrations 3.1.1, Migrations Maven Plugin 1.1.0 출시
- 2013년 11월 10일 : Google code에서 Github로 이전
- 2014년 01월 17일 : MyBatis 3.2.4 출시
- 2014년 01월 19일 : MyBatis CDI Extension 1.0-beta1, Spring-1.2.2, Scala-1.0.2, Migrations-maven-plugin 1.1.1 출시
- 2014년 01월 25일 : Migrations 3.2.0 출시
- 2014년 02월 06일 : MyBatis - MyBatipse(Eclipse 플러그인) 출시
- 2014년 02월 15일 : MyBatis 3.2.5 출시
- 2014년 03월 18일 : Migrations-maven-plugin 1.1.2 출시
- 2014년 03월 21일 : MyBatis 3.2.6, MyBatis Hazelcast adapter 1.1.0, MyBatis Memcached adapter 1.0.0 출시
- 2014년 03월 25일 : MyBatis-Guice 3.6 출시
- 2014년 04월 07일 : MyBatis 3.2.7 출시
- 2014년 10월 11일 : MyBatis 3.2.8 출시
- 2015년 03월 08일 : MyBatis(FreeMarker 플러그인) 출시
- 2015년 05월 24일 : MyBatis 3.3.0 출시
- 2015년 06월 19일 : Mybatis-spring 1.2.3 출시
- 2015년 07월 28일 : MyBatis-Guice 3.7 출시
- 2015년 11월 26일 : Mybatis-Spring-Boot 출시
- 2016년 02월 11일 : MyBatis-Ignite 출시
- 2016년 02월 13일 : MyBatis 3.3.1, MyBatis-Spring 1.2.4 출시
- 2016년 03월 07일 : MyBatis-Ignite 1.0.0 출시
- 2016년 03월 15일 : Mybatis-spring-boot 1.0.1 출시
- 2016년 03월 29일 : Mybatis-Spring 1.2.5(hot-fix) 출시
- 2016년 04월 08일 : MyBatis-TypeHandlers-JSR310 1.0.0 출시
- 2016년 04월 19일 : MyBatis 3.4.0, MyBatis-Spring 1.3.0, Boot-Starter 1.1.1 출시
- 2016년 04월 24일 : MyBatipse(Eclipse 플러그인) 1.0.18 업데이트
- 2016년 05월 28일 : MyBatipse(Eclipse 플러그인) 1.0.19 업데이트
- 2016년 06월 09일 : MyBatis-Ignite 1.0.1 출시
- 2016년 06월 11일 : MyBatis Migrations 3.2.1, Migrations Maven Plugin 1.1.3 출시
- 2016년 06월 21일 : MyBatipse(Eclipse 플러그인) 1.0.20 업데이트
- 2016년 06월 25일 : MyBatis Generator 1.3.3 출시
- 2016년 06월 26일 : MyBatis 3.4.1, TypeHandlers-JSR310 1.0.1 출시
- 2016년 07월 20일 : MyBatipse(Eclipse 플러그인) 1.0.21 업데이트
- 2016년 08월 19일 : MyBatis Generator 1.3.4 출시
- 2016년 08월 23일 : MyBatis-Ignite 1.0.2 출시
- 2016년 08월 25일 : MyBatis-Guice 3.8 출시
- 2016년 09월 06일 : MyBatipse(Eclipse 플러그인) 1.0.22 업데이트
- 2016년 09월 07일 : MyBatis Generator 1.3.5 1.3.5 출시
- 2016년 10월 02일 : MyBatipse(이클립스 플러그인) 1.0.23 출시
- 2016년 12월 14일 : MyBatis-Ignite 1.0.3 출시
- 2016년 12월 25일 : MyBatipse(이클립스 플러그인) 1.0.24 출시
- 2017년 01월 04일 : MyBatis 3.4.2, MyBatis-Spring 1.3.1, Spring-Boot-Starter 1.2.0 및 TypeHandlers-JSR310 1.0.2 출시
- 2017년 03월 02일 : MyBatis(이클립스 플러그인) 1.1.0 출시
- 2017년 04월 08일 : MyBatis 3.4.4 출시
- 2017년 04월 10일 : MyBatis-Boot-Starter 1.2.1 및 1.3.0 출시
- 2017년 04월 25일 : MyBatis Migrations 3.3.0 및 TypeHandlers-ThreeTen-Extra 1.0.0 출시
- 2017년 05월 16일 : MyBatis-Ignite 1.0.5 출시
- 2017년 08월 20일 : MyBatis-Spring-Boot 1.2.2 및 1.3.1, MyBatis 3.4.5 출시
- 2017년 08월 22일 : MyBatis-Ignite 1.0.6 출시
- 2017년 09월 09일 : MyBatis-Guice 3.10 출시
- 2017년 12월 21일 : MyBatis Dynamic SQL 1.0.0, MyBatis Generator 1.3.6 출시
- 2018년 03월 11일 : MyBatis 3.4.6 출시
- 2018년 03월 14일 : MyBatis-Spring 1.3.2, MyBatis Migrations 3.3.2, MyBatis-Spring-Boot 1.3.2 출시
- 2018년 04월 25일 : MyBatis Dynamic SQL 1.1.0 출시
- 2018년 07월 04일 : MyBatis Generator 1.3.7 출시
- 2018년 07월 24일 : MyBatis(이클립스 플러그인) 1.1.2 출시
- 2018년 10월 14일 : MyBatis Migrations 3.3.5 출시
- 2019년 01월 20일 : MyBatis 3.5.0 출시
- 2019년 04월 08일 : MyBatis 3.5.1 출시
- 2019년 07월 15일 : MyBatis 3.5.2 출시[2]
특징
간결함과 쉬움 접근성
다른 프레임워크와 객체관계맵핑툴에 비해 가장 간단한 퍼시스턴스 프레임워크이다. SQL문을 XML에 그대로 서술하기 때문에 기존 SQL문 처리에 익숙한 개발자들이 다가가기 쉽다. 그에 따라 데이터베이스 관리자와 SQL 프로그래머 양 쪽 모두 이해하기 용이하다.
생산성의 향상
JDBC와 SQL을 유지하면서도 훨씬 더 적은 코드로도 JDBC처럼 작동한다. 자바코드의 20%를 사용하여 JDBC기능의 80%를 제공하는 간단한 프레임워크이며, 작성할 필요가 없는 JDBC 코드로 인한 분량 문제는 현저하게 줄어든다. (JDBC에 비해 62%정도이다.)
성능
성능최적화 기법을 지원한다. 페이징 처리된 데이터 리스트를 읽어와서 사용할 때 불필요한 수천개의 행을 한꺼번에 데이터베이스로부터 가져오는것이 아니기 때문에 애플리케이션의 성능을 향상시킬수있다.[3]
SQL 문장과 프로그래밍 코드의 분리
작업의 분배 : 팀을 세분화하는 것을 돕는다. SQL문과 Java코드와의 분리만으로도 Java개발자는 Query문을 신경쓰지 않아도 된다. SQL문이 변경되더라도 파라미터 값만 변경되지 않는다면 Java소스에서 수정할 부분이 없기 때문이다.
이식성
자바, C#(iBatis.NET), Ruby(RBATIS) 등 어떠한 프로그래밍 언어로도 구현가능하다. 데이터베이스 접근 클래스와 비지니스 로직을 담은 클래스의 분리, 이른바 DAO(Data Access Object) 패턴이 이러한 일을 담당한다. iBatis는 DAO 계층 구현을 위한 유틸리티 성격이면서 동시에 best practice 역할도 수행한다. 자주 쓰이는 데이터를 변경되지 않는 동안에 임시 보관한다. iBatis에서는 XML 설정만으로 캐시를 할 수 있다.
트랜젝션과 쓰레드 관리
트랜젝션 처리 역시 용이하다.[4]
사용법
예를 들어, 데이터베이스 테이블 PRODUCT (PROD_ID INTEGER , PROD_DESC VARCHAR (64)) 및 Java 클래스 com.example.Product (id : int , description : String ) 가 있다고 가정합니다 . PROD_ID 키가있는 제품 레코드를 새로운 Product POJO 로 읽으려면 , 다음 맵핑이 iBATIS XML 맵핑 파일에 추가됩니다.
<font color="<select"> </font> |
select PROD_ID as id, PROD_DESC as description from PRODUCT where PROD_ID = #value# </select>
다음과 같이 제품 번호 123에 대한 데이터베이스에서 새 Java 제품 오브젝트를 검색 할 수 있습니다.
Product resultProduct = (Product) sqlMapClient.queryForObject("getProduct", 123);
매핑 파일 예제 #value#
에서 쿼리에 전달 된 long integer 값을 참조합니다. 매개 변수가 Java 객체이면 비슷한 #표기법을 사용하여 해당 객체의 속성 값을 쿼리에 삽입 할 수 있습니다 . 예를 들어, 매개 변수 클래스가 com.example.Product
호출 된 속성이있는 a id
이면, 다음으로 #value#
바꿀 수 있습니다 #id#
. sqlMapClient
객체는 클래스의 인스턴스입니다 com.ibatis.sqlmap
.client.SqlMapClient
.[5]
각주
- ↑ px_Forever, 〈iBatis〉, 《이글루》, 2005-12-08
- ↑ 마이바티스 공식 홈페이지 - https://blog.mybatis.org/
- ↑ 기계새, 〈iBatis란?〉, 《티스토리》, 2012-03-28
- ↑ 꿀벌, 〈iBatis란?〉, 《네이버 블로그》, 2010-10-01
- ↑ 〈Apache iBATIS〉, 《위키피디아》
참고 자료
- 아이바티스 기존 공식 홈페이지 - http://ibatis.apache.org/
- 마이바티스 공식 홈페이지 - https://blog.mybatis.org/
- 아파치 인큐베이터 공식 홈페이지 - https://incubator.apache.org/projects/ibatis.html
- 꿀벌, 〈iBatis란?〉, 《네이버 블로그》, 2010-10-01
- 기계새, 〈iBatis란?〉, 《티스토리》, 2012-03-28
- 〈Apache iBATIS〉, 《위키피디아》
- px_Forever, 〈iBatis〉, 《이글루》, 2005-12-08
- K. L. Nitin, Ananya S., Mahalakshmi K., and S. Sangeetha〈iBATIS, Hibernate, and JPA: Which is right for you?〉, 《JAVAWORKD》, 2008-07-15
- 김미누, 〈Spring iBatis 정의와 장점〉, 《네이버 블로그》, 2014-05-28
- dreamygirl, 〈Spring (iBatis 인 액션 정리) 1장.iBATIS의 탄생 철학〉, 《네이버 블로그》, 2012-12-14
- 빨간얼굴, 〈아이바티스(iBatis)란?!〉, 《네이버 블로그》, 2010-09-08
같이 보기