Spring Data JDBC 사용하기
>dependencies 추가
//의존 라이브러리 추가
implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'
//인메모리 데이터베이스 추가
runtimeOnly 'com.h2database:h2'
In-memory DB애플리케이션을 실행하는 동안만 잠시 사용하는 데이터베이스이다.
말 그대로 메모리 안에 데이터를 저장하기 때문에 애플리케이션을 종료하면 In-memory DB에 저장된 데이터는 휘발된다.
하지만 오히려 이 휘발되는 특징과 간단한 사용때문에 개인 PC에서 개발할 때, 테스트 용도로 많이 사용된다.
쓸데없는 데이터가 없고, 테스트가 끝나면 데이터를 깔끔히 비워 항상 초기 상태를 유지할 수 있다!
>application.yml 혹은 application.properties
: Spring Boot Initializer를 통해 생성한 프로젝트의 src/main/resources 디렉토리 경로에 존재하는 파일
: Spring에서 사용하는 다양한 설정 정보를 입력할 수 있음. application.yml이 조금 더 나은 방법을 제공함.(depth)
: url을 설정하지 않으면 매번 랜덤하게 생성됨.
//h2: console: enabled: true => h2 DB를 사용하겠다
//path: /h2 => http://localhost:8080 뒤에 /h2 경로를 설정하겠다.
//datasource: url: jdbc:h2:mem:test => url을 랜덤이 아닌 설정한 url로 고정되게 생성하겠다.
//sql은 밑에서 설명
>애플리케이션 실행 및 로그 확인
Bootstrapping Spring Data JDBC repositories in DEFAULT mode.
Finished Spring Data repository scanning in 10 ms. Found 0 JDBC repository interfaces.
H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:test '
//실행 로그에서 찾아 볼 수 있는 Database 관련 로그(요약)
>path를 통해 H2 DB 접속
http://localhost:8080/h2
>JDBC URL로 Connect
jdbc:h2:mem:test
>H2 콘솔 확인
>Sample 코드 구현
DTO
Controller
Mapper
Service
Entity
Respository
>Respository
: 인터페이스로 구현하며 CrudRespository를 상속받는다.
: CrudRespository <> 안에 들어갈 요소는 entity 참조형과 @Id 애너테이션이 붙은 id 변수의 자료형이다.
>CrudRespository<1,2>
: Spring 에서 지원해주는 인터페이스
: DB에 CRUD 작업을 할 수 있는 기능을 지녔다.
: 제네릭 1의 요소로 클래스를 제공한다. 해당 클래스 객체에 담긴 데이터를 DB에서 CRUD 작업을 할 수 있다.
: 제네릭 2의 요소로 @Id가 붙은 변수의 자료형을 제공한다.
: @NoRepositoryBean이 붙어있어서 Spring Bean 등록 없이 DI 개념을 사용할 수 있다. (추가 설명)
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
public @interface NoRepositoryBean { ... }
>Entity 클래스
: Message 라는 이름으로 명명한 상황
: Message는 DB의 테이블 명이다.
: @Id 를 붙인 멤버 변수는 Entity의 고유 식별자 역할을 하며, DB의 PK(Primary Key)이다.
>application.yml 파일 sql 설명
-schema-lacations:
: schema.sql 의 경로를 지정해주면 Spring에서 자동으로 애플리케이션 실행 시, 데이터베이스에 테이블을 자동으로 생성해준다.
//sql: init: schema-location: classphat*:db/h2/schema.sql => 해당 경로에 있는 schema.sql을 읽고 h2 DB를 초기화 시키겠다.
/*schema.sql*/
CREATE TABLE IF NOT EXISTS MESSAGE (
message_id bigint NOT NULL AUTO_INCREMENT,
message varchar(100) NOT NULL,
PRIMARY KEY (message_id)
);
//MESSAGE라는 테이블이 없다면 MESSAGE라는 테이블을 생성한다.
//message_id 라는 컬럼을 만든다. message_id는 bigint 타입이고 Null을 허용하지 않고 자동으로 증가한다.
//+AUTO_INCREMENT 때문에 따로 지정해서 값을 넣어주지 않아도 다른 값을 추가하면 자동으로 증가한다.
//message 라는 컬럼을 만든다. message 는 100자 내외 varchar타입이고 Null을 허용하지 않는다.
//message_id 를 PK(Primary Key)로 지정한다.
//+message_id는 Entity 클래스의 @Id가 붙은 messageId와 연동된다. 따라서 RequsetBody로 messageId도 받을 필요가 없다. AUTO_INCREMENT이기 때문이다.
Spring Data JDBC 적용 순서 간편 정리
1. build.gradle 에 의존 라이브러리 추가
2. application.yml 에 사용할 데이터베이스 설정(H2)
3. schema.sql 에 내용 작성 후 생성
4. application.yml 에 SQL 파일 사용 설정(schema.sql)
5. Entity 클래스 생성; DB의 테이블과 매핑할 클래스
6. Respository 인터페이스 생성
7. Service 클래스에서 Respository 인터페이스를 DI 하여 사용할 수 있게 설정
8.Service 클래스에서 설정된 Respository 인터페이스(CrudRespository)의 메서드를 이용해서 DB에 CRUD 작업 수행 코드 작성.
'코드스테이츠_국비교육 > [Section3]' 카테고리의 다른 글
47.02_[Spring MVC] Spring Data JDBC_도메인 엔티티 클래스 정의_22.10.28 (0) | 2022.10.30 |
---|---|
47.01_[Spring MVC] Spring Data JDBC_JDBC 기반 설계(DDD)_22.10.28 (0) | 2022.10.30 |
46.02_[Spring MVC] JDBC 기반 데이터 액세스 계층_Spring 데이터 액세스 기술 유형_22.10.27 (0) | 2022.10.27 |
46.01_[Spring MVC] JDBC 기반 데이터 액세스 계층_JDBC_22.10.27 (0) | 2022.10.27 |
45.01_[Spring MVC] 예외 처리_(2) Business Logic Exception_22.10.26 (0) | 2022.10.26 |