DB를 직접 다룰 때의 문제점
애플리케이션에서 아래 형태의 객체 데이터를 DB에 저장해서 관리해야한다면 어떻게 해야 할까?
public class Memo {
private Long id;
private String username;
private String contents;
}
1. DB 테이블 만들기
create table memo (
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 memo (username, contents) VALUES (?, ?)";
String sql = "SELECT * FROM memo";
3. SQL을 JDBC를 사용해서 직접 실행해줘야 한다.
jdbcTemplate.update(sql, "Robbie", "오늘 하루도 화이팅!");
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);
}
SQL 의존적이라 변경에 취약하다.
메모 데이터에 비밀번호를 추가해야 한다면 어떻게 될까?
public class Memo {
private Long id;
private String username;
private String contents;
// 비밀번호 추가
private String password;
}
1. SQL을 직접 수정해야 한다.
String sql = "INSERT INTO memo (username, contents, password) VALUES (?, ?, ?)";
2. MemoResponseDto 객체에 값을 넣어주는 부분도 당연히 추가해줘야 한다.
@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");
String password = rs.getString("password");
return new MemoResponseDto(id, username, contents, password);
}
단순히 메모장에 비밀번호 하나 더 추가했는데 해야하는 일들이 엄청 많이 생겼다.
이처럼 ORM이 없는 환경에서는 백엔드 개발자가 비즈니스 로직 개발보다, SQL 작성 및 수정에 더 많은 노력을 들여야 했다.
ORM이란?
ORM : Object-Relational Mapping
Object : "객체"지향 언어 (자바, 파이썬)
Relational : "관계형" 데이터베이스 (H2, MySQL)
반복적이고 번거로운 애플리케이션 단에서의 SQL 작업을 줄여주기 위해서 ORM(객체 관계 매핑) 기술들이 등장하게 된다.
ORM은 이름 그대로 객체와 DB의 관계를 매핑 해주는 도구이다.
객체 즉, 자바의 클래스와 DB의 데이터를 직접 매핑하려면 앞서 살펴본 것 처럼 매우 번거롭고 많은 작업들이 필요했지만 ORM을 사용하면 이를 자동으로 처리해준다.
JPA란?
JPA : Java Persistence API
자바 ORM 기술에 대한 표준 명세
JPA는 Java ORM 기술의 대표적인 표준 명세이다.
JPA는 애플리케이션과 JDBC 사이에서 동작되고 있다.
JPA를 사용하면 DB 연결 과정을 직접 개발하지 않아도 자동으로 처리해준다.
또한 객체를 통해 간접적으로 DB 데이터를 다룰 수 있기 때문에 매우 쉽게 DB 작업을 처리할 수 있다.
하이버네이트(Hibernate)란?
JPA는 표준 명세이고, 이를 실제 구현한 프레임워크 중 사실상 표준이 하이버네이트이다.
스프링 부트에서는 기본적으로 '하이버네이트' 구현체를 사용 중이다.
사실상 표준(de facto, 디팩토) : 보통 기업간 치열한 경쟁을 통해 시장에서 결정되는 비 공식적 표준이다.
'Spring 입문주차 > 2주차' 카테고리의 다른 글
8. 영속성 컨텍스트란 무엇일까? (0) | 2024.08.27 |
---|---|
7. Entity 이해하기 (0) | 2024.08.26 |
5. IoC Container와 Bean (0) | 2024.08.19 |
4. 메모장 프로젝트의 IoC & DI (0) | 2024.08.19 |
3. IoC(제어의 역전), DI(의존성 주입) 이해하기 (0) | 2024.08.19 |