Search
✔️

[JPA] SQL Mapper와 ORM의 차이

우리가 개발을 하면서 메모리에 일회성으로 저장되었다가 사라지는 정보들도 있지만 데이터베이스에 저장을 함으로써 영속성을 부여해야 하는 정보들도 있다.(ex. 사용자 정보, 결제 내역 등등..)
정보들을 데이터베이스에 저장하는 것을 영속성을 부여한다고 볼 수 있는데 Java에서 영속성을 부여하는 방법은 크게 위의 이미지처럼 SQL MapperORM을 이용하는 두 가지 방법이 있다.

SQL Mapper

SQL Mapper는 XML이나 어노테이션 등을 사용해서 SQL을 작성해서 JDBC API를 이용하여 데이터베이스에 접근해서 데이터에 영속성을 부여하는 기술이다. SQL Mapper의 대표적인 기술으로는 Mybatis가 있다.

장점

1.
SQL을 직접 짜기 때문에 디버깅에 용이하다.
2.
SQL작성이 익숙한 개발자에게는 명확하고 직관적인 방식이다.

단점

1.
DBMS마다 쿼리를 다르게 짜야한다
2.
개발자가 개발에 좀 더 집중할 수 없다.

ORM

ORM은 데이터베이스와 객체를 매핑 해주는 기술이다. DB의 테이블과 객체가 매핑 되어 SQL문을 일일이 작성하지 않고 객체로 구현이 가능한 기술이다.
ORM은 CRUD를 위한 SQL쿼리를 메소드를 통해서 실행이 가능하며, 이 때문에 개발자는 직접 쿼리를 짤 필요가 없이 좀 더 개발에 집중할 수 있다는 장점이 있다.

장점

1.
SQL을 직접 작성하지 않기 때문에 개발 생산성이 향상된다.
2.
데이터베이스가 변경되어서 쿼리 문법이 달라져서 ORM 설정만 바꿔주면 문제 없이 실행이 가능하다.
3.
SQL쿼리 자동 생성을 통해 SQL Injection 같은 보안 문제를 예방할 수 있다.

단점

1.
여러 테이블이 조인될 때 최적화되지 않은 쿼리 실행을 통해 성능이 저하될 수 있다.
2.
ORM은 객체 지향 설계에 집중하기 때문에 최적의 데이터베이스 설계가 되지 않을 가능성이 있다.
물론 ORM에서도 직접 쿼리를 작성할 수 있는 대안이 있기 때문에 단점이 어느 정도 커버는 가능하다.