본문 바로가기
Spring

[Spring] Spring Data JDBC 적용하기 (+ H2 DB 사용하기)

by jungha_k 2022. 10. 29.

 

 Spring Data JDBC 적용 순서

 

1. build.gradle에 의존 라이브러리 추가

2. application.yml 파일 설정

3. 'schema.sql' 파일에 테이블 스크립트 작성

4. 3에서 작성한 파일 읽어오도록 application.yml 에 초기화 설정 추가

5. db 테이블과 매핑할 엔티티(Entity) 클래스 작성

6. 5기반으로 db 작업을 처리할 Repository 인터페이스 작성

7. 6에서 작성된 Repository 인터페이스를 서비스 클래스에 사용하도록 DI

8. DI된 Repository의 메서드 사용, 서비스 클래스에서 CRUD 작업 수행

 


✍🏻세부 과정

 

build.gradle에 사용할 데이터베이스를 위한 의존 라이브러리를 추가합니다.

 

dependencies {
	...
	...
	implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'
	runtimeOnly 'com.h2database:h2'
}

 

의존 라이브러리를 추가하고 나면 Spring 실행 시에

 

H2 console available at '/h2-console'. Database available at

 

가 로그에 찍히는데,

이는 H2 데이터베이스를 정상적으로 사용할 수 있으며, 웹 브라우저로 접속 가능하다는 뜻이다.

 

 

* 인메모리 db인 H2 쓰는 이유 : 

메모리 안에 데이터를 저장하는 db기 때문에 휘발성이 있다!

애플리케이션이 실행되는 동안에만 데이터를 저장함.

 

로컬 환경에서 개발을 진행할 때  애플리케이션 테스트 하기 좋다.

테스트에 필요한 데이터 이외에 쓸데없는 데이터는 테이블에 없는게 더 정확하기 때문!

 

테스트 끝나고 나면 db가 깨끗-이 비워져 있을 거기 때문에 더욱 좋다. 

 

 

 

 

application.yml 파일에 사용할 데이터베이스에 대한 설정을 합니다.

 

spring:
  h2:
    console:
      enabled: true
      path: /h2     # (1) Context path 변경
  datasource:
    url: jdbc:h2:mem:test     # (2) JDBC URL 변경

H2 기본 설정에 URL Context Path, JDBC URL 등의 설정을 해줄 수 있다.

 

* URL Context Path - h2 db 접속할때 입력해서 들어갈 url

* JDBC URL - 접속시 콘솔에 입력하는 부분

 

 

 

 

‘schema.sql’ 파일에 필요한 테이블 스크립트를 작성합니다. 

 

CREATE TABLE IF NOT EXISTS MEMBER (
    MEMBER_ID bigint NOT NULL AUTO_INCREMENT,
    EMAIL varchar(100) NOT NULL UNIQUE,
    NAME varchar(100) NOT NULL,
    PHONE varchar(100) NOT NULL,
    PRIMARY KEY (MEMBER_ID)
);

CREATE TABLE IF NOT EXISTS COFFEE (
    COFFEE_ID bigint NOT NULL AUTO_INCREMENT,
    KOR_NAME varchar(100) NOT NULL,
    ENG_NAME varchar(100) NOT NULL,
    PRICE number NOT NULL,
    COFFEE_CODE char(3) NOT NULL,
    PRIMARY KEY (COFFEE_ID)
);

...

 

 

주로 src/main/resources/db/h2 디렉토리 안에 위치한다.

* 인메모리 db 사용시 애플리케이션 실행마다 스크립트가 매번 실행된다.

 

 

 

 

application.yml 파일에서 ‘schema.sql’ 파일을 읽어서

테이블을 생성할 수 있도록 초기화 설정을 추가합니다.

 

//application.yml 파일
sql:
    init:
      schema-locations: classpath*:db/h2/schema.sql

 

schema.sql 파일을 추가해주면 애플리케이션 실행 시

shema.sql 속 스크립트를 읽어 db에 테이블을 자동으로 생성한다.

 

 

 

데이터베이스의 테이블과 매핑할 엔티티(Entity) 클래스를 작성합니다.


1) 보통 테이블 하나에 엔티티 클래스 하나가 매핑된다.
(MESSAGE 테이블 ~ Message.class)

2) 테이블 속 한 컬럼은 클래스의 한 멤버변수와 1:1로 매핑된다.
(message_Id ~ messageId)

 

 

 

 

작성한 엔티티 클래스를 기반으로 데이터베이스의 작업을 처리할
Repository 인터페이스를 작성합니다.

 

 

Repository interface 작성시에 

public interface SomethingRepository extends CrudRepository ~

 

= CrudRepository 를 extend 해주면 다른 메서드 작성 없이 create, read, update, delete 작업을 할 수 있다.
(스프링에서 지원해주는 인터페이스)

 

 

 

작성된 Repository 인터페이스를 서비스 클래스에서 사용할 수 있도록 DI 합니다.

ex) MemberService 클래스에서 MemberRepository DI

@Service
public class MemberService {

    //MemberRepository DI
    private MemberRepository memberRepository;

    //생성자
    public MemberService(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }

...
}

 

 

 

 

DI 된 Repository의 메서드를 사용해서

서비스 클래스에서 데이터베이스에 CRUD 작업을 수행합니다.

 

과연,,

댓글