스프링으로 개발을 시작할 때 처음에는 새로고침하거나 프로그램을 다시 실행하면
데이터가 사라지는 사이트를 만들어본 경험이 있을 것입니다.
이 문제를 해결하기 위해 프로그램과 데이터베이스를 연결해야 합니다.
저는 처음 DB를 학습할 때 SQL 쿼리 작성 방법을 배우고
MyBatis를 통해 MySQL과 연결하는 방법으로 프로그램을 만들었습니다.
이때 사용한 MyBatis와 같은 기술을 Persistence Framework라고 합니다.
오늘은 Persistence Framework의 종류를 정리하고 비교해보려고 합니다.
1. Persistence Framework란?
어떤 종류가 있는지 알아보기에 앞서 Persistence Framework가 무엇인지 정리해봅시다.
Persistence = 영속성
프로그램이 종료되더라도 사라지지 않는 데이터의 특성
Persistence Framework
데이터베이스에 데이터를 저장하고 읽어오는 작업을 도와주는 프레임워크
기존에 만들었던 사이트는 영속성이 없어 프로그램이 종료되면 데이터가 사라졌습니다.
이 문제를 해결하기 위해 JDBC를 직접 사용하는 방법도 존재하지만
일반적으로 Persistence Framework를 사용하여
프로그램을 다시 실행하여도 이전의 데이터가 유지되도록 합니다.
Persistence Framework의 종류는 크게 SQL Mapper와 ORM으로 나눌 수 있습니다.
각각에 대해 더 자세히 알아보겠습니다.
2. SQL Mapper
객체와 SQL 필드를 매핑하여 데이터를 객체화하는 기술
JDBC API를 직접 사용할 경우에 발생할 수 있는 반복적인 작업을 자동으로 처리해주어
SQL과 객체를 쉽게 매핑할 수 있도록 도와주는 라이브러리입니다.
대표적으로 MyBatis를 예로 들 수 있습니다.
1) SQL Mapper의 장점
(1) 불필요한 코드를 줄일 수 있습니다.
(2) 복잡한 JOIN, 튜닝과 같은 SQL문을 쉽게 작성할 수 있습니다.
(3) 동적 쿼리 생성에 유용합니다.
2) SQL Mapper의 단점
(1) SQL문을 직접 작성해야 합니다.
(2) DBMS에 종속적입니다.
(3) 비슷한 쿼리를 반복해서 작성해야 합니다.
(4) 객체와 관계형 테이블 구조간의 패러다임이 일치하지 않습니다.
이와 같은 장단점이 존재하여 SQL 쿼리 작성에 익숙한 개발자나
복잡한 쿼리가 필요한 개발 상황에서는 SQL Mapper를 사용하는 것이 좋습니다.
하지만 우리가 모든 상황에서 복잡한 쿼리를 필요로 하지는 않습니다.
특히 단점의 4번, 패러다임의 불일치는
객체 지향 언어인 스프링과 관계형 데이터베이스의 지향점 차이로
SQL 의존도가 높아지게 하는 문제가 있습니다.
3. ORM (Object-Relational Mapping)
객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해 객체간의 관계를 바탕으로 SQL문을 자동으로 생성해주는 기술
ORM의 대표적인 기술에는 JPA가 있습니다.
1) ORM의 장점
(1) 객체지향적 프로그래밍이 가능합니다.
(2) SQL문을 개발자가 직접 작성하지 않아도 됩니다.
(3) 유지보수가 용이합니다.
(4) DBM에 의존하지 않아 핵심 로직 설계에 집중할 수 있습니다.
2) ORM의 단점
(1) 데이터 관계가 복잡하면 구현이 어렵습니다.
(2) 복잡한 SQL문에 대한 처리가 어렵습니다.
(3) 객체와 관계간의 불일치가 발생할 수 있습니다.
ORM의 경우에는 자동 매핑을 통해 SQL문을 작성하지 않고도 RDBMS를 조작할 수 있습니다.
물론 복잡한 SQL문이 필요한 상황에서는 사용이 어려울 수 있습니다.
4. 그래서 둘 중 무얼 배워야해?
두 기술은 모두 장단점이 존재합니다.
이에 개발 환경과 요구사항에 따라 현재 상황에 맞는 기술을 선택해야 할 것입니다.
저는 이미 MyBatis를 활용한 개발에는 익숙하여 이제는 ORM 기술을 익혀보려고 합니다.
앞으로 자바 ORM 기술인 JPA를 Hibernate를 활용해서 익히며 개념을 정리해보겠습니다.
'BackEnd > JPA' 카테고리의 다른 글
[JPA] JPA의 다양한 연관관계 매핑 (다대일, 일대다, 일대일, 다대다) (1) | 2025.02.02 |
---|---|
[JPA] JPA 엔티티 기본 매핑 어노테이션 완벽 정리 (1) | 2024.12.20 |
[JPA]JPA와 영속성 컨텍스트 (1) | 2024.12.17 |
[JPA] SpringBoot + JPA 시작하기 (1) | 2024.12.13 |