📖 Spring Data JDBC 를 사용하기 위한 사전 준비
✔ 의존 라이브러리 추가
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'
runtimeOnly 'com.h2database:h2'
}
데이터베이스에서 데이터를 관리할 것이므로 개발 환경에서 손쉽게 사용할 수 있는 인메모리DB인 H2사용
- 인메모리 DB ?
메모리 안에 데이터를 저장하는 데이터베이스
애플리케이션이 실행되는 동안에만 데이터를 저장하고 있음.
- 로컬 테스트 환경에서는 인메모리 DB사용 권장
✔ application.yml 파일에 H2 Browser 활성화 설정 추가
src/main/resources
디렉토리 하단에 application.properties
파일 확장자를 yml로 변경
(shift+f6)
spring:
h2:
console:
enabled: true
✔ H2 DB 정상 동작 유무 확인
✔ H2 DB 디폴트 설정 추가
MessageService
Message
(엔티티 클래스)MessageRepository
- Dto 클래스 생성
- Controller 클래스 생성
- Mapper 클래스 생성
- MessageRepository 인터페이스 생성
- 데이터 액세스 계층에서 데이터베이스와의 연동 담당
CrudRepository
인터페이스 상속 제너릭 타입이<Message, Long>
으로 선언
- 데이터베이스에 CRUD 작업을 진행하기 위해 Spring에서 지원해주는 인터페이스
- Long은 Message엔티티클래스의 멤버 변수 중에 식별자를 의미하는
@Id
애너테이션이 붙은 멤버 변수의 데이터 타입- MessageService 클래스 생성
- (1) 과 같이 MessageRepository 인터페이스는 MessageService 클래스에서 DI를 통해 주입 받음. (2)에서 Message 엔티티 클래스에 포함된 데이터를 데이터베이스에 저장하는데 사용
save()
메서드는CrudRepository
에 정의되어 있음.- (2) 에서는 데이터베이스에 데이터를 저장하고 난 후 , 데이터베이스에 저장된 데이터를 다시 리턴해준다.
- Message 엔티티 클래스
- (1) 의 Message 클래스 명 = 데이터베이스 테이블 명
- (2) 애너테이션을 추가한 멤버 변수는 해당 엔티티의 고유 식별자 역할 (Primary key)
✔ H2 DB에 MESSAGE 테이블 생성
- 'schema' 라는 파일명으로 .sql 파일의 경로를 지정해주면 이 schema.sql 파일에 있는 스크립트를 읽어서 애플리케이션 실행 시, 데이터베이스에 테이블을 자동으로 생성해준다.
- 인메모리DB를 사용할 경우, 애플리케이션이 실행될 때마다 schema.sql 파일의 스크립트가 매번 실행
✔ schema.sql에 정의된 MESSAGE 테이블 생성 스크립트
- ORM에서는 객체의 멤버 변수와 데이터베이스 테이블의 컬럼이 대부분 1대1로 매핑
- MESSAGE 테이블의 식별자인 'message_id' 컬럼에 AUTO_INCREMENT 설정이 되어 있어서 컬럼에 값을 입력하지 않아도 데이터가 저장이 될 때마다 자동으로 포함이 된다.
✔ 콘솔 확인
schema.sql
파일에 필요한 테이블 스크립트 작성schema.sql
파일을 읽어서 데이블을 생성할 수 있도록 초기화 설정 추가