학원에서 팀프로젝트를 진행할 때 MyBatis 방식으로만 배워서 당연하게 그렇게 진행했는데 요즘은 JPA를 많이 쓴다고 해서 수료 후 김영한님 강의를 들으며 JPA로 개인 프로젝트를 진행했었다. 그래서 서로 비교하여 정리하는 글을 쓰려고한다.
그 전에 ORM에 대해서 먼저 알아야한다.
ORM : Object Relation Mapping
MyBatis는 ORM 프레임워크가 아니다. MyBatis는 SQL을 직접 작성하여 데이터베이스와 상호 작용하고, 그 결과를 자바 객체에 매핑하는데 사용한다. MyBatis는 SQL과 자바 객체 간의 매핑을 XML 파일이나 어노테이션을 통해 정의하고, 개발자가 SQL에 대한 제어를 갖는다. 그래서 JPA보다 SQL을 좀 더 이해하고 작성할 수 있는 능력이 필요하다.
public interface UserMapper {
@Select("SELECT * FROM users WHERE id = #{id}")
User findById(int id);
}
public interface UserMapper {
@Insert("INSERT INTO users (name, email) VALUES (#{name}, #{email})")
@Options(useGeneratedKeys = true, keyProperty = "id")
int insert(User user);
}
JPA는 ORM 프레임워크이다. JPA는 객체와 데이터베이스 간의 매핑을 위한 규칙을 정의하고, 개발자가 객체를 데이터베이스 테이블에 저장하고 조회하는 작업을 간단하게 만든다. JPA는 SQL 쿼리를 JPQL, QueryDSL 등을 사용하여 객체를 쿼리한다. 이를 통해 데이터베이스와 상호 작용을 단순하게하고 개발자가 객체 중심의 설계를 함으로써 개발 생산성을 높인다.
JPA는 JpaRepository<엔티티, 타입> 을 상속하면 CRUD는 정해진 문법에 따라 사용가능하다.
public interface UserRepository extends JpaRepository<User, Integer> {
Optional<User> findById(Integer id);
}
public interface UserRepository extends JpaRepository<User, Integer> {
User save(User user);
}
나는 JPA 방법이 좀 더 객체지향적인 방법이고 간결해서 사용하기 더 편했지만,
SQL의 능력도 필요하기 때문에 결국 둘 다 사용할 줄 알아야 되는 것 같다.