코드 그라데이션
ORM에 대한 궁금증과 오해 본문
자바 ORM 표준 JPA 프로그래밍(김영한 저) 책의 QnA 파트 괄년 내용을 그대로 가져왔다.
유의해서 JPA 공부에 활용하려구...
Q1. ORM 프레임워크를 사용하면 SQL과 Database는 잘 몰라도 되나요?
A1.
No. ORM 프레임워크가 애플리케이션을 객체지향적으로 개발할 수 있도록 도와주긴 하지만
데이터는 결국 관계형 데이터베이스에 저장된다. 테이블 설계는 여전히 중요하고 SQL도 잘 알아야 한다.
그리고 ORM 프레임워크를 사용할 때 가장 중요한 점은 객체와 테이블을 매핑하는 것이다.
매핑을 올바르게 하려면 객체와 관계형 데이터베이스 양쪽을 모두 이해해야 한다.
따라서 데이터베이스 테이블 설계나 SQL을 잘 몰라서 ORM 프레임워크를 사용한다는 것은 ORM의 본질을 잘못 이해한 것이다.
Q2. 성능이 느리지 않나요?
A2.
SQL을 직접 사용할 때보다 더 좋은 성능을 낼 수도 있다.
또한 JPA의 네이티브 SQL 기능을 사용해서 SQL을 직접 호출하는 것도 가능하다.
하지만 JPA를 잘 이해하지 못하고 사용하면 N+1 같은 문제로 인해 심각한 성능 저하가 발생할 수 있다.
여기서 말하는 N+1 문제는 예를 들어 SQL 1번으로 회원 100명을 조회했는데 각 회원마다 주문한 상품을 추가로 조회하기 위해 100번의 SQL을 추가로 실행하는 것을 말한다.
한 번 SQL을 실행해서 조회한 수 만큼 N번 SQL을 추가로 실행한다고 해서 N+1 문제라고 한다.
JPA를 조금이라도 공부하면 어렵지 않게 해결할 수 있다.
Q3. 통계 쿼리처럼 매우 복잡한 SQL은 어떻게 하는가?
A3.
JPA는 통계 쿼리 같이 복잡한 쿼리보다는 실시간 처리용 쿼리에 더 최적화되어 있다.
상황에 따라 다르지만 정말 복잡한 통계 쿼리는 SQL을 직접 작성하는 것이 더 쉬운 경우가 많다.
따라서 JPA가 제공하는 네이티브 SQL을 사용하거나 MyBatis나 스프링의 JdbcTemplate 같은
SQL 매퍼 형태의 프레임워크를 혼용하는 것도 좋은 방법이다.
Q4. MyBatis와 어떤 차이가 있는가?
A4.
머아바티스나 스프링 JdbcTemplate을 보통 SQL 매퍼라고 한다.
객체와 SQL을 매핑한다.
따라서 SQL과 매핑할 객체만 지정하면
지루하게 반복되는 JDBC API 사용과 응답 결과를 객체로 매핑하는 SQL 매퍼가 대신 처리해준다.
이런 SQL 매퍼가 편리하긴 하지만 결국 개발자가 SQL을 직접 작성해야 하므로 SQL에 의존적인 개발을 피랗 수 없다.
반면에 ORM은 객체와 테이블을 매핑만 하면
ORM 프레임워크가 SQL을 만들어서 데이터베이스와 관련된 처리를 해주므로, SQL에 의존하는 개발을 피할 수 있다.
Q5. 학습 곡선이 높다고 하던데?
A5.
학습곡선이 높은 편이다.
JPA를 사용하려면 객체와 관계형 데이터베이스를 어떻게 매핑하는지 학습한 후에 JPA의 핵심 개념들을 이해해야 한다.
JPA가 어려운 근본적인 이유는 ORM이 객체지향과 관계형 데이터베이스라는 두 기둥 위에 있기 때문이다.
'Spring > JPA 공부' 카테고리의 다른 글
JPQL - 기본 문법과 기능 (0) | 2023.08.29 |
---|---|
실전 예제 6. 값 타입 매핑 (0) | 2023.08.28 |
값 타입 컬렉션 (0) | 2023.08.27 |
값 타입의 비교 (0) | 2023.08.27 |
값 타입과 불변 객체 (0) | 2023.08.26 |