Persistence (영속성)
- 데이터가 생성한 프로그램이 종료되더라도 사라지지않는 특성을 말한다.
- 영속성을 가지지 않은 데이터는 메모리만 존재하기 때문에 프로그램을 종료하면 모두 잃어버리게 된다.
Object Persistence(영속성 객체)
- 메모리 상의 데이터를 파일 시스템, 관계형 DB 혹은 객체 DB를 활용하여 영구적으로 저장해서 persisntence를 부여한다.
- 데이터를 DB에 저장하는 방법은 대표적으로 이러하다
1. JDBC(Java에서 사용)
2. Spring JDBC(JdbcTemplate 등이 있다.)
3. Persistence Framework(Hibernate, Mybatis 등이 있다.)
JDBC
- Java DataBase Connectivity의 줄임말로 DB에 접근할 수 있도록 와주는 Java Api이다.
- 아래와 같은 구조로 하나의 JDBC API를 이용해 DB작업을 처리한다.
- 각각의 DBMS는 JDBC드라이버를 제공한다.
JDBC를 이용한 DB접근
JDBC 사용의 단점
- 간단한 SQL을 실행하는데도 중복된 코드를 반복적으로 사용
- Connection과 같은 공유 자원을 제대로 릴리즈 해주지 않으면 시스템의 자원이 바닥나는 버그가 발생한다.
- SQL문을 사용함으로 여러가지 문제가 발생한다.
Spring JDBC
- Spring JDBC는 스프링 프레임워크에서 제공하는 JDBC기반의 데이터 엑세스 기술이다.
- Spring JDBC는 JDBC를 보다 쉽고 효율적으로 사용할 수 있도록 추상화된 기능을 제공한다. 이를 통해 개발자는 반복적이고 번거로운 JDBC작업을 간소화하고 생산성을 향상시킨다.
Spring JDBC의 특징
- DataSource 추상화
- DB 연결 풀을 관리하기 위한 DataSource인터페이스를 제공한다.
- DataSource를 사용하여 DB 연결 및 트랜잭션 관리를 편리하게 처리한다.
- DataSource를 빈으로 등록하고 이를 jdbc템플릿에 주입한다. 이러한 과정을 통해 데이터소스는 디비와 연결을 획득한다. 어떤 디비를 사용하느냐에 따라 디비에 맞는 jdbc driver가 존재한다.
- 예외처리 및 자원 관리
- JDBC작업에서 발생하는 예외를 일관되게 처리하고, 연결및 리소스 관리를 자동으로 처리한다.
- SQL문 실행 및 매핑
- 간단하고 직관적인 방식으로 SQL문을 실행하고 결과를 자바 객체로 매핑하는 기능을 제공한다.
- ResultSet을 자동으로 객체를 반환, PreparedStatement를 사용하여 SQL파라미터를 설정한다
- 트랜잭션 관리
- Service에서 커밋과 롤백을 설정했었다면, Spring에서는 자동으로 관리해준다.
Spring JDBC가 하는일
- Connection 열기와 닫기
- Statement 준비와 닫기
- Statement 실행
- ResultSet Loop처리
- Exception 처리와 반환
- Transaction 처리
Spring JDBC에서 개발자가 할 일
- datasource 설정
- sql문 작성
- 결과 처리
이처럼 여러모로 JDBC만 사용할때보다, 개발자가 해야할 일을 덜어 준다.
Persistence Framework
- JDBC 프로그래밍의 복잡함이나 번거로움 없이 간단한 작업만으로 DB와 연동되는 시스템을 개발할 수 있고 안정적인 구동이 가능하다.
- 모든 Persistence Framework는 JDBC API를 이용한다. 이를 SQL Mapping과 ORM으로 나눌 수 있다.
Persistence Framework의 SQL Mapping과 ORM은 다음 블로그글에서 알아보겠다.
요약
1. Persistence를 부여하기위해 DB에 저장하는 방법은 JDBC, Spring JDBC, Persistence Framework 등이 있다.
2. JDBC
1. JDBC는 java api로 DB에 접근을 도와준다.
2. 커넥션 공유 자원 사용을 위해 하나하나 반복된 코드를 사용한다.
3. SQL문을 직접 사용한다.
3. Spring JDBC
1. 스프링 프레임워크에서 제공하는 JDBC기반 data엑세스 기술
2. JDBC보다 훨씬 편하다
3. DataSource 인터페이스 제공으로 DB연결및 트랜잭션 관리를 훨씬 편하게 한다.
4. 예외처리, SQL문 실행및 매핑, 트랜잭션 관리등 다양한 부분을 개발자 대신 처리해준다.