김영한 님의 "자바 ORM 표준 JPA 프로그래밍" 책을 정리한 포스팅 입니다.
1. SQL을 직접 다룰 때 발생하는 문제점
문제점 | 내용 |
SQL 의존 개발 |
- 강한 의존 관계 (SQL 쿼리 ↔️ Java 객체)
- 유지 보수 어려움 (쿼리 결과 ↔️ 엔티티 필드 일치 필수) - 계층 분리 어려움 |
SQL Mapper 개발 |
- 개발 효율성 저하 (반복되는 보일러플레이트 코드: JDBC API)
|
예제) SQL Mapper 개발
더보기
// JDBC 연결 정보
String url = "jdbc:mysql://localhost:3306/mydatabase";
String username = "root";
String password = "password";
// 데이터베이스 연결 및 쿼리 실행
try (Connection connection = DriverManager.getConnection(url, username, password)) {
String sql = "SELECT id, name, email FROM users WHERE id = ?";
try (PreparedStatement statement = connection.prepareStatement(sql)) {
statement.setInt(1, 1); // 예시로 id가 1인 사용자 조회
try (ResultSet resultSet = statement.executeQuery()) {
if (resultSet.next()) {
// 결과를 DTO로 매핑
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
String email = resultSet.getString("email");
// DTO 객체 생성
UserDTO user = new UserDTO(id, name, email);
// ...
}
}
}
} catch (SQLException e) {
e.printStackTrace();
}
2. 패러다임 불일치
- 객체지향 프로그래밍과 관계형 데이터베이스이 각각 데이터를 바라보는 방식이 근본적으로 다르기 때문에 발생하는 문제
개념 | 데이터베이스 관점 | OOP 관점 |
데이터 단위 | - 행 |
- 객체
|
Identity | - 기본 키(PK)로 행(row)을 구분 |
- equals() 메서드로 인스턴스를 구분함
|
Inheritance | - 존재하지 않음 - 슈퍼타입-서브타입 형태로 표현 가능 |
- 상속으로 표현 (쿼리를 자동 생성해 처리 가능) |
Association | - 조인(Join) 쿼리로 구현 - 참조 무결성 유지 |
- 연관 객체 간 메시지를 주고받으며 상호작용
- 객체 그래프 탐색을 통해 접근 |
Entity Graph | - 조인 쿼리로 관계를 조회 - 참조 무결성 유지 |
- 특정 엔티티를 시작점으로 연관 객체 로딩 |
3. JPA란 무엇인가?
- Java ORM Standard Specification
ORM
- Object Relation Mapping
- 애플리케이션에서 데이터베이스 관련 객체를 어떻게 관리할 지 도와주는 모듈
장점
구분 | 내용 |
가독성 & 유지보수성 |
- 객체-테이블 매핑을 통해 패러다임 불일치(paradigm mismatch) 문제 해결
- 패러다임에 따른 작업을 JPA가 자동 처리 |
자동화된 DB 작업 |
- JpaRepository를 통한 자동 CRUD 메서드 제공
- 객체 생명주기 관리: @PreUpdate, @PrePersist 등의 표준 콜백 제공 |
데이터 접근 계층 관리 |
- 추상화 덕분에 DB 벤더 및 기술 의존성 제거 가능
- 데이터 접근 계층을 쉽게 관리하고 변경 가능 |
성능 향상 |
- 1차 캐시(First-Level Cache) 제공으로 동일 트랜잭션 내에서 불필요한 DB 접근 최소화
|
Vendor
- Hibernate, EclipseLink, DataNucleus
'Spring > Spring Data JPA' 카테고리의 다른 글
[자바 ORM 표준 JPA 프로그래밍] 3. 영속성 관리 (0) | 2023.11.28 |
---|---|
[자바 ORM 표준 JPA 프로그래밍] 2. JPA 시작 (0) | 2023.11.28 |
[Spring Data JPA] 2-2. Transactionality (0) | 2023.10.18 |
[Spring Data JPA] 2-1. Configuration (0) | 2023.10.18 |
[Spring Data JPA] 1. Core concepts (1) | 2023.10.17 |