1. MyBatis
- [설명]
- JDBC를 사용할때 sql문이 코드에 섞여 있었고, 만들어 요청하는 과정에서 sql문 생성시 String을 붙이고 자르는 등의 작업이 필요해 이를 분리해서 관리하고자 하여 등장하였습니다
- [특징]
- SQL실행결과를 Java Bean or Map Object에 Mapping해주는 Persistence 솔루션으로 관리를 하고 SQL을 Source Code가 아닌 XML로 분리합니다
- SQL문과 프로그래밍 코드를 분리해서 구현합니다
- 데이터 소스 기능과 트랜잭션 처리 기능을 제공합니다
- [장점]
- 접근이 쉽고 코드가 간결합니다
- SQL문과 프로그래밍 코드가 분리되어 있어서 SQL문에 변경이 있을 때마다 Java코드를 수정하거나 컴파일 하지 않아도 됩니다
- 다양한 프로그래밍 언어로 구현이 가능합니다
- [단점]
- 스키마 변경시 SQL Query를 직접 수정해줘야합니다
- 반복된 Query가 발생하여 반복 작업이 있습니다
- Query를 직접 작성하기 때문에 DB에 종속된 Query문이 발생할 수 있습니다
- DB 변경시 로직도 함께 수정해줘야 합니다
2. JPA
- [설명]
- ORM 기술에 대한 API 표준 명세입니다
- 구현된 Class와 Mapping을 해주기 위해 사용되는 프레임워크 입니다
- *ORM(Object Relational Mapping)
- Class와 RDB(Relational DataBase)의 테이블을 매핑하는 뜻이며 객체를 RDB 테이블에 자동으로 영속화 해준다는 의미입니다
- 구현체로는 Hibernate, EclipseLink, Data Nucleus가 있으며 Hibernate가 가장 대중적입니다
- [장점]
- Query를 하나하나 작성할 필요가 없어 코드량이 줄어듭니다
- 가독성이 좋습니다
- 간편하게 수정이 가능합니다(유지보수, 리팩토링 용이함)
- 동일한 Query에 대한 Cash기능을 사용하기 때문에 더욱 높은 성능을 낼 수 있습니다
- [단점]
- Mapping설계를 잘못했을 때 성능 저하가 발생 할 수 있습니다
- JPA를 제대로 사용하려면 알아야할 것이 많아서 학습하는데 시간이 오래걸립니다
- 다수의 테이블 조인시 신경써야 할 것이 많습니다