Search
Duplicate
📒

[Spring DB] xx. 데이터 접근 기술

상태
미진행
수업
Database Study
주제
기본개념
4 more properties
참고

데이터 접근 기술 진행 방식 소개

NOTE
앞으로 배울 데이터 접근 기술은 크게 2가지로 분류 할 수 있다
SQL Mapper
ORM

SQL Mapper

NOTE
SQL Mapper 대표적인 기술
JdbcTemplate
MyBatis
개발자는 SQL만 작성하면 해당 SQL의 결과를 객체로 편리하게 매핑해준다.
JDBC를 직접 사용할 떄 발생하는 여러가지 중복을 제거해주고 ,기타 개발자에게 여러가지 편리한 기능을 제공한다.

ORM(Object RealtionalMapping)

NOTE
ORM 대표적인 기술
JPA, Hibernate
스프링 데이터 JPA
Querydsl
JDBCTemplateMyBatis같은 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, 키생성 테이블
자연 키와 대리 키는 일장 일단이 있지만, 될 수 있으면 대리 키의 사용을 권장한다!
자연 키인 전화번호, 주민번호는 변하지 않을거 같지만 현실은 생각보다 쉽게 변한다
비즈니스 요구사항은 계속 변하는데 테이블은 한 번 정의하면 변경하기 어렵다
그런면에서 외부 풍파에 쉽게 흔들리지 않는 대리 키가 좋은 선택이다!