영속성(Persistence)
- 데이터를 생성한 프로그램이 종료되더라도 사라지지 않는 데이터의 특성
- Persistence Layer는 객체에 영속성을 부여하는 역할을 하며, 이를 어떻게 구현하느냐를 관점으로 ORM, SQL Mapper, JDBC를 비교할 수 있다.
JDBC(Java Database Connectivity)
- 자바에서 DB에 접속할 수 있도록 하는 API
- 자바 어플리케이션의 DBMS 종류에 상관 없이, 하나의 JDBC API를 이용해 DB작업 처리
- 간단한 SQL 실행에도 중복 코드 반복적 사용
- connection과 같은 공유 자원을 제대로 릴리즈 해주지 않으면 시스템 자원이 바닥나는 버그 발생
- 이러한 단점 보완 -> Persistence Framework
Persistence Framework
- JDBC 프로그래밍의 복잡함이나 번거로움 없이 간단한 작업만으로 DB와 연동되는 시스템을 빠르게 개발
- 복잡한 쿼리나 다이나믹하게 변경되는 쿼리 작성이 쉽다
- DAO로부터 SQL문을 분리하여 코드의 간결성 및 유지보수성 향상 (관심사 분리)
- ex) MyBatis
SQL Mapper, JDBC Template
- SQL을 직접 작성
- SQL문과 객체(Object)의 필드를 매핑하여 데이터 객체화 (객체와 관계 Mapping (x) )
코드상으로 SQL과 JDBC API를 분리하더라도 논리적으로 강한 의존성을 갖고 있다.
-
테이블 마다 비슷한 CRUD SQL작업
-
테이블 필드가 변경될 시 이와 관련된 모든 DAO의 SQL문, 객체 필드 등의 수정
-
특정 DB에 종속적으로 사용하기 쉽다
-
패러다임 불일치 문제
객체지향(추상화, 상속, 다형성를 기반으로한 객체 중심 구조)과 RDB(데이터 중심의 구조)의 목적이 달라 생기는 문제
ORM
- 객체와 관계형 DB를 맵핑
- SQL Query가 아닌 직관적인 코드(메서드)로 데이터 조작
- JPA는 ORM에 관한 인터페이스 명세
- 상속과 연관을 간단한 코드로 작성하면 ORM이 내부적으로 처리
- 도메인과 비즈니스 로직에 집중할 수 있다.
- DB서버가 없는 상태에서 개발 가능 -> 유지보수에 유리