JPA 그리고 Mybatis

SoHEeeeeee·2023년 8월 23일
0

백엔드 기술면접을 위해 질문 모음 리스트를 보았다.
첫번째로 등장한 건 JPA.
근데 너무 낯설었다. 나 왜 JPA 몰라..?

알고보니 그동안 내가 다루었던 건 Mybatis여서 JPA에 대해 몰랐던 것이다.

일단 이 개념을 알기 전에 알아야 하는 개념은 '프레임워크'이다.

프레임워크란, 어느 정도 구현되어 있는 틀을 가지고 그 안에서 기능을 구현할 수 있도록 여러 가지 기능을 제공하는 소프트웨어이다.
(*프레임워크 안에 라이브러리가 포함되어있다.
라이브러리 : 소프트웨어 개발에 필요한 기능들을 재사용하기 편리하게 미리 만들어 놓은 도구)

데이터의 저장, 조회, 변경, 삭제를 다루는 클래스 및 설정 파일을 제공하는 프레임워크로 Mybatis, Hibernate, JPA가 있는 것이다.

더 쉽게 표현하자면 JAVA에서 DB의 데이터를 가져와 객체로 만들 수 있는 기술이다.


⬛ MyBatis: MyBatis는 SQL 매핑 프레임워크로, SQL 쿼리를 XML이나 어노테이션을 사용하여 정의하고, 자바 객체와 결과를 매핑합니다. 개발자가 직접 SQL을 작성하고 관리하는 형태로, SQL에 더 직접적인 접근이 가능합니다.

⬛ Hibernate: Hibernate는 JPA 스펙을 구현한 ORM 프레임워크 중 하나로, 자바 객체와 데이터베이스 간의 매핑을 자동으로 처리해줍니다. 개발자가 SQL을 작성하지 않고도 객체 지향적인 코드를 사용하여 데이터베이스 작업을 수행할 수 있습니다.

⬛ JPA: JPA는 Java Persistence API의 약자로서, 객체-관계 매핑을 위한 자바 스펙입니다. JPA 스펙을 준수하는 여러 ORM 프레임워크가 있으며, Hibernate가 그 중 하나입니다. JPA는 특정 ORM 프레임워크에 종속되지 않는 표준 인터페이스를 제공하여 개발자가 다양한 ORM 구현체 중에서 선택할 수 있도록 합니다.


잠깐, 여기서 자주 등장하는 ORM은 대체 뭐야..

ORM은 "객체-관계 매핑(Object-Relational Mapping)"의 약자입니다. 이것은 프로그래밍에서 객체 지향 언어와 관계형 데이터베이스 사이의 간극을 줄이기 위한 기술입니다.

간단히 말하면, 객체 지향 프로그래밍에서는 클래스와 객체를 사용하여 데이터와 기능을 구조화하고 표현하는 반면, 관계형 데이터베이스는 테이블과 행으로 데이터를 저장하고 관리합니다. 이 두 가지 사이에는 구조와 표현 방식에 차이가 있어서 데이터를 객체로 사용하기 위해서는 데이터베이스의 데이터를 객체로 변환하거나 반대로 객체를 데이터베이스에 저장하는 작업이 필요합니다.

ORM은 이러한 작업을 도와줍니다. 객체-관계 매핑을 사용하면 데이터베이스의 테이블과 행을 자동으로 자바 클래스와 객체로 매핑시켜줍니다. 즉, 데이터베이스의 데이터를 가져와서 자바 객체로 만들거나, 자바 객체를 데이터베이스에 저장할 때 발생하는 번거로운 작업들을 자동으로 처리해줍니다.

이를 통해 개발자는 SQL 쿼리를 직접 작성하는 대신에 객체 지향적인 방식으로 데이터를 다룰 수 있고, 데이터베이스 스키마 변경에 유연하게 대처할 수 있게 됩니다. ORM은 개발 생산성을 향상시키고 코드의 가독성을 높이며, 데이터베이스와의 상호 작용을 더욱 간편하게 만들어줍니다.


정리
⬛ MyBatis의 장점:

SQL 제어: 개발자가 직접 SQL 쿼리를 작성하고 컨트롤할 수 있어 복잡한 쿼리나 특수한 조건을 다루기 용이합니다.
직접적인 데이터베이스 제어: 개발자가 데이터베이스와의 상호 작용을 높은 수준으로 직접 제어할 수 있습니다.
높은 유연성: 다양한 데이터베이스 관련 작업을 커스터마이징하여 처리할 수 있습니다.

⬛ MyBatis의 단점:

복잡한 매핑: 객체와 데이터베이스 간의 매핑 작업을 직접 처리해야 하므로 반복적이고 복잡한 작업이 늘어날 수 있습니다.
유지보수 어려움: 매핑 설정이 코드와 별개로 분산되어 있어 유지보수가 어려울 수 있습니다.
SQL 작성 필요: 각각의 SQL을 작성해야 하기 때문에 개발자가 직접 SQL에 익숙해야 합니다.

⬛ JPA의 장점:

객체 지향적 접근: 데이터베이스 작업을 객체 지향적인 방식으로 다룰 수 있어 코드의 가독성과 유지보수가 용이합니다.
자동 매핑: 객체와 데이터베이스 간의 매핑 작업을 JPA가 자동으로 처리해주어 빠른 개발이 가능합니다.
데이터베이스 독립성: JPA는 데이터베이스 종속성을 줄여주어 데이터베이스 변경에 유연하게 대처할 수 있습니다.

⬛ JPA의 단점:

복잡한 쿼리 처리 어려움: 복잡한 조인이나 특수한 쿼리 작업은 JPA에서 처리하기가 어려울 수 있습니다.
성능 이슈: 특정한 최적화 작업을 직접 수행하기 어려워 성능 이슈가 발생할 수 있습니다.


결론
mybatis는 sql문을 직접 작성하여 db에 접근하고 데이터를 객체화 시킨다.
즉, 쿼리 수행 결과를 객체와 매핑시킨다.
JPA는 쿼리를 직접 만들지 않아도 된다. 객체 중심이기 때문에 유지보수가 편리하다.
단, 복잡한 쿼리의 해결이 어렵고 가독성 및 유지보수가 어렵다.

profile
주니어 개발자

0개의 댓글