본문 바로가기
Spring_inflearn/입문

[Spring] inflearn 스프링 입문 - 스프링 DB 접근 기술 2

by clolee 2022. 9. 15.

순수 JDBC

 

애플리케이션에서 db에 연동하여 데이터베이스에 insert, select 쿼리를 날려 db에 넣고 빼기

 

데이터 저장 기술의 발전

 

 

build.gradle 에 추가

implementation 'org.springframework.boot:spring-boot-starter-jdbc'

자바는 db연동을 위해 JDBC driver가 있어야 함. 이걸 가지고 서로 연동

 

runtimeOnly 'com.h2database:h2'

db와 붙을 때 데이터베이스가 제공하는 client 필요

 

resources/application.properties

spring.datasource.url=jdbc:h2:tcp://localhost/~/test
spring.datasource.driver-class-name=org.h2.Driver

스프링이 db랑 연결하는 작업을 다 해줌

 

 

JDBC API 가지고 개발

 

interface 만들었기 때문에 구현체를 만들면 됨. 기존에는 MemoryMemberRepository 사용

JDBCMemberRepository 파일 만들기

회원 저장 역할은 MemberRepository가 함.

구현을 메모리에 - MemoryMemberRepository // db와 연동해서 JDBC에 - JDBCMemberRepository  차이

 

JDBCMemberRepository

스프링한테 dataSource를 주입받아야 함. 스프링 부트가 dataSource (접속 정보)를 만들어놓음

dataSource.getConnection()으로 데이터베이스 커넥션을 얻을 수 있음. 여기에 sql문 통해 db에 전달

 

JDBCMemberRepository 실행 위해 configuration 해줘야 함

 

src/main/java/hello/hellospring/SpringConfig.java

SpringConfig 에서 MemoryMemberRepository를 JDBCMemberRepository로 바꾸기

JDBCMemberRepository를 스프링 빈으로 등록

DataSource 필요

@Configuration 한 것도 스프링 빈으로 관리됨

스프링 부트가 설정 파일 application.properties를 보고 데이터베이스와 연결할 수 있는 정보가 있는 dataSource를 만들어 줌

그리고 dataSource를 주입해줌 @Autowired

package hello.hellospring;

import hello.hellospring.repository.JdbcMemberRepository;
import hello.hellospring.repository.MemberRepository;
import hello.hellospring.repository.MemoryMemberRepository;
import hello.hellospring.service.MemberService;
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);
    }
}

 

다른 코드를 손대지 않고 JDBCMemberRepository class 를 만들고 (구현체를 만들어 interface를 확장)

Configuration만 변경

 

localhost:8080에서 h2db에 저장했던 회원 목록 확인

회원 가입

jpa가 추가된 회원 목록 확인

DB 콘솔에서 확인

 

스프링을 쓰는 이유

 

객체지향적 설계

다형성 활용. 인터페이스를 두고 구현체 바꿔 끼기 가능. 스프링은 이것을 편리하게 되도록 스프링 컨테이너가 이것을 지원.

+ dependency injection

 

기존의 코드를 손대지 않고 애플리케이션 설정, 조립하는 코드 (어셈블리)만 변경하면 됨. 이것을 편리하게 해주는 것이 스프링의 장점

 

MemberService는 MemberRepository를 의존

MemberRepository는 구현체로 MemoryMemberRepository와 JDBCMemberRepository가 있다.

스프링 컨테이너에서 기존에는 MemoryMemberRepository를 스프링 빈으로 등록 => JDBCMemberRepository 등록

구현체 변경

 

solid 검색

 

OCP, Open-Closed Principle (개방_폐쇄 원칙)

확장에는 열려있고, 수정, 변경에는 닫혀있다.

확장 - 기능 추가

 

객체지향의 다형성 개념을 활용하면 기능을 완전히 변경해도 애플리케이션 전체를 수정할 필요가 없다. 애플리케이션 조립 코드만 수정

빈으로 등록 + 나머지 DI

 

데이터를 DB에 저장하므로 스프링 서버를 다시 실행해도 데이터가 안전하게 저장되어 있다.

 

 

댓글