h2 데이터베이스는 교육용으로 좋음, 용량이 작고 가벼움
설치 방법 )
1. http://h2database.com/html/main.html에서 다운로드 후 원하는 폴더 내에 압축 해제
2. h2 폴더 내의 bin 폴더로 이동 후 cmd에서 h2.bat 실행(윈도우 기준)
3. 데이터베이스 파일 생성 방법
jdbc:h2:~/test (최초 한번)
~/test.mv.db 파일 생성 확인
이후부터는 jdbc:h2:tcp://localhost/~/test 이렇게 접속 (안그러면 동시에 애플리케이션과 웹 콘솔 접근시 접속 안될 수 있음)
member 테이블 생성
drop table if exists member CASCADE;
create table member
(
id bigint generated by default as identity, #기본키 알아서 생성되도록 함
name varchar(255),
primary key (id)
);
🍀 프로젝트 폴더 최상단에 sql 파일 만들어 ddl관련 sql문 정리해두면 좋음 (git에서 같이 관리 가능, 테이블 파악 가능하기 때문)
20여년 전 개발하던 방식...
자바는 기본적으로 DB와 연동하기 위해 Jdbc드라이버가 꼭 필요
환경 설정
build.gradle 파일에 jdbc, h2 데이터베이스 관련 라이브러리 추가
implementation 'org.springframework.boot:spring-boot-starter-jdbc' runtimeOnly 'com.h2database:h2'
//db와 연동할 때 데이터베이스가 제공하는 클라이언트가 꼭 필요함. 여기서는 h2database 클라이언트 사용
DB와 연동하기 위해 접속 정보 저장(경로만 넣어놓으면 SpringBoot가 알아서 설정해준다.) - 필요한 data source를 DB와 연결하는 작업.
// resources/application.properties
spring.datasource.url=jdbc:h2:tcp://localhost/~/test
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
DataSource는 데이터베이스 커넥션을 획득할 때 사용하는 객체.
스프링 부트는 데이터베이스 커넥션 정보를 바탕으로
DataSource를 생성하고 스프링 빈으로 만들어둔다. 그래서 DI를 받을 수 있다.
spring bean(스프링에서 관리하는 객체)을 만들면 DI는 spring이 알아서 해줌. -> 인터페이스에서 구현체를 바꾸면서도 의존성 관련한 기존 코드를 수정하지 않아도 됨 ! 이것이 객체지향의 큰 장점임.
(DB와 스프링 컨테이너까지 엮어서 실행하는 테스트)
순수하게 java 코드만으로 최소한의 단위로 테스트하는 것은 단위테스트라고 함. (단위 테스트를 잘하는 것이 통합 테스트보다 더 중요)
설정이 편리함
반복 문제 해결
JdbcTemplate은 템플릿 콜백 패턴을 사용해서, JDBC를 직접 사용할 때 발생하는 대부분의 반복작업을 대신 처리해준다.
개발자는 SQL을 작성하고, 전달할 파리미터를 정의하고, 응답 값을 매핑하기만 하면 된다.
우리가 생각할 수 있는 대부분의 반복 작업을 대신 처리해준다.
JPA는 ORM기술 (객체와 관계형 DB 매핑해주는 기술)
-> @Entity 에노테이션 사용해 매핑.
스프링 데이터 JPA 제공 클래스
🍳 스프링 데이터 JPA 제공 기능
참고: 실무에서는 JPA와 스프링 데이터 JPA를 기본으로 사용하고, 복잡한 동적 쿼리는 Querydsl이라는
라이브러리를 사용하면 된다. Querydsl을 사용하면 쿼리도 자바 코드로 안전하게 작성할 수 있고, 동적
쿼리도 편리하게 작성할 수 있다. 이 조합으로 해결하기 어려운 쿼리는 JPA가 제공하는 네이티브 쿼리를
사용하거나, 앞서 학습한 스프링 JdbcTemplate를 사용하면 된다.