[Java] JPA란? JPA 와 MyBatis 의 차이점

JPA(Java Persistence API) 란?

JPA는 ORM의 기술 표준이며, 위키백과에서는 아래와 같이 설명하고 있다.

자바 퍼시스턴스 API 또는 자바 지속성 API(Java Persistence API, JPA)는 자바 플랫폼 SE와 자바 플랫폼 EE를 사용하는 응용프로그램에서 관계형 데이터베이스의 관리를 표현하는 자바 API이다.

쉽게 설명하면 Java 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용하는 인터페이스 모음이다.

즉 실제로 무언가 동작하는것이 아니며, JAP 인터페이스를 구현한 대표적인 오픈소스 중 Hibernate 가 있다.


ORM(Object-relational mapping) 이란?

데이터베이스와 객체 지향 프로그래밍 언어 간의 호환되지 않는 데이터를 변환하는 프로그래밍 기법이다. 객체 지향 언어에서 사용할 수 있는 “가상” 객체 데이터베이스를 구축하는 방법이다.

즉, Object 와 DB 테이블을 매핑하여 데이터를 객체화 하는 기술이다.
개발자가 직접 SQL 을 작성하지 않아도 된다. 여기서 오는 장점과 단점이 존재한다. 처음 접하게 되면 러닝커브가 높고, DB 설계도를 보며 직접 엔티티를 생성해줘야 한다.(Entity 는 Db의 Table이라고 생각하면 된다.)

복잡한 쿼리가 사용되어야 할 경우에는 결국 SQL 을 작성해야 될 수 있다.

그렇다면 장점은 무엇일까?
그렇다. 객체지향적인 코드 작성이 가능해진다. 이로인해 생산성이 줄어들고, 매핑하는 정보가 Class 로 명시되었기 때문에 의존도가 낮아지고 유지보수와 리팩토링에 유리하다.


MyBatis 란?

이건 많이 경험했을거라고 생각한다.

Mapper 파일에 직접 SQL을 작성하여, DAO 에서 호출하는 방법으로 많이 사용하고, 자바에서 SQL Mapper 를 지원해주는 프레임워크 이다.


SQL Mapper 란?

Object 와 SQL 의 필드를 매핑하여 데이터를 객체화 하는 기술이다. (JDBC를 보다 편하게 사용하기 위해 개발됨.)


뭘 써야할까?

사실 정답은 없다. 각각의 장단점이 있기 떄문에

하지만 본인이라면 연관 관계가 복잡한 Entity 를 모두 생성 할 수 있다면 JPA 와 MyBatis 를 함께 사용하고, 아니라면 MyBatis 를 선택하는게 나을 수 있다고 생각한다.
실무에서는 보통 스케줄에 쫓겨 개발하고, 기획이 바뀌는 상황이 허다하기 때문이다.

만약 개인 프로젝트라면 경험을 해보는 것은 몹시 중요하기 때문에 사용해보길 추천한다. JPA 를 사용하면 연관 관계 설정 시 발생하는 에러가 생각보다 많고, 이로 인해 내가 얻어갈 수 있는것도 많기 때문이다.

구글 트랜드 조사에 따르면, 동아시아를 제외한 대부분의 나라에서는 JPA를 압도적으로 많이 사용한다. (링크에서 확인 가능하며 이미지를 첨부하면 아래와 같다.)

https://trends.google.co.kr/trends/explore?date=all&q=JPA,%2Fm%2F0fqmvs4

GIT


Tags:

Updated:

Leave a comment