ORM이란?
객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는 기술
장점
- SQL Query문을 길게 쓸 필요없이 ORM 메소드로 데이터들을 제어할 수 있다.
- 각종 역할에 대해 객체나 함수로 만들어서 하기 때문에, 코드 가독성 및 유지보수의 편리성이 증가한다.
- DBMS를 교체하는 거대한 작업에도 비교적 적은 리스크와 시간이 소요된다.
- SQL Injection 공격을 막아주는 기능이 있어 버그나 해킹가능한 요소들을 줄여준다.
단점
- 완벽한 ORM으로만 서비스를 구현하기 어렵다.
- 프로시저가 많은 시스템에서는 ORM의 객체 지향적인 장점을 활용하기 어렵다.
- 이미 프로시저가 많은 시스템에서는 다시 객체로 바꿔야하며, 그 변경하는 과정에서 생산성이 저하되거나, 리스크가 많이 발생할 수 있다.
* 프로시저 : 프로그램의 기능에 따라 여러 개의 단위로 분해한 것
JPA란?
- 자바 ORM의 표준 API 명세
- JPA는 애플리케이션과 JDBC 사이에서 동작
- 하이버네이트는 JPA의 구현체
JPA를 사용하는 이유
- SQL 중심적인 개발에서 객체 중심으로 개발
- 생산성
- 유지보수
- 패러다임의 불일치 해결
- 성능
- 데이터 접근 추상화와 벤더 독립성
- 표준
JPA의 성능 최적화 기능
1. 1차 캐시와 동일성(identity) 보장
- 같은 트랜잭션 안에서는 같은 엔티티를 반환 - 약간의 조회 성능 향상
- DB Isolation Level이 Read Commit이어도 애플리케이션에서 Repeatable Read 보장
2. 트랜잭션을 지원하는 쓰기 지연(transactional write-behind)
- 트랜잭션을 커밋할 때까지 INSERT SQL을 모음
- JDBC BATCH SQL 기능을 사용해서 한번에 SQL 전송
3. 지연 로딩(Lazy Loading)
- UPDATE, DELETE로 인한 로우(ROW)락 시간 최소화
- 트랜잭션 커밋 시 UPDATE, DELETE SQL 실행하고, 바로 커밋
지연로딩 & 즉시로딩
- 지연 로딩: 객체가 실제 사용될 때 로딩
- 즉시 로딩: JOIN SQL로 한번에 연관된 객체까지 미리 조회
JDBC란?
JDBC (Java Database Connectivity)는 DB에 접근할 수 있도록 Java 에서 제공하는 API 이다.
- JDBC 는 관계형 데이터베이스에 사용되는 SQL 문을 실행하기 위해 자바로 작성된 클래스와 인터페이스로 구성되어 있다
- 특정 데이터베이스나 특정 데이터베이스 매커니즘에 구애 받지 않는 독립적인 인터페이스를 통해 다양한
데이터베이스에 접근하는 코드를 구현(mysql, oracle, mssql 등 추상화를 통해 접근가능)할 수 있도록 제공하는
자바 클래스의 표준 집합이다
- JDBC 클래스는 자바 패키지 java.sql 과 javax.sql 에 포함되어 있다
참고
https://theheydaze.tistory.com/597