마이바티스 사용이유
마이바티스란?
마이바티스는 퍼시스턴스계층 (데이터처리계층)의 프레임워크로
정형화된 테이블 구조에 의존하지 않고 sql구문의 실행결과에 객체를 매핑하는 방식이다.
테이블 구조가 복잡해지고 정규화 되 있지 않아도 테이블을 변경할 필요 없이 기존 개발방법에서 사용한
sql을 그대로 사용할 수가 있고
sql에 적용한 튜닝들도 모두 그대로 유지된다.
작동흐름
- 데이터처리를 위해 DAO는 MYBATIS에 제공하는 객체의 메서드를 호출한다
- 마이바티스는 SQL문이 저장된 맵퍼 파일에서 데이터 처리에 필요한 SQL문을 찾는다.
- 마이바티스는 맵퍼 파일에서 찾은 SQL을 서버에 보내고자 JDBC드라이버를 사용
- JDBC드라이버는 SQL문을 DB서버로 보낸다.
- 마이바티스는 SELECT문의 실행 결과를 값 객체에 담아서 반환.
INSERT UPDATE DELETE문인경우 입력 변경 삭제된레코드의 개수 반환.
(오라클 기준)
애플리케이션에서 DB 접속할 때 마다 DB쪽에서도 1:1로 프로세스가 생성됩니다. 예를 들어, 클라이언트 100개가 접속하면 오라클 서버 쪽에도 100개의 프로세스가 생성되는 식이죠. 문제는 오라클 서버 프로세스 생성하는 게 상당한 오버헤드를 일으킬 수 있습니다. 무엇보다 자원 재사용이 안되니까요.
그래서 나온게 커넥션 풀링(connection pooling)입니다. 미리 DB 연결을 맺어두고 그 pool 내에서 필요할 때 꺼내서 사용하고 반환하는 식이죠. 물론 접속이 늘어나면 커넥션 풀에서 자동으로 DB 접속 세션 수를 늘립니다.
mybatis나 ibatis가 커넥션 풀링 기능만 제공하는 건 아니에요. 말씀하신 것처럼 웹로직이나 다른 WAS에서도 기본적으로 제공하는 기능입니다.
단순히 커넥션 풀링 때문에 프레임워크를 쓰는 건 아니고요.
그리고 JSP나 ASP 코딩해보셨으면 아시겠지만, 자바 코드 내에 HTML 태그하고 SQL 쿼리가 짬뽕되면 가독성이나 유지보수성이 현저히 떨어집니다. JAVA 코드 내에 SQL을 문자열 +해서 짠 코드 보신적 있으시죠? SQL이 조금만 길어지고 복잡해져도 눈돌아갑니다.
그래서 이걸 분리하려는 움직임이 생긴거죠. 그러면 가독성이나 유지보수 시 상당히 편리해집니다. 생산성은 곧 비용과 직결되죠.
1. 가장 큰 이유는 빠른 개발(생산성)이 가능합니다.
- DBCP만을 썼을때 Connection, ResultSet, Statement, Transaction 관리도 해야 하고
- 특히 운영하다 명시적인 Connection, ResultSet, Statement, Transaction을 잘못(닫질 않아) 써서 서버가 죽는경우 허다합니다.
- ResultSet의 데이터 매핑도 신경써야 하고
- 소스코드가 하드코딩(""+""+"")되어 있음 소스 분석 및 관리가 힘듭니다. (10,000 라인 넘어가는 소스 한번 보믄 이해하실겁니다. )
2. 보안적으로 SQL Injection 보안에 신경쓰지 않아도 됩니다.
- 물론 DBCP를 쓸 경우 PrepareStatement 쓰믄 문제 없지만
3. RDBMS가 Oracle일 경우 Blob, Clob 치환에 신경쓰지 않아도 됩니다.
4. 디버깅이 쉬워집니다.
- iBatis, myBatis 쿼리문의 ? => value로 매핑된 쿼리문으로 로그를 남기는 jar파일이 여럿 있습니다.
5. 데이터 캐싱(LIFO,FIFO, LRU)이 가능합니다.
- 조회용 데이터 성능이 안나올 때 데이터 캐싱 설정만으로 훌륭한 성능 개선을 할 수 있습니다.
- 실제 대규모 사이트에서 적용 사용하고 있음.
- 간단한 xml 설정만으로 적용 가능
6. 꼭 resultType, resultClass로 VO를 사용 않으셔도 됩니다. Map으로만 이용 가능
참고 - https://okky.kr/article/285215
'WEB > 이론' 카테고리의 다른 글
spring mvc 동작방식 (0) | 2017.03.22 |
---|---|
jdbc와 마이바티스 (0) | 2017.03.21 |
스프링 MVC 구조와 MVC1패턴과 2패턴의 차이. (0) | 2017.03.20 |
web.xml (0) | 2017.01.18 |