데이터를 다른 곳에 저장하고 사용하기 때문에 프로그램을 종료해도 데이터는 사라지지 않는다. 이런 개념을 영속성(Persistence)을 가진다고 표현한다.
Java는 데이터에 접근하기 위해 JDBC(Java Database Connectivity) API를 제공해준다. 하지만 기존의 JDBC API는 코드가 길고 반복될 뿐 아니라 SQL 문의 수정이 필요할 경우 Java 코드를 수정해야 하기 때문에 좋지 않다.
그래서 JDBC API가 가지는 문제점을 해결하기 위해 Persistence Framework가 나타나게 된 것이다.
Persistence Framework는 Java의 관계형 데이터베이스 프로그래밍을 좀 더 쉽게 도와주는 틀이다.
Persistence Framework에는 SQL Mapper와 ORM(Object Relational Mapping)이 있다.
▷ SQL Mapper (ex. Mybatis)
- SQL문과 객체를 매핑.
- SQL문을 사용하여 DB에 접근하고 데이터를 객체화시켜줌.
- 개발자가 직접 SQL문을 작성해야 하고 SQL 문의 결과를 객체화시켜 사용 가능하게 해 줌.
- 그래서 RDBMS에 따라 SQL 문의 작성법이 바뀌기 때문에 DB에 종속적임.
- Mybatis
특징
- 개발자가 지정한 SQL, 저장 프로시저 그리고 고급 매핑을 지원하는 Persistence Framework.
- 기존 JDBC로 처리하는 많은 부분의 코드와 파라미터, 결과 매핑을 지원.
- SQL문을 xml에 저장하여 Java 코드와 분리 가능 → 좋은 가독성.
장점
- SQL문을 직접 작성하므로 최적화된 SQL문을 작성 가능.
- 다양한 테이블을 조합 가능.
- SQL문을 직접 작성하므로 복잡한 SQL문도 손쉽게 작성 가능.
- 동적 쿼리 작성이 용이함.
단점
- 런타임 시에 오류를 확인할 수 있다.
- Schema 변경 시 SQL문을 직접 수정해야 한다.
- SQL Mapper의 종류이기 때문에 DBMS의 종류에 따라 SQL문 작성법이 달라짐 → 특정 DBMS에 종속적이므로 DBMS 변경 시 SQL문을 수정해야 하는 일이 발생.
- 객체와 SQL문을 관리해야 하고, CRUD 메서드를 구현해야 함.
▷ ORM (ex. JPA)
- 객체와 DB의 테이블을 매핑하여 데이터를 객체화하는 기술
- ORM는 SQL문이 아닌 데이터 자체와 매핑하기 때문에 SQL문을 직접 작성할 필요가 없음.
- 해당 객체와 매핑에 필요한 SQL문을 직접 만들어주기 때문에 DB에 종속적이지 않음.
- JPA (Java Persistence API)
특징
- Java ORM의 표준 기술 → ORM을 사용하기 위한 인터페이스를 모아둔 것.
- DB의 정보가 변경될 경우 객체만 수정해주면 됨 → 객체 중심 개발이 가능.
- CRUD 메서드 기본 제공.
- 복잡한 SQL문 작성은 어려움.
- 오픈 소스로는 hibernate
장점
- DBMS에 종속적이지 않아 DBMS를 변경해도 코드 재활용이 가능함.
- 기본적인 CRUD 메서드를 제공하여 비즈니즈 로직에 더 집중할 수 있음.
- 컴파일 타임에서 오류를 확인 가능.
- Entity로 관리되므로 Schema 변경 시 Entity만 수정하면 관련 SQL문은 자동으로 변경되어 관리됨.
단점
- Mybatis에 비해 SQL문을 직접 작성하지 않아 복잡한 SQL문 작성이 어려움.
- 학습에 난이도가 Mybatis에 비해 높음.
JPA와 Mybatis 중 누가 더 좋은 기술인가?
JPA는 ORM 기술을 사용하고 Mybatis는 SQL Mapper 기술을 사용한다.
그래서 어떤 기술이 더 좋다고 비교할 수 없다. JPA와 Mybatis는 각각 장점과 단점이 있으니 상황에 따라 적용해야 한다고 생각한다.
마지막으로 JPA와 Mybatis의 동향을 보고 마무리하자!
시간 흐름에 따라 관심도 변화를 전 세계를 기준으로 뽑아낸 데이터이다. JPA가 높은 관심도를 보이는 것을 알 수 있다.
우리나라도 최근에 JPA의 관심도가 살짝 높아진 것을 알 수 있다. Mybatis는 공공기관 사업에서 많이 사용하니까 높은 관심도가 나타난 것이고 JPA의 관심도가 높아진 만큼 JPA의 공부를 해야 할 필요성을 느낄 수 있다.
지역별 비교 분석을 보면 동아시아에서 유독 Mybatis에 대한 높은 관심을 보이고 있다.
결론적으로 JPA와 Mybatis는 어느 것이 우위에 있다고 비교할 수 없지만 전 세계적으로 JPA에 대한 높은 관심도를 보여주고 있고 최근에 우리나라에서도 JPA의 대한 관심도가 높아지고 있으니 JPA의 대한 학습이 필요하다고 정리할 수 있다.
▽ 도움을 주신 분들
'Mybatis' 카테고리의 다른 글
[Mybatis] ${}와 #{}의 차이가 뭘까? (0) | 2022.07.14 |
---|---|
[Mybatis] 동적 쿼리에 대해 알아보자 (0) | 2022.07.13 |
[Mybatis] CDATA가 뭐지? (0) | 2022.07.12 |