build.gradle
에 사용할 데이터베이스를 위한 의존 라이브러리를 추가한다. dependencies {
...
...
implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'
runtimeOnly 'com.h2database:h2'
}
application.yml
파일에 사용할 데이터베이스에 대한 설정을 한다.spring:
h2:
console:
enabled: true
path: /h2 # (1)
datasource:
url: jdbc:h2:mem:test # (2)
(1) : H2 콘솔의 접속 URL Context path 설정
(2) : JDBC URL이 매번 랜덤하게 바뀌지 않도록 설정
schema.sql
파일에 필요한 테이블 스크립트를 작성한다.application.yml
파일에서 schema.sql
파일을 읽어서 테이블을 생성할 수 있도록 초기화 설정을 추가한다.scehma-locations : 테이블 생성 파일 경로
인메모리 DB를 사용할 경우, 애플리케이션이 실행될 때 마다 schema.sql 파일의 스크립트가 매번 실행된다.
작성된 Repository 인터페이스를 서비스 클래스에서 사용할 수 있도록 DI 한다.
데이터 액세스 기술의 유형은 크게 SQL 중심의 기술과 객체(Object) 중심의 기술로 나눌 수 있다.
SQL 중심의 기술에는 mybatis, Spring JDBC 등이 있다.
객체(Object) 중심의 기술에는 JPA, Spring Data JDBC 등이 있다.
JPA 같은 객체(Object) 중심의 기술을 ORM(Object-Relational Mapping) 기술이라고 한다.
인메모리(In-memory) DB는 애플리케이션이 실행된 상태에서만 데이터를 저장하고 애플리케이션 실행이 중지되면 인메모리 DB 역시 실행이 중지되어 저장된 데이터가 사라진다.
Spring에서 지원하는 CrudRepository
인터페이스는 CRUD에 대한 기본적인 메서드를 정의하고 있기 때문에 별도의 CRUD 기능을 개발자가 직접 구현할 필요가 없다.
application.properties
또는 application.yml
파일의 설정 정보 등록을 통해 데이터베이스 설정, 데이터베이스의 초기화 설정 등의 다양한 설정을 할 수 있다.
application.yml
방식은 중복되는 프로퍼티의 입력을 줄여주기 때문에 application.properties
방식보다 더 선호되는 추세이다.
엔티티(Entity) 클래스 이름은 데이터베이스 테이블의 이름에 매핑되고, 엔티티 클래스 각각의 멤버 변수는 데이터베이스 테이블의 컬럼에 매핑된다.
엔티티 클래스의 멤버 변수에 @Id
애너테이션을 추가하면 데이터베이스 테이블의 기본키(Primary key)
컬럼과 매핑된다.