1. MyBatis

  1. [설명]
    1. JDBC를 사용할때 sql문이 코드에 섞여 있었고, 만들어 요청하는 과정에서 sql문 생성시 String을 붙이고 자르는 등의 작업이 필요해 이를 분리해서 관리하고자 하여 등장하였습니다
  2. [특징]
    1. SQL실행결과를 Java Bean or Map Object에 Mapping해주는 Persistence 솔루션으로 관리를 하고 SQL을 Source Code가 아닌 XML로 분리합니다
    2. SQL문과 프로그래밍 코드를 분리해서 구현합니다
    3. 데이터 소스 기능과 트랜잭션 처리 기능을 제공합니다
  3. [장점]
    1. 접근이 쉽고 코드가 간결합니다
    2. SQL문과 프로그래밍 코드가 분리되어 있어서 SQL문에 변경이 있을 때마다 Java코드를 수정하거나 컴파일 하지 않아도 됩니다
    3. 다양한 프로그래밍 언어로 구현이 가능합니다
  4. [단점]
    1. 스키마 변경시 SQL Query를 직접 수정해줘야합니다
    2. 반복된 Query가 발생하여 반복 작업이 있습니다
    3. Query를 직접 작성하기 때문에 DB에 종속된 Query문이 발생할 수 있습니다
    4. DB 변경시 로직도 함께 수정해줘야 합니다

2. JPA

  1. [설명]
    1. ORM 기술에 대한 API 표준 명세입니다
    2. 구현된 Class와 Mapping을 해주기 위해 사용되는 프레임워크 입니다
      1. *ORM(Object Relational Mapping)
        1. Class와 RDB(Relational DataBase)의 테이블을 매핑하는 뜻이며 객체를 RDB 테이블에 자동으로 영속화 해준다는 의미입니다
    3. 구현체로는 Hibernate, EclipseLink, Data Nucleus가 있으며 Hibernate가 가장 대중적입니다
  2. [장점]
    1. Query를 하나하나 작성할 필요가 없어 코드량이 줄어듭니다
    2. 가독성이 좋습니다
    3. 간편하게 수정이 가능합니다(유지보수, 리팩토링 용이함)
    4. 동일한 Query에 대한 Cash기능을 사용하기 때문에 더욱 높은 성능을 낼 수 있습니다
  3. [단점]
    1. Mapping설계를 잘못했을 때 성능 저하가 발생 할 수 있습니다
    2. JPA를 제대로 사용하려면 알아야할 것이 많아서 학습하는데 시간이 오래걸립니다
    3. 다수의 테이블 조인시 신경써야 할 것이 많습니다