상세 컨텐츠

본문 제목

iBatis vs Stored Procedure (Oracle, MySQL, MS-SQL)

Java

by 탑~! 2012. 9. 6. 11:30

본문

iBatis vs Stored Procedure


Java 언어에서 JDBC를 통하여 DB상에서 DML을 실행하는 방법에는 Statement, PreparedStatement, CallableStatement 이렇게 세가지가 있다. 


  1. Statement는 이제 아무도 사용하지 않는다. 그 이유는 긴 Query를 편집하기에 굉장히 불편하고 무엇보다 SQL인젝션 공격에 대비하기 위해서 손이 많이 가기 때문이다. 모든 파라메터를 결국 String형태로 조립하는 방식인데 큰따옴표, 작은따옴표 그리고 + 기호 까지 소스의 가독성을 엄청나게 떨어뜨리고 개발자의 머리를 복잡하게 만드는 방식이다.
  2. PreparedStatement는 좀 더 세련된 방식으로 성능과 가독성이 Statement 보다 좋은 방식이다. iBatis는 이 PareparedStatement를 활용하여 자바 코드와 SQL문을 분리한 프레임웍이다. SQL문을 XML에 작성해 놓고 변수와 매핑될 부분을 표시한 다음 런타임에 PreparedStatement를 생성하고 Java에서 넘겨준 변수와 ?를 매핑하여 DB에 전달하고 수행한 이후에 오브젝트 혹은 오브젝트 리스트에 결과를 담아서 돌려준다.
  3. CallableStatement는 DB에 이미 컴파일되어 저장되어 있는 Stored ProcedureStored Function등을 실행하기 때문에 셋 중 가장 나은 성능을 보여준다. SQL문이 DB에 존재하기 때문에 JAVA에서는 변수만 전달하면 된다.


iBatis가 각광받을 수 있었던 것은 한창 유행이 되었던 MVC Framework시절(2000년대 초반) 역할별로 Layer를 분리하던 차에 Java Programmer와 DB Specialist가 각자의 역할을 할 수 있도록 할 수 있었기 때문인데 실은 Java code안에 따옴표로 들어있는 PreparedStatement가 많이 거슬렸던 것이다. 

MVC Framework이란 한창 UI와 Logic을 분리하는 것이 정석이라고 우기던 시절, 스크립트릿(<%%>) 이 HTML Tag와 섞여 있는 것도 불편해 하던 시절 JSTL, EL등과 함께 JSP Model2 라는 이름으로 등장하여 지난 10년간 Java web 개발 영역에서 마치 표준인 것 처럼 군림했던 기술이다. Struts, Spring 등이 그 산물이다. 대한민국의 전자정부 프레임워크 라는 것도 그 범주를 벗어나지 않는다. 

iBatis 와 Stored Procedure 비교에 있어 결론은 iBatis는 나쁘고 Stored Procedure는 좋다. JAVA code와 SQL의 분리라는 취지에서 보면 iBatis보다는 Stored Procedure가 훨씬 간결하고 깔끔하게 분리해 낼 수 있도록 되어 있으므로 그 부분은 비교할 가치조차 없다.

  1. iBatis가 나쁜점
    1. 사용하기 위해서 할 일이 너무 많다. (Object화 하겠다는 취지하에 get/set 하다 볼일 다본다. 범용 Map으로 손이 가는 부분을 줄일 수 있다 하지만 이래하나 저래하나 성능 오버헤드가 존재한다.)
    2. SQL 변화가 있으면 XML을 수정하고 서비스를 중단하고 재기동 해야한다.
    3. 네트워크에 좀 더 부담이 된다.
    4. 디버깅하려면 로그를 캡쳐하여 일일이 파라메터 매핑을 하여 결국 Toad, Orange같은 DB툴에 붙여넣기하여 디버깅 한다. (LogablePreparedStatement란 것이 있지만 Proxy Pattern으로 개발되어 있어 엄밀하게 따지면 모든 메서드 호출시 스텍에 파라메터와 리턴 어드레스를 담는 리던던시가 존재한다.)
  2. Stored Procedure가 좋은 점
    1. 해당 Stored Procedure만 독립적으로 기능을 수행하므로 별도의 설정이 필요치 않다.
    2. 서비스 중단 및 재기동 없이  DB툴을 활용하여 순식간에 수정 및 테스트 가능하다.iBatis의 경우에는 단독으로 테스트가 불가하고 Java에서 호출해봐야한다.
    3. 네트워크에 부담이 덜하다.
    4. 디버깅이 쉽다.


그 뿐만 아니라 Stored Procedure를 활용하면 WEB개발시 WAS에서 동작하는 Java쪽 code가 간결해지고 재활용성이 높은 코드 제작이 가능해 진다.


아래 링크는 소화님의 블로그인데, 

iBatis를 사용하면 도대체 얼마나 많은 군더더기 작업을 해야하는지 잘 보여준다. 정말 많은 일을 해야한다. 


http://blog.naver.com/shreds?Redirect=Log&logNo=155263102


대한민국의 많은 젊은 개발자들이 이 iBatis 때문에 잃어버린 시간이 얼마인가?


출처 : http://blog.naver.com/simjinhyun?Redirect=Log&logNo=110146534820



PS. 처음 iBatis 를 보고 짜증이 확~~ 밀려왔음.

관련글 더보기