스프링 입문 - 6. 스프링 DB 접근 기술 - 순수 Jdbc

WooHyeong·2022년 9월 3일

Spring

목록 보기
11/27

순수 Jdbc

환경 설정

build.gradle 파일에 jdbc, h2 데이터베이스 관련 라이브러리 추가`
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
runtimeOnly 'com.h2database:h2'

자바는 db와 붙으려면 jdbc 드라이버를 이용하여 연동을 한다.

db에 접근하기 위한 접속 정보를 넣어야한다. 이전에는 개발자가 다 넣어줘야했지만 최근에는 spring boot가 다 해주기 때문에 경로만 넣어줘도 된다.

스프링 부트 데이터베이스 연결 설정 추가

resources/application.properties

spring.datasource.url = jdbc:h2:tcp://localhost/~/test
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
  • 주의! : 스프링부트 2.4부터는 spring.datasource.username=sa를 꼭 추가해주어야한다고 한다. 실제로 이 부분은 상관없겠지하고 작성하지 않고 실행하니 작동되지 않았었고, 괜히 다른 곳 오류인가 찾다가 시간을 낭비했다. 꼭 작성하도록 하자.

h2.driver에 에러가 걸리는 경우에는 build.gradle에 작성 h2 database가 import 되지 않아서 그렇다. build.gradle 창에 나타난 코끼리를 눌러주거나, 우측 Gradle 탭에서 refresh를 하면 된다.
(원래는 ID, PW도 적지만, h2 db는 생략해도 된다.)

여기까지 작성하면 스프링이 db와 연결하는 작업을 다 해준다.

기존에는 MemoryMemberRepository를 생성하였었다. MemberRepository라는 인터페이스를 생성하였었기 때문에 db랑 연동하는 구현체를 생성하면 된다.

repository/JdbcMemberRepository 클래스 생성 후 MemberRepository를 implements 한다.

그리고 db와 연결하려면 dataSource가 필요하다.

private final DataSource dataSource;

그리고 dataSource를 스프링으로부터 주입받아야한다. 이전에 application.properties에서 세팅한 접속 정보를 스프링이 이용하여 dataSource를 만들어 놓고 주입 받는다.

package hello.hellospring.repository;
import hello.hellospring.domain.Member;
import org.springframework.jdbc.datasource.DataSourceUtils;
import javax.sql.DataSource;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
public class JdbcMemberRepository implements MemberRepository {
    private final DataSource dataSource;
    public JdbcMemberRepository(DataSource dataSource) {
        this.dataSource = dataSource;
    }




강의 내용을 코드와 함께 타이핑하여 전달하기 어려우므로 노트필기한 내용들을 올렸다.

SpringConfig 파일을 열고, 아래 코드로 변경한다.

package hello.hellospring.service;

import hello.hellospring.repository.JdbcMemberRepository;
import hello.hellospring.repository.MemberRepository;
import hello.hellospring.repository.MemoryMemberRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

@Configuration
public class SpringConfig {

    private DataSource dataSource;
    
    @Autowired
    public SpringConfig(DataSource dataSource) {
        this.dataSource = dataSource;
    }

    @Bean
    public MemberService memberService() {
        return new MemberService(memberRepository());
    }

    @Bean
    public MemberRepository memberRepository() {
        //return new MemoryMemberRepository();
        return new JdbcMemberRepository(dataSource);
    }
}

Config를 수정하는 것만으로 MemoryMemberRepository에서 JdbcMemberRepository로 변경되었다.

  • 개방-폐쇄 원칙(OCP, Open-Closed Principle)
    확장에는 열려있고, 변경에는 닫혀있다.
  • 스프링의 DI(Dependency Injection)을 사용하면 기존 코드를 전혀 손대지 않고, 설정만으로 구현 클래스를 변경할 수 있다.
  • 데이터를 DB에 저장하므로 스프링 서버를 다시 실행해도 데이터가 안전하게 저장된다.
profile
화이링~!

0개의 댓글