[Spring] JDBC기반 데이터 액세스 계층 - Spring Data JDBC 기본

정동아·2023년 6월 20일
0

백엔드 부트캠프

목록 보기
36/41

JDBC는 Java 기반의 애플리케이션에서 사용하는 데이터 액세스 기술의 기본이되는 저수준 API이다.
JDBC의 구체적인 API사용법을 알 필요는 없지만 JDBC의 동작 흐름을 이해하면 Spring에서 지원하는 데이터 액세스 기술을 사용하는데 도움이 된다.


동작 흐름

JDBC동작의 흐름을 한 문장으로 표현하면 다음과 같다.

Java 애플리케이션에서 JDBC API를 이용해 적절한 데이터베이스 드라이버를 로딩한 후, 데이터베이스와 인터랙션 한다

사용 흐름

  1. JDBC 드라이버 로딩
    사용하고자 하는 JDBC 드라이버를 로딩한다. JDBC 드라이버는 DriverManeger라는 클래스를 통해 로딩된다.

  2. Connection 객체 생성
    JDBC 드라이버가 정상적으로 로딩되면 DriverManeger를 통해 데이터 베이스와 연결되는 세션인 Connection 객체를 생성한다.

  3. Statement 객체 생성
    Statement 객체는 작성된 SQL 쿼리문을 실행하기 위한 객체로써 객체 생성 후에 정적인 SQL 쿼리 문자열을 입력으로 가진다.

  4. Query 실행
    생성된 Statement 객체를 이용해서 입력한 SQL쿼리를 실행한다.

  5. ResultSet 객체로부터 데이터 조회
    실행된 SQL 쿼리문에 대한 결과 데이터 셋이다.

  6. ResultSet객체 Close, Statement객체 Close, Connection 객체Close
    JDBC API를 통해 사용된 객체들은 사용 이후에 사용한 순서의 역순으로 차례로 Close해주어야한다.

Spring Data JDBC 적용 순서

  1. build.gradle에 사용할 데이터베이스를 위한 의존 라이브러리를 추가.
dependencies {
	...
	...
	implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'
	runtimeOnly 'com.h2database:h2'
}
  1. application.yml 파일에 사용할 데이터베이스에 대한 설정
spring:
  h2:
    console:
      enabled: true
      path: /h2     # (1) Context path 변경
  datasource:
    url: jdbc:h2:mem:test     # (2) JDBC URL 변경
  sql:
    init:
      schema-locations: classpath*:db/h2/schema.sql   #(3) 테이블 생성 파일 경로
      //application.yml 파일에서 'schema.sql'파일을 읽어서 테이블을 생성할 수 있도록 초기화 설정을 추가한다. 
  1. 'schema.sql'파일에 필요한 테이블 스크립트 작성
CREATE TABLE IF NOT EXISTS MESSAGE (
    message_id bigint NOT NULL AUTO_INCREMENT,
    message varchar(100) NOT NULL,
    PRIMARY KEY (message_id)
);
  1. 데이터베이스의 테이블과 매핑할 엔티티(Entity)클래스 작성
import lombok.Getter;
import lombok.Setter;
import org.springframework.data.annotation.Id;

@Getter
@Setter
public class Message {  //클래스 명이 데이터베이스의 테이블 명에 해당된다. 
    @Id    //해당 애너테이션을 추가한 멤버 변수는 해당 엔티티의 고유 식별자 역할을 하고, 이 식별자는 데이터베이스의 Primary key로 지정한 열에 해당된다. 
    private long messageId;
    private String message;
}
  1. 작성한 엔티티 클래스를 기반으로 데이터베이스의 작업을 처리할 Repository 인터페이스 작성
import org.springframework.data.repository.CrudRepository;

public interface MessageRepository extends CrudRepository<Message, Long> {
}
  1. 작성된 Repository 인터페이스를 서비스 클래스에서 사용할 수 있도록 DI 한다.
@Service
public class MessageService {
    // MessageService 클래스에서 DI를 통해 주입
    private final MessageRepository messageRepository;

    public MessageService(MessageRepository messageRepository) {
        this.messageRepository = messageRepository;
    }

    public Message createMessage(Message message) {
        return messageRepository.save(message);  // Message 엔티티 클래스에 포함된 데이터를 데이터베이스에 저장하는 데 사용
    }
}
  1. DI된 Repository의 메서드를 사용해서 서비스 클래스에서 데이터베이스에 CRUD 작업을 수행

0개의 댓글