DB를 직접 다룰 때의 문제점❗️
public class User {
private Long id;
private String username;
private String contents;
}
만약 위와 같은 객체 데이터를 DB에서 관리해야 한다고 할 때 복잡한 진행과정을 거쳐야 합니다.
1. DB테이블 만들기
create table user (
id bigint not null auto_increment,
contents varchar(500) not null,
username varchar(255) not null,
primary key (id)
);
2. 애플리케이션에서 SQL 작성
String sql = "INSERT INTO user (username, contents) VALUES (?, ?)";
String sql = "SELECT * FROM user";
3. JDBC를 사용하여 SQL 직접 실행
jdbcTemplate.update(sql, "ZINU", "HELLO");
jdbcTemplate.query(sql, ...);
4. SQL결과 ➡️ 객체로 생성
@Override
public MemoResponseDto mapRow(ResultSet rs, int rowNum) throws SQLException {
// SQL 의 결과로 받아온 Memo 데이터들을 MemoResponseDto 타입으로 변환해줄 메서드
Long id = rs.getLong("id");
String username = rs.getString("username");
String contents = rs.getString("contents");
return new MemoResponseDto(id, username, contents);
}
위 과정처럼 복잡한 진행과정이 필요합니다.
또한 이러한 DB 직접 접근 방식은 다양한 문제가 있습니다.
- 복잡한 SQL 쿼리 작성
- 객체와 관계형 데이터베이스 간의 불일치
- 변경 관리의 어려움
- 테스트와 유지보수의 어려움
이처럼 데이터베이스를 직접 다루는 전통적인 방식은 많은 개발자들에게 익숙하지만, 몇 가지 주요 문제점이 있습니다. 이러한 문제점을 해결하기 위해 ORM이 등장했습니다.
ORM란❓
ORM (Object-Relational Mapping)은 객체 지향 프로그래밍 언어와 관계형 데이터베이스(RDBMS) 간의 데이터를 매핑하고 상호작용을 자동화하는 기술입니다.
ORM의 주요 목표는 객체 지향 프로그래밍의 장점을 활용하여 데이터베이스 작업을 더 직관적이고 관리하기 쉽게 만드는 것입니다.
ORM (Object-Relational Mapping)의 이름에서 알 수 있듯이 ORM은 객체와 DB의 관계를 매핑해주는 도구입니다.
JPA란❓
JPA (Java Persistence API)는 자바에서 관계형 데이터베이스와 객체 지향 프로그래밍 간의 데이터 매핑을 처리하는 표준 API입니다.
즉 JPA는 Java ORM기술의 대표적인 표준 명세입니다.
JPA는 위와 같이 애플리케이션과 JDBC 사이에서 동작을 하고 있으며, JPA를 사용하면 객체와 데이터베이스 테이블 간의 매핑을 자동으로 처리하여, 데이터베이스와의 상호작용을 더 직관적이고 효율적으로 만들어 줍니다.
또한 객체를 통해 간접적으로 DB 데이터에 접근할 수 있기 때문에 매우 쉽게 DB작업을 할 수 있습니다.
표준 명세 (Standard Specification) : 특정 기술이나 프로세스의 규격을 정의하는 문서
하이버네이트(Hibernate)란❓
JPA는 앞서 알아보았듯이 표준 명세이고, 이를 실제로 구현한 프레임워크 중 하나가 바로 "Hibernate"입니다.
Hibernate는 사실상 표준입니다.
사실상 표준 (de facto, 디팩토)
➡️ 보통 기업 간 치열한 경쟁을 통해 시장에서 결정되는 비 공식적 표준
'Framework > JPA' 카테고리의 다른 글
[JPA] 트랜잭션 관리와 영속성 컨텍스트의 관계 (@Transaction, 트랜잭션 전파) (0) | 2024.07.27 |
---|---|
[JPA] JPA Entity 상태 (비영속, 영속, 준영속, 삭제 상태의 이해) (0) | 2024.07.27 |
[JPA] 영속성 컨텍스트란 무엇일까❓ #2(1차 캐시, 변경 감지, 쓰기지연 감소) (0) | 2024.07.27 |
[JPA] 영속성 컨텍스트란 무엇일까❓ (0) | 2024.07.26 |
[JPA] Entity란 무엇일까❓(Entity: 데이터베이스와 자바 객체 간의 다리) (0) | 2024.07.26 |