참고
데이터 접근 기술 진행 방식 소개
NOTE
앞으로 배울 데이터 접근 기술은 크게 2가지로 분류 할 수 있다
•
SQL Mapper
•
ORM
SQL Mapper
NOTE
SQL Mapper 대표적인 기술
•
JdbcTemplate
•
MyBatis
•
개발자는 SQL만 작성하면 해당 SQL의 결과를 객체로 편리하게 매핑해준다.
•
JDBC를 직접 사용할 떄 발생하는 여러가지 중복을 제거해주고 ,기타 개발자에게 여러가지 편리한 기능을 제공한다.
ORM(Object RealtionalMapping)
NOTE
ORM 대표적인 기술
•
JPA, Hibernate
•
스프링 데이터 JPA
•
Querydsl
•
JDBCTemplate나 MyBatis같은 SQL 매퍼 기술은 SQL을 개발자가 직접 작성해야 하지만, JPA를 사용하면 기본적인 SQL은 JPA가 대신 작성하고 처리해준다.
•
개발자는 저장하고 싶은 객체를 마치 자바 컬렉션에 저장하고 조회하듯이 사용하면 ORM 기술이 데이터베이스에 객체를 저장하고 조회해준다.
•
JPA는 자바 진영의 ORM 표준, Hibernate(하이버네이트)는 JPA에서 가장 많이 사용하는 구현체이다.
•
스프링 데이터 JPA, Querydsl은 JPA를 더 편리하게 사용할 수 있게 도와주는 프로젝트다.
프로젝트 설정과 메모리 저장소
초기 테스트 데이터 추가( @EventListener )
NOTE
public class TestDataInit {
private final ItemRepository itemRepository;
//확인용 초기 데이터 추가
//스프링 컨테이너가 완전히 초기화를 다 끝내고, 실행 준비가 되었을 때 발생하는 이벤트
@EventListener(ApplicationReadyEvent.class)
public void initData() {
log.info("test data init");
itemRepository.save(new Item("itemA", 10000, 10));
itemRepository.save(new Item("itemB", 20000, 20));
}
}
Java
복사
컨테이너 초기화 끝나고 실행시킴
프로필
NOTE
// Application 실행 클래스
public class ItemServiceApplication {
public static void main(String[] args) {
SpringApplication.run(ItemServiceApplication.class, args);
}
@Bean
@Profile("local")
public TestDataInit testDataInit(ItemRepository itemRepository) {
return new TestDataInit(itemRepository);
}
}
Java
복사
컨테이너 초기화 끝나고 실행시킴
•
local이라는 프로필이 등록되어있으면, @Profile("local")이 동작하고, testDataInit가 스프링 빈으로 등록된다.
spring.profiles.active=local // or test
Java
복사
application.properties
•
프로필 설정
데이터베이스 테이블 생성
NOTE
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)
);
SQL
복사
기본 테이블
generated by default as identity
NOTE
identity 전략이라고 하는데, 기본 키 생성을 데이터베이스에 위임하는 방법이다!
MySQL의 AutoIncrement와 같은 방법이다.
•
여기서 PK로 사용되는 id는 개발자가 직접 지정하는 것이 아니라 비워두고 저장하면 데이터 베이스가 순서대로 증가하는 값을 넣어준다.
권장하는 식별자 선택 전략
NOTE
데이터베이스 기본 키는 다음 3가지 조건을 만족해야 한다.
•
null 값을 허용하지 않는다
•
유일해야 한다
•
변해선 안된다
•
이러한 테이블 기본 키를 선택하는 전략은 크게 2가지가 있다
자연 키(natural key)
•
비즈니스에 의미가 있는 키
•
ex) 주민등록번호, 이메일, 전화번호
대리키(surrogate key)
•
비즈니스와 관련 없는 임의로 만들어진 키
•
ex) auto_increment, identity, 키생성 테이블
•
자연 키와 대리 키는 일장 일단이 있지만, 될 수 있으면 대리 키의 사용을 권장한다!
◦
자연 키인 전화번호, 주민번호는 변하지 않을거 같지만 현실은 생각보다 쉽게 변한다
◦
비즈니스 요구사항은 계속 변하는데 테이블은 한 번 정의하면 변경하기 어렵다
◦
그런면에서 외부 풍파에 쉽게 흔들리지 않는 대리 키가 좋은 선택이다!