'PP/IBATIS.NET'에 해당되는 글 1건

  1. 2012.01.13 iBatis 장점
posted by 방랑군 2012. 1. 13. 02:19

 iBatis는 여러 솔루션들로부터 최고의 아이디어들을 표출하여 그 시너지를 이끌어낸다.

표는 각각의 접근 방법 중에서 iBatis가 차용한 몇몇 아이디어들을 정리한 것이다.

 방법

 비슷한 이점

해결된 문제점 

 저장 프로시저

 iBatis는 SQL을 캡슐화 하고 외부로 분리하여 애플리케이션 외부에 SQL을 둔다. iBatis는 저장 프로시저와 비슷하지만 객체지향적인 API를 제공한다. iBatis는 또한 저장 프로시저를 직접 호출하는 방법도 지원한다.

 비즈니스 로직이 데이터베이스 밖에 있도록 한다. 배포하기 쉽다. 테스트하기 쉽다. 이식성이 좋다.

 인라인 SQL

 iBatis는 SQL을 원형 그대로 작성할 수 있다. 문자열 연결이나 파라미터 값 설정, 결과값 가져오기 등이 불필요하다.

 iBatis는 애플리케이션 코드내에 삽입되지 않는다. 전처리기가 불필요하다. SQL의 일부가 아닌 모든 기능을 사용할 수 있다.

 동적 SQL

 iBatis는 파라미터를 기반으로 하여 동적으로 쿼리를 구성하는 기능을 제공한다. 쿼리 구성 API는 필요 없다.

 iBatis는 애플리케이션 코드에 섞인 연결된 블록으로 SQL을 작성할 필요가 없다.

 객체/관계 매핑

 iBatis는 ORM도구의 적재 지연, 조인해서 값 가져오기, 실시간 코드 생성, 상속 등과 같은 많은 기능들을 동일하게 제공한다.

 iBatis는 어떤한 데이터 모델과 객체모델의 조합도 사용할 수 있다. 이들을 어떻게 설계 할지에 대한 제약이나 규칙 같은 것은 거의 없다.

 

 

-SQL의 외부 저장과 캡슐화

  이 두 개념이 합쳐져서 iBatis가 이룩한 많은 가치와 고급기능들을 제공해준다.

 

외부로 뺀 SQL

  사용자 인터페이스 설계, 애플리케이션 프로그래밍 그리고 데이터베이스 관리 같은 서로 다른 프로그래밍 역할에 따라 다뤄지는 사항들은 서로 분리하는 것이 좋다. 이렇게 분리하면 시스템의 특정 부분에 집중할 수 있는 잘 계층화된 설계를 얻을 수 있다. 만약 SQL을 자바 소스 코드에 집어넣으면 데이터베이스 관리자나 혹은 .NET개발자들이 동일한 데이터베이스에서 작업할 경우 불편하게 된다. 외부로 뺀 SQL을 애플리케이션 소스 코드로부터 분리하여 둘 모두를 명확하게 유지할 수 있게 한다. 그렇게 함으로써 SQL은 상대적으로 특정 언어나 플랫폼에 독립적인 상태가 된다.

 

SELECT

   PRODUCTID,

   NAME,

   DESCRIPTION,

   CATEGORY

FROM PRODUCT

WHERECATEGORY = #categoryId#

 

기존 SQL과 가장 다른 점은 파라미터 #categoryId#의 형태가 특정 언어에 종속적인 세부사항에 따라 달라지는 점이다. iBatis는 이를 더 이식성 좋고 읽기 쉽게 해준다.

 

캡슐화된 SQL

  오래된 개념 중 하나로 모듈화가 있다. 캡슐화는 코드를 응집성 있는 모듈로 조직하는 것뿐만 아니라 또한 세부적인 구현을 숨기고 호출하는 코드에게 인터페이스만을 노출시키는 모듈화의 한 형태이다.

  이러한 개념은 퍼시스턴스 계층으로도 확대 적용할 수 있다. SQL의 입력과 출력을 정의하고 애플리케이션의 다른 부분으로부터 SQL 코드를 숨겨서 SQL을 캡슐화할 수 있다. 객체지향 소프트웨어 개발자라면 인터페이스를 구현으로부터 분리하는 것과 같은 방식이라고 보면 된다. SQL 개발자라면 저장 프로시저 안에 SQL을 숨기는 것이 캡슐화라고 생각하면 된다.

  iBatis는 SQL을 캡슐화하기 위해 XML을 사용한다. XML을 선택한 까닭은 일반적으로 모든 플랫폼에 이식가능하고, 산업 전반에 걸쳐 채용되었기 때문이다.

  iBatis는 XML을 사용해서 SQL 구문의 입력과 출력을 정의한다. iBatis는 파라미터와 실행 결과를 객체의 프로퍼티로 매핑하게 한다.

 

<select id="categoryById"

   parameterClass="string" resultClass="category">

          SELEC PRODUCTID, NAME, DESCRIPTION, CATEGORY

          FROM PRODUCT

          WHERE CATEGORY = #categoryId#

</select>

 

  SQL이 XML 요소로 둘러싸여 있다. 이것이 SQL을 캡슐화한 것으로 단순한 <select>요소가 SQL 구문의 이름과 파라미터 입력 타입과 결과 출력 타입을 정의하고 있다. SQL을 외부로 빼고 캡슐화함으로써 간결함과 일관성을 모두 이루어냈다.