🔍 목차
- 영속성 - Persistence
- JDBC
- SQL Mapper - MyBatis
- ORM - JPA
📌 영속성 - Persistence
영속성(persistence)이란?
- 사리지지 않는 데이터의 특성
- 영속성을 갖는 데이터: DB, 파일 등에 데이터를 영구적으로 저장하여 사리지지 않음
- 영속성을 갖지 않는 데이터: 메모리에만 데이터 존재, 프로그램 종료 시 데이터 사라짐
👀 Persistence Layer
소프트웨어 아키텍처 - Layered Architecture
- Presentation, Business, Persistence, Database로 4계층으로 나뉘어져 있으며 각 계층마다 맡은 역할이 다름
- 호출 방향: Presentation -> Business -> Persistence -> Database
- Presenteation Layer
- 클라이언트의 요청을 받고 응답하는 계층
- 클라이언트의 요청에 어떻게 응답할지에 관심있는 계층
- 요청에 대한 처리는 Business Layer에 전달
- +) spring의 Controller 부분
- Business Layer
- 비즈니스 로직 담당
- 클라이언트의 요청을 실제 처리하는 부분
- 클라이언트가 웹인지 앱인지, DB가 어떤 종류인지 관심 없음
- 데이터 접근은 Persistence Layer에 위임
- +) spring의 Service 부분
- Persistence Layer
- DB 접근 계층
- Business 요청에 따라 DB 저장, 조회, 삭제, 수정 등 로직 수행
- 데이터에 영속성을 부여해주는 계층
- JDBC를 이용하여 직접 구현할 수 있지만 Persistence frameworkd를 이용한 개발이 주
- +) spring의 Repository 부분
- Database Layer
👀 Persistence Framework
Persistence Layer에서 JDBC 프로그래밍의 복잡함 없이 간단하게 DB 연동되는 시스템 개발 및 안정적인 구동 보장하는 프레임워크이다. 종류는 SQL Mapper, ORM으로 두 가지이다.
- SQL Mapper
- SQL과 필드를 매핑
- SQL 문장으로 직접 DB 다룸
- ex. MyBatis, JdbcTemplates
- ORM: 객체를 통해 DB
- DB 데이터와 객체 매핑
- 객체를 통해 DB 데이터 다룸
- 메서드 통해 간단한 SQL 자동 생성 가능
- ex. JPA, Hibernate
📌 JDBC
- Java Database Connectivity
- DB 접근, SQL 날리게 할 수 있는 자바 표준 API
- 자바의 DB 접근 기술의 근간
- 모든 Persistence Framework는 내부적으로 JDBC API 사용
- JDBC API는 Driver Manage를 사용하여 각 DB에 맞는 드라이버를 로딩, 해제
- 개발자는 JDBC API를 사용하여 DB 연결
- DB 연결을 위한 connection 할당, 종료같은 부수적인 코드 증가
- 이러한 복잡성을 줄이기 위해 persistence framework 등장(MyBatis, JPA, Hibernate.. 등)
📌 SQL Mapper - MyBatis
- SQL Mapper - 객체와 SQL문을 매핑
- 내부에 JDBC 사용
- SQL로 직접 DB 데이터 다룸
- 복잡한 쿼리 짤 때 좋음
- 간단한 CRUD 쿼리도 모두 작성해야 하는 단점 존재
📌 ORM - JPA
JPA는 인터페이스, 이를 사용하기 위해 구현체를 선택해야한다.
- ORM(Object-Relatoinal Mapping) - 객체와 DB 데이터 매핑
- JPA - 자바 표준 ORM API, ORM을 사용하기 위한 표준 인터페이스 모음
- 객체를 통해 간접적으로 DB 데이터 다룸
- ORM framwork - JPA 구현체
📢 Hibernate
- JPA의 대표 구현체
- 내부에 JDBC 사용
- 간단한 CRUD 쿼리 메서드 제공 -> 메서드로 데이터 조작 가능
- 복잡한 쿼리는 결국 SQL을 짜야함
- native SQL이 아닌 객체 중심 SQL을 위한 JPQL, querydsl 기술도 있음
- HQL이라 불리는 쿼리 언어 포함
- HQL은 SQL과 비슷하면서 객체 지향 강점 누릴 수 있음(상속, 다형성 등)
- 쿼리 결과로 객체를 반환
- 클래스, 프로퍼티 이름 제외하고 대소문자 구분
참고 및 출처
- JDBC, MyBatis, JPA 차이
- Layered Architecture