본문 바로가기
Spring Study/DataBase

[DataBase] 데이터 접근 기술

by 정재인 2023. 9. 22.

데이터 접근 기술

 

적용 데이터 접근 기술

- JdbcTemplate
- MyBatis
- JPA, Hibernate
- 스프링 데이터 JPA
- Querydsl

 

이 기술들은 크게 2가지로 나눌 수 있다.

 

SQLMapper

- 개발자는 SQL만 작성하면 해당 SQL의 결과를 객체로 편리하게 매핑해준다.

- JDBC를 직접 사용할 때 발생하는 여러가지 중복을 제거해주고, 기타 개발자에게 여러가지 편리 기능을 제공한다.

ex) JdbcTemplate, MyBatis 

 

ORM 관련 기술

- SQLMapper는 SQL을 개발자가 직접 작성해야 하지만, JPA는 기본적인 SQL을 대신 작성하고 처리해준다.

개발자는 저장하고 싶은 객체를 마치 자바 컬렉션에 저장하고 조회하듯이 사용하면 ORM 기술이 데이터베이스에 해당 객체를 저장하고 조회해준다.

- JPA는 자바 진영의 ORM 표준이고, Hibernate는 JPA에서 가장 많이 사용하는 구현체이다.

즉, 자바에서 ORM을 사용할 때는 JPA 인터페이스를 사용하고, 그 구현체로는 Hibernate를 사용한다고 생각하면 된다.

- 스프링 데이터 JPA, Querydsl은 JPA를 더 편리하게 사용할 수 있게 도와주는 프로젝트이다.

ex) JPA, Hibernate, 스프링 데이터 JPA, Querydsl

 


DTO (Data Transfer Object)

- 데이터 전송 객체

- DTO는 기능은 없고 데이터를 전달하는 용도로 사용되는 객체를 의미한다.

- 객체 이름에 꼭 DTO를 붙여야 하는 것은 아니지만, 붙여두면 용도를 알 수 있다는 장점이 있다.

 


데이터베이스 테이블 생성

 

'item 테이블 생성 쿼리'

drop table if exists item CASCADE;
     create table item
     (
         id        bigint generated by default as identity,
         item_name varchar(10),
         price     integer,
         quantity  integer,
         primary key (id)
     );

- 'generated by default as identity'는 identity 전략이라고 하는데, 기본 키 생성을 데이터베이스에 위임하는 방법이다. MySQL의 Auto Incrememt와 같은 방법이다.

- PK로 사용되는 id는 개발자가 직접 지정하는 것이 아니라 비워두고 저장한다. 그러면 데이터베이스가 순서대로 증가하는 값을 사용해서 넣어준다.

 

'등록 쿼리'

insert into item(item_name, price, quantity) values ('ItemTest', 10000, 10)

 

'조회 쿼리'

select * from item;

 

 

권장하는 식별자 선택 전략

데이터베이스 기본 키는 다음 3가지 조건을 모두 만족해야 한다.

1. null 값은 허용하지 않는다.

2. 유일해야 한다.

3. 변화하면 안된다.

 

테이블 기본 키를 선택하는 전략은 크게 2가지가 있다.

1. 자연 키(natural key)

비즈니스에 의미가 있는 키

ex) 주민등록번호, 이메일, 전화번호

 

2. 대리 키(surrogate key)

비즈니스와 관련 없는 임의로 만들어진 키, 대체 키

ex) 오라클 시퀀스, auto_incrememt, identity, 키 생성 테이블 사용

 

자연 키보다는 대리 키를 권장한다.

예를 들어, 자연 키인 전화번호를 기본 키로 선택한다면 그 번호가 유일할 수는 있지만, 전화번호가 없을 수도 있고 전화번호가 변경될 수도 있기 때문이다. 또한 주민등록번호도 3가지 조건을 만족하는 것 같지만 여러 이유로 변경될 수 있다.

 

비즈니스 환경은 언젠가 변한다.

 

댓글